diff --git a/DEPS b/DEPS
index 8bed9c6f..49581db 100644
--- a/DEPS
+++ b/DEPS
@@ -105,11 +105,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'ae17e65ef4b46ec007df4aa04dbc389ee757c9ba',
+  'skia_revision': '61582510eeb8484ad3e12df97bf781a3129f60d0',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '653887dd8bd10910cb1fb65c3b2d6df7f594b704',
+  'v8_revision': '7a5731ed6129d32905fdef1149410134393c1a30',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -129,7 +129,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': 'd9fb538bc08c4923fbfd3d50c47a61716d679956',
+  'pdfium_revision': 'bcd66f54de1291ddf8b7b7caca3e7360e14fcc8d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
@@ -165,7 +165,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '44fc6f687b352f954863d75823765b501823b175',
+  'catapult_revision': '53842b6cbc1fbab4f69ed5b9c2c30babd61cefbd',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -289,7 +289,7 @@
   },
 
   'src/ios/third_party/material_components_ios/src': {
-      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '8fad5e937124a6b81415cb4fbc12dbef746af8e1',
+      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'ed2b51677ffb0a07829de10af79d36390c474556',
       'condition': 'checkout_ios',
   },
 
@@ -543,7 +543,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'a28b14f122463a6d73c623e77c9dea4e228322dc',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '04925ac3f7e50988945be3a5655198736a8b3e58',
 
   'src/third_party/devtools-node-modules':
     Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'),
@@ -684,7 +684,7 @@
     Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + 'a9bac57ce6c9d390a52ebaad3259f5fdb871210e',
 
   'src/third_party/icu':
-    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'f61e46dbee9d539a32551493e3bcc1dea92f83ec',
+    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '172d33141cd16df9d027cfd49bfe940b1dc66f1a',
 
   'src/third_party/icu4j': {
       'packages': [
@@ -747,7 +747,7 @@
     Var('chromium_git') + '/external/libaddressinput.git' + '@' + 'd955c63ec7048d59dffd20af25eeec23da878d27',
 
   'src/third_party/libaom/source/libaom': {
-    'url': Var('aomedia_git') + '/aom.git' + '@' +  'cc92258a08d98f469dff1be288acbc322632377b',
+    'url': Var('aomedia_git') + '/aom.git' + '@' +  'c5a56b99df86cd39706af252a13ed263eebc6412',
     'condition': 'checkout_libaom',
   },
 
@@ -891,7 +891,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' +  'ae8db279f88ef4900076c64ecabd7dc56911ebca',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' +  '8d31c73edc4acdb042a36cb37f99c89889fbc476',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + 'ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78',
@@ -1010,7 +1010,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '5e83981c2c44f24109b96b555d6865d481e0c609',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '8b23dba0e50f6afbdba4ae0de46f56e6f0fde77c',
+    Var('webrtc_git') + '/src.git' + '@' + '6f440ed5b51fe859a0c438db189962eaf737b8c7',
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
diff --git a/WATCHLISTS b/WATCHLISTS
index 19bf9f5..3254c864 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -727,9 +727,6 @@
     'components_deps': {
       'filepath': 'components/([^/]*/)*DEPS',
     },
-    'content': {
-      'filepath': 'content/',
-    },
     'content_bluetooth': {
       'filepath': 'content/.*bluetooth'
     },
@@ -989,9 +986,6 @@
     'ios_web': {
       'filepath': 'ios/web(_view)?/',
     },
-    'ipc': {
-      'filepath': 'ipc/ipc',
-    },
     'libaom': {
       'filepath': 'third_party/libaom/',
     },
@@ -1317,10 +1311,6 @@
     'picture_in_picture': {
       'filepath': 'third_party/blink/renderer/modules/picture_in_picture/'
     },
-    'plugin': {
-      'filepath': 'chrome/browser/plugin|chrome/plugin/|'\
-        'chrome/common/plugin',
-    },
     'polymer': {
       'filepath': 'third_party/polymer/|'\
                   'third_party/web-animations-js/|'\
@@ -2010,7 +2000,6 @@
     'components_deps': ['blundell+watchlist@chromium.org',
                         'droger+watchlist@chromium.org',
                         'sdefresne+watchlist@chromium.org'],
-    'content': ['jam@chromium.org'],
     'content_bluetooth': ['mattreynolds+watch@chromium.org',
                           'ortuno+watch@chromium.org'],
     'content_loader': ['loading-reviews@chromium.org'],
@@ -2124,7 +2113,6 @@
                      'marq+watch@chromium.org'],
     'ios_web': ['ios-reviews+web@chromium.org',
                 'eugenebut@chromium.org'],
-    'ipc': ['jam@chromium.org'],
     'libaom': ['fgalligan@chromium.org',
                'johannkoenig@chromium.org',
                'jzern@chromium.org',
@@ -2172,10 +2160,7 @@
     'metrics': ['asvitkine+watch@chromium.org'],
     'metrics_xml_files': ['asvitkine+watch@chromium.org'],
     'midi': ['toyoshim+midi@chromium.org'],
-    'mojo': ['aa@chromium.org',
-             'darin@chromium.org',
-             'qsr+mojo@chromium.org',
-             'viettrungluu+watch@chromium.org'],
+    'mojo': ['darin@chromium.org'],
     'multidevice': ['jhawkins+watch-multidevice@chromium.org',
                     'jlklein+watch-multidevice@chromium.org',
                     'jordynass+watch-multidevice@chromium.org',
@@ -2249,7 +2234,6 @@
                     'raymes+watch@chromium.org',
                     'timloh+watch@chromium.org'],
     'picture_in_picture': ['beaufort.francois+pip@gmail.com'],
-    'plugin': ['jam@chromium.org'],
     'polymer': ['michaelpg+watch-polymer@chromium.org'],
     'popup_blocker': ['csharrison+watch-popups@chromium.org'],
     'precache': ['wifiprefetch-reviews@google.com'],
diff --git a/android_webview/browser/aw_autofill_client.cc b/android_webview/browser/aw_autofill_client.cc
index a5f6676..d8cc41c 100644
--- a/android_webview/browser/aw_autofill_client.cc
+++ b/android_webview/browser/aw_autofill_client.cc
@@ -91,6 +91,13 @@
   return nullptr;
 }
 
+security_state::SecurityLevel
+AwAutofillClient::GetSecurityLevelForUmaHistograms() {
+  // The metrics are not recorded for Android webview, so return the count value
+  // which will not be recorded.
+  return security_state::SecurityLevel::SECURITY_LEVEL_COUNT;
+}
+
 autofill::PersonalDataManager* AwAutofillClient::GetPersonalDataManager() {
   return nullptr;
 }
diff --git a/android_webview/browser/aw_autofill_client.h b/android_webview/browser/aw_autofill_client.h
index 54cdfda..75671435 100644
--- a/android_webview/browser/aw_autofill_client.h
+++ b/android_webview/browser/aw_autofill_client.h
@@ -67,6 +67,7 @@
   ukm::UkmRecorder* GetUkmRecorder() override;
   ukm::SourceId GetUkmSourceId() override;
   autofill::AddressNormalizer* GetAddressNormalizer() override;
+  security_state::SecurityLevel GetSecurityLevelForUmaHistograms() override;
   void ShowAutofillSettings() override;
   void ShowUnmaskPrompt(
       const autofill::CreditCard& card,
diff --git a/android_webview/glue/BUILD.gn b/android_webview/glue/BUILD.gn
index b2f026f..5832a6a 100644
--- a/android_webview/glue/BUILD.gn
+++ b/android_webview/glue/BUILD.gn
@@ -9,13 +9,6 @@
 import("generate_resource_rewriter.gni")
 import("glue.gni")
 
-webview_public_framework_ijar = "frameworks.public.interface.jar"
-
-generate_interface_jar("public_framework_ijar") {
-  input_jar = webview_public_framework_jar
-  output_jar = "$target_out_dir/$webview_public_framework_ijar"
-}
-
 generate_resource_rewriter("glue_resource_rewriter") {
   # Change deps? please modify glue_library_deps variable.
   deps = glue_library_deps
@@ -27,11 +20,9 @@
   deps = glue_library_deps
   srcjar_deps = [ ":glue_resource_rewriter" ]
 
-  alternative_android_sdk_ijar_dep = ":public_framework_ijar"
-  _ijar = webview_public_framework_ijar
-  _ijar_dir = get_label_info(alternative_android_sdk_ijar_dep, "target_out_dir")
-  alternative_android_sdk_ijar = "$_ijar_dir/$_ijar"
-  alternative_android_sdk_jar = webview_public_framework_jar
+  alternative_android_sdk_dep =
+      "//third_party/android_system_sdk:public_framework_system_java"
+
   java_files = [
     "java/src/com/android/webview/chromium/ApiHelperForM.java",
     "java/src/com/android/webview/chromium/ApiHelperForN.java",
diff --git a/android_webview/system_webview_apk_tmpl.gni b/android_webview/system_webview_apk_tmpl.gni
index e3d6a4b..2c0f997 100644
--- a/android_webview/system_webview_apk_tmpl.gni
+++ b/android_webview/system_webview_apk_tmpl.gni
@@ -17,8 +17,8 @@
       "//base:base_java",
     ]
 
-    if (!defined(alternative_android_sdk_jar)) {
-      alternative_android_sdk_jar = webview_framework_jar
+    if (!defined(alternative_android_sdk_dep)) {
+      alternative_android_sdk_dep = webview_framework_dep
     }
 
     shared_resources = true
diff --git a/android_webview/tools/automated_ui_tests/BUILD.gn b/android_webview/tools/automated_ui_tests/BUILD.gn
index 2e1a1af51..d1ab4bab 100644
--- a/android_webview/tools/automated_ui_tests/BUILD.gn
+++ b/android_webview/tools/automated_ui_tests/BUILD.gn
@@ -65,6 +65,7 @@
     "//third_party/junit",
     "//third_party/ub-uiautomator:ub_uiautomator_java",
   ]
+  deps += android_extra_test_deps
   data = [
     "test/data/",
   ]
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 1ef7966..bd52154 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -1281,6 +1281,8 @@
     "wm/workspace/workspace_window_resizer.h",
     "wm/workspace_controller.cc",
     "wm/workspace_controller.h",
+    "ws/ash_gpu_interface_provider.cc",
+    "ws/ash_gpu_interface_provider.h",
     "ws/window_service_delegate_impl.cc",
     "ws/window_service_delegate_impl.h",
     "ws/window_service_owner.cc",
@@ -1305,6 +1307,7 @@
     "//services/ui/public/cpp/input_devices",
     "//services/ui/public/interfaces",
     "//services/ui/public/interfaces/display",
+    "//services/ui/ws2:host",
     "//services/ui/ws2:lib",
     "//skia",
     "//ui/aura",
@@ -1343,6 +1346,7 @@
     "//chromeos/services/multidevice_setup/public/mojom",
     "//components/account_id",
     "//components/device_event_log",
+    "//components/discardable_memory/service",
     "//components/exo",
     "//components/exo/wayland",
     "//components/onc",
@@ -1366,9 +1370,11 @@
     "//services/data_decoder/public/cpp",
     "//services/preferences/public/cpp",
     "//services/service_manager/public/cpp",
+    "//services/ui/gpu_host",
 
     # TODO(sky): this should not be necessary once --mash goes away.
     "//services/ui:lib",
+    "//services/ui/public/cpp/input_devices:input_device_controller",
     "//services/ui/public/interfaces/input_devices",
 
     # TODO(msw): Remove this; only ash_with_content should depend on webkit.
diff --git a/ash/DEPS b/ash/DEPS
index 4ef6289..b062071e 100644
--- a/ash/DEPS
+++ b/ash/DEPS
@@ -4,6 +4,8 @@
   "+cc/output",
   "+chromeos/cryptohome",
   "+components/account_id",
+  "+components/discardable_memory/public",
+  "+components/discardable_memory/service/discardable_shared_memory_manager.h",
   "+components/exo",
   "+components/pref_registry",
   "+components/prefs",
@@ -28,6 +30,8 @@
   "+services/service_manager/embedder",
   "+services/service_manager/public",
   "+services/ui/common",
+  "+services/ui/gpu_host/gpu_host.h",
+  "+services/ui/gpu_host/gpu_host_delegate.h",
   "+services/ui/public",
   "+services/ui/ws2",
   "+services/viz/public",
@@ -115,6 +119,9 @@
   "app_launch_unittest.cc": [
     "+ash/components/quick_launch/public",
   ],
+  "ash_service\.*": [
+    "+chromeos/cryptohome",
+  ],
   "message_center_controller\.*": [
     "+components/arc/common/notifications.mojom.h"
   ],
diff --git a/ash/ash_service.cc b/ash/ash_service.cc
index 7e6e61d..f55ae72 100644
--- a/ash/ash_service.cc
+++ b/ash/ash_service.cc
@@ -5,13 +5,45 @@
 #include "ash/ash_service.h"
 
 #include "ash/mojo_interface_factory.h"
+#include "ash/network_connect_delegate_mus.h"
 #include "ash/shell.h"
+#include "ash/shell_delegate_mash.h"
+#include "ash/shell_init_params.h"
+#include "ash/shell_port_classic.h"
+#include "ash/ws/ash_gpu_interface_provider.h"
 #include "ash/ws/window_service_owner.h"
 #include "base/bind.h"
-#include "base/process/process_handle.h"
+#include "base/feature_list.h"
+#include "base/threading/thread.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "chromeos/audio/cras_audio_handler.h"
+#include "chromeos/cryptohome/system_salt_getter.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_policy_controller.h"
+#include "chromeos/network/network_connect.h"
+#include "chromeos/network/network_handler.h"
+#include "chromeos/system/fake_statistics_provider.h"
+#include "components/discardable_memory/service/discardable_shared_memory_manager.h"
+#include "components/viz/common/frame_sinks/begin_frame_source.h"
+#include "components/viz/common/switches.h"
+#include "components/viz/host/host_frame_sink_manager.h"
+#include "device/bluetooth/bluetooth_adapter_factory.h"
+#include "device/bluetooth/dbus/bluez_dbus_manager.h"
 #include "services/service_manager/embedder/embedded_service_info.h"
+#include "services/service_manager/public/cpp/connector.h"
+#include "services/service_manager/public/cpp/service_context.h"
+#include "services/ui/gpu_host/gpu_host.h"
+#include "services/ui/public/cpp/gpu/gpu.h"
+#include "services/ui/public/cpp/input_devices/input_device_controller.h"
 #include "services/ui/public/interfaces/constants.mojom.h"
+#include "services/ui/ws2/host_context_factory.h"
+#include "services/ui/ws2/window_service.h"
+#include "ui/aura/env.h"
+#include "ui/aura/window_tree_host.h"
+#include "ui/base/ui_base_features.h"
+#include "ui/views/layout/layout_provider.h"
+#include "ui/views/views_delegate.h"
+#include "ui/wm/core/wm_state.h"
 
 namespace ash {
 namespace {
@@ -20,11 +52,49 @@
   return std::make_unique<AshService>();
 }
 
+class AshViewsDelegate : public views::ViewsDelegate {
+ public:
+  AshViewsDelegate() = default;
+  ~AshViewsDelegate() override = default;
+
+ private:
+  // views::ViewsDelegate:
+  void OnBeforeWidgetInit(
+      views::Widget::InitParams* params,
+      views::internal::NativeWidgetDelegate* delegate) override {}
+
+  // TODO: this may need to create ChromeLayoutProvider.
+  // https://crbug.com/853989 .
+  views::LayoutProvider layout_provider_;
+
+  DISALLOW_COPY_AND_ASSIGN(AshViewsDelegate);
+};
+
 }  // namespace
 
 AshService::AshService() = default;
 
-AshService::~AshService() = default;
+AshService::~AshService() {
+  if (!base::FeatureList::IsEnabled(features::kOopAsh))
+    return;
+
+  Shell::DeleteInstance();
+
+  statistics_provider_.reset();
+  // NOTE: PowerStatus is shutdown by Shell.
+  chromeos::SystemSaltGetter::Shutdown();
+  chromeos::CrasAudioHandler::Shutdown();
+  chromeos::NetworkConnect::Shutdown();
+  network_connect_delegate_.reset();
+  // We may not have started the NetworkHandler.
+  if (network_handler_initialized_)
+    chromeos::NetworkHandler::Shutdown();
+  device::BluetoothAdapterFactory::Shutdown();
+  bluez::BluezDBusManager::Shutdown();
+  chromeos::PowerPolicyController::Shutdown();
+  if (dbus_thread_manager_initialized_)
+    chromeos::DBusThreadManager::Shutdown();
+}
 
 // static
 service_manager::EmbeddedServiceInfo AshService::CreateEmbeddedServiceInfo() {
@@ -34,11 +104,87 @@
   return info;
 }
 
+void AshService::InitForOop() {
+  wm_state_ = std::make_unique<::wm::WMState>();
+
+  discardable_shared_memory_manager_ =
+      std::make_unique<discardable_memory::DiscardableSharedMemoryManager>();
+
+  gpu_host_ = std::make_unique<ui::gpu_host::DefaultGpuHost>(
+      this, context()->connector(), discardable_shared_memory_manager_.get());
+
+  host_frame_sink_manager_ = std::make_unique<viz::HostFrameSinkManager>();
+  host_frame_sink_manager_->WillAssignTemporaryReferencesExternally();
+  CreateFrameSinkManager();
+  io_thread_ = std::make_unique<base::Thread>("IOThread");
+  base::Thread::Options thread_options(base::MessageLoop::TYPE_IO, 0);
+  thread_options.priority = base::ThreadPriority::NORMAL;
+  CHECK(io_thread_->StartWithOptions(thread_options));
+  gpu_ = ui::Gpu::Create(context()->connector(), ui::mojom::kServiceName,
+                         io_thread_->task_runner());
+
+  context_factory_ = std::make_unique<ui::ws2::HostContextFactory>(
+      gpu_.get(), host_frame_sink_manager_.get());
+
+  env_ = aura::Env::CreateInstanceToHostViz(context()->connector());
+
+  views_delegate_ = std::make_unique<AshViewsDelegate>();
+
+  // Must occur after mojo::ApplicationRunner has initialized AtExitManager, but
+  // before WindowManager::Init(). Tests might initialize their own instance.
+  if (!chromeos::DBusThreadManager::IsInitialized()) {
+    chromeos::DBusThreadManager::Initialize(
+        chromeos::DBusThreadManager::kShared);
+    dbus_thread_manager_initialized_ = true;
+  }
+  chromeos::PowerPolicyController::Initialize(
+      chromeos::DBusThreadManager::Get()->GetPowerManagerClient());
+
+  // See ChromeBrowserMainPartsChromeos for ordering details.
+  bluez::BluezDBusManager::Initialize(
+      chromeos::DBusThreadManager::Get()->GetSystemBus(),
+      chromeos::DBusThreadManager::Get()->IsUsingFakes());
+  if (!chromeos::NetworkHandler::IsInitialized()) {
+    chromeos::NetworkHandler::Initialize();
+    network_handler_initialized_ = true;
+  }
+  network_connect_delegate_ = std::make_unique<NetworkConnectDelegateMus>();
+  chromeos::NetworkConnect::Initialize(network_connect_delegate_.get());
+  // TODO(jamescook): Initialize real audio handler.
+  chromeos::CrasAudioHandler::InitializeForTesting();
+  chromeos::SystemSaltGetter::Initialize();
+
+  // TODO(jamescook): Refactor StatisticsProvider so we can get just the data
+  // we need in ash. Right now StatisticsProviderImpl launches the crossystem
+  // binary to get system data, which we don't want to do twice on startup.
+  statistics_provider_.reset(
+      new chromeos::system::ScopedFakeStatisticsProvider());
+  statistics_provider_->SetMachineStatistic("initial_locale", "en-US");
+  statistics_provider_->SetMachineStatistic("keyboard_layout", "");
+
+  ShellInitParams shell_init_params;
+  shell_init_params.shell_port = std::make_unique<ash::ShellPortClassic>();
+  shell_init_params.delegate =
+      std::make_unique<ShellDelegateMash>(context()->connector());
+  shell_init_params.context_factory = context_factory_.get();
+  shell_init_params.context_factory_private =
+      context_factory_->GetContextFactoryPrivate();
+  shell_init_params.connector = context()->connector();
+  shell_init_params.gpu_interface_provider =
+      std::make_unique<AshGpuInterfaceProvider>(
+          gpu_host_.get(), discardable_shared_memory_manager_.get());
+  Shell::CreateInstance(std::move(shell_init_params));
+  Shell::GetPrimaryRootWindow()->GetHost()->Show();
+}
+
 void AshService::OnStart() {
   mojo_interface_factory::RegisterInterfaces(
       &registry_, base::ThreadTaskRunnerHandle::Get());
   registry_.AddInterface(base::BindRepeating(&AshService::BindServiceFactory,
                                              base::Unretained(this)));
+
+  if (base::FeatureList::IsEnabled(features::kOopAsh))
+    InitForOop();
 }
 
 void AshService::OnBindInterface(
@@ -54,6 +200,12 @@
     service_manager::mojom::PIDReceiverPtr pid_receiver) {
   DCHECK_EQ(name, ui::mojom::kServiceName);
   Shell::Get()->window_service_owner()->BindWindowService(std::move(service));
+  if (base::FeatureList::IsEnabled(features::kOopAsh)) {
+    ui::ws2::WindowService* window_service =
+        Shell::Get()->window_service_owner()->window_service();
+    input_device_controller_ = std::make_unique<ui::InputDeviceController>();
+    input_device_controller_->AddInterface(window_service->registry());
+  }
   pid_receiver->SetPID(base::GetCurrentProcId());
 }
 
@@ -62,4 +214,31 @@
   service_factory_bindings_.AddBinding(this, std::move(request));
 }
 
+void AshService::CreateFrameSinkManager() {
+  viz::mojom::FrameSinkManagerPtr frame_sink_manager;
+  viz::mojom::FrameSinkManagerRequest frame_sink_manager_request =
+      mojo::MakeRequest(&frame_sink_manager);
+  viz::mojom::FrameSinkManagerClientPtr frame_sink_manager_client;
+  viz::mojom::FrameSinkManagerClientRequest frame_sink_manager_client_request =
+      mojo::MakeRequest(&frame_sink_manager_client);
+
+  viz::mojom::FrameSinkManagerParamsPtr params =
+      viz::mojom::FrameSinkManagerParams::New();
+  params->restart_id = viz::BeginFrameSource::kNotRestartableId + 1;
+  base::Optional<uint32_t> activation_deadline_in_frames =
+      switches::GetDeadlineToSynchronizeSurfaces();
+  params->use_activation_deadline = activation_deadline_in_frames.has_value();
+  params->activation_deadline_in_frames =
+      activation_deadline_in_frames.value_or(0u);
+  params->frame_sink_manager = std::move(frame_sink_manager_request);
+  params->frame_sink_manager_client = frame_sink_manager_client.PassInterface();
+  gpu_host_->CreateFrameSinkManager(std::move(params));
+
+  host_frame_sink_manager_->BindAndSetManager(
+      std::move(frame_sink_manager_client_request), nullptr /* task_runner */,
+      std::move(frame_sink_manager));
+}
+
+void AshService::OnGpuServiceInitialized() {}
+
 }  // namespace ash
diff --git a/ash/ash_service.h b/ash/ash_service.h
index 2d58a89..eea8c120 100644
--- a/ash/ash_service.h
+++ b/ash/ash_service.h
@@ -11,20 +11,63 @@
 #include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/mojom/service_factory.mojom.h"
+#include "services/ui/gpu_host/gpu_host_delegate.h"
+#include "services/ui/public/interfaces/gpu.mojom.h"
+
+namespace aura {
+class Env;
+}  // namespace aura
+
+namespace base {
+class Thread;
+}
+
+namespace chromeos {
+namespace system {
+class ScopedFakeStatisticsProvider;
+}
+}  // namespace chromeos
+
+namespace discardable_memory {
+class DiscardableSharedMemoryManager;
+}
 
 namespace service_manager {
 struct EmbeddedServiceInfo;
 }
 
+namespace ui {
+class Gpu;
+class InputDeviceController;
+namespace gpu_host {
+class GpuHost;
+}
+namespace ws2 {
+class HostContextFactory;
+}
+}  // namespace ui
+
+namespace views {
+class ViewsDelegate;
+}
+
+namespace viz {
+class HostFrameSinkManager;
+}
+
+namespace wm {
+class WMState;
+}
 namespace ash {
 
+class NetworkConnectDelegateMus;
+
 // Used to export Ash's mojo services, specifically the interfaces defined in
 // Ash's manifest.json. Also responsible for creating the
-// UI-Service/WindowService.
-//
-// NOTE: this is not used for --mash.
+// UI-Service/WindowService when ash runs out of process.
 class ASH_EXPORT AshService : public service_manager::Service,
-                              public service_manager::mojom::ServiceFactory {
+                              public service_manager::mojom::ServiceFactory,
+                              public ui::gpu_host::GpuHostDelegate {
  public:
   AshService();
   ~AshService() override;
@@ -45,13 +88,52 @@
       service_manager::mojom::PIDReceiverPtr pid_receiver) override;
 
  private:
+  // Does initialization necessary when ash runs out of process. This is called
+  // once the service starts (from OnStart()).
+  void InitForOop();
+
   void BindServiceFactory(
       service_manager::mojom::ServiceFactoryRequest request);
 
+  void CreateFrameSinkManager();
+
+  // ui::ws::GpuHostDelegate:
+  void OnGpuServiceInitialized() override;
+
   service_manager::BinderRegistry registry_;
   mojo::BindingSet<service_manager::mojom::ServiceFactory>
       service_factory_bindings_;
 
+  std::unique_ptr<::wm::WMState> wm_state_;
+
+  std::unique_ptr<discardable_memory::DiscardableSharedMemoryManager>
+      discardable_shared_memory_manager_;
+
+  std::unique_ptr<ui::gpu_host::GpuHost> gpu_host_;
+
+  std::unique_ptr<viz::HostFrameSinkManager> host_frame_sink_manager_;
+
+  // IO thread for GPU and discardable shared memory IPC.
+  std::unique_ptr<base::Thread> io_thread_;
+  std::unique_ptr<ui::Gpu> gpu_;
+  std::unique_ptr<ui::ws2::HostContextFactory> context_factory_;
+
+  std::unique_ptr<aura::Env> env_;
+
+  std::unique_ptr<views::ViewsDelegate> views_delegate_;
+
+  std::unique_ptr<NetworkConnectDelegateMus> network_connect_delegate_;
+  std::unique_ptr<chromeos::system::ScopedFakeStatisticsProvider>
+      statistics_provider_;
+
+  std::unique_ptr<ui::InputDeviceController> input_device_controller_;
+
+  // Whether this class initialized NetworkHandler and needs to clean it up.
+  bool network_handler_initialized_ = false;
+
+  // Whether this class initialized DBusThreadManager and needs to clean it up.
+  bool dbus_thread_manager_initialized_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(AshService);
 };
 
diff --git a/ash/frame/header_view.cc b/ash/frame/header_view.cc
index 6ded1d3..b8bdc64d 100644
--- a/ash/frame/header_view.cc
+++ b/ash/frame/header_view.cc
@@ -19,6 +19,7 @@
 #include "ash/wm/window_state.h"
 #include "ui/aura/client/aura_constants.h"
 #include "ui/aura/window.h"
+#include "ui/base/ui_base_features.h"
 #include "ui/views/controls/image_view.h"
 #include "ui/views/widget/widget.h"
 
@@ -123,7 +124,7 @@
         target_widget, this, caption_button_container_);
   } else {
     DCHECK_EQ(mojom::WindowStyle::BROWSER, window_style);
-    DCHECK_EQ(Config::MASH, Shell::GetAshConfig());
+    DCHECK(!::features::IsAshInBrowserProcess());
     appearance_provider_ = std::make_unique<WindowPropertyAppearanceProvider>(
         target_widget_->GetNativeWindow());
     // TODO(estade): pass correct value for |incognito|.
diff --git a/ash/shell.cc b/ash/shell.cc
index 842028c6..96d07eb4 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -1052,9 +1052,12 @@
   if (config == Config::CLASSIC) {
     // This will initialize aura::Env which requires |display_manager_| to
     // be initialized first.
-    aura::Env::GetInstance()->set_context_factory(context_factory);
-    aura::Env::GetInstance()->set_context_factory_private(
-        context_factory_private);
+    if (context_factory)
+      aura::Env::GetInstance()->set_context_factory(context_factory);
+    if (context_factory_private) {
+      aura::Env::GetInstance()->set_context_factory_private(
+          context_factory_private);
+    }
   }
 
   // Night Light depends on the display manager, the display color manager, and
@@ -1169,7 +1172,7 @@
         std::move(user_activity_monitor), user_activity_detector_.get());
   }
 
-  if (config == Config::MASH)
+  if (!::features::IsAshInBrowserProcess())
     client_image_registry_ = std::make_unique<ClientImageRegistry>();
 
   // In mash drag and drop is handled by mus.
diff --git a/ash/system/flag_warning/flag_warning_tray.cc b/ash/system/flag_warning/flag_warning_tray.cc
index 531b8ed..a14cd4f 100644
--- a/ash/system/flag_warning/flag_warning_tray.cc
+++ b/ash/system/flag_warning/flag_warning_tray.cc
@@ -20,6 +20,7 @@
 #include "mash/public/mojom/launchable.mojom.h"
 #include "services/service_manager/public/cpp/connector.h"
 #include "ui/accessibility/ax_node_data.h"
+#include "ui/base/ui_base_features.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/paint_vector_icon.h"
@@ -40,7 +41,7 @@
   // Flag warning tray is not currently used in non-MASH environments, because
   // mus will roll out via experiment/Finch trial and showing the tray would
   // reveal the experiment state to users.
-  DCHECK_EQ(Shell::GetAshConfig(), Config::MASH);
+  DCHECK(!::features::IsAshInBrowserProcess());
   container_ = new TrayContainer(shelf);
   AddChildView(container_);
 
diff --git a/ash/system/status_area_widget.cc b/ash/system/status_area_widget.cc
index 13ecbd23..ea3eb1d5 100644
--- a/ash/system/status_area_widget.cc
+++ b/ash/system/status_area_widget.cc
@@ -23,6 +23,7 @@
 #include "ash/system/virtual_keyboard/virtual_keyboard_tray.h"
 #include "base/command_line.h"
 #include "base/i18n/time_formatting.h"
+#include "ui/base/ui_base_features.h"
 #include "ui/display/display.h"
 #include "ui/native_theme/native_theme_dark_aura.h"
 
@@ -83,7 +84,7 @@
   logout_button_tray_ = std::make_unique<LogoutButtonTray>(shelf_);
   status_area_widget_delegate_->AddChildView(logout_button_tray_.get());
 
-  if (Shell::GetAshConfig() == ash::Config::MASH) {
+  if (!::features::IsAshInBrowserProcess()) {
     // Flag warning tray is not currently used in non-MASH environments, because
     // mus will roll out via experiment/Finch trial and showing the tray would
     // reveal the experiment state to users.
diff --git a/ash/ws/ash_gpu_interface_provider.cc b/ash/ws/ash_gpu_interface_provider.cc
new file mode 100644
index 0000000..7d1a1950
--- /dev/null
+++ b/ash/ws/ash_gpu_interface_provider.cc
@@ -0,0 +1,46 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/ws/ash_gpu_interface_provider.h"
+
+#include "base/bind.h"
+#include "components/discardable_memory/service/discardable_shared_memory_manager.h"
+#include "services/service_manager/public/cpp/bind_source_info.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
+#include "services/ui/gpu_host/gpu_host.h"
+
+namespace ash {
+
+AshGpuInterfaceProvider::AshGpuInterfaceProvider(
+    ui::gpu_host::GpuHost* gpu_host,
+    discardable_memory::DiscardableSharedMemoryManager*
+        discardable_shared_memory_manager)
+    : gpu_host_(gpu_host),
+      discardable_shared_memory_manager_(discardable_shared_memory_manager) {
+  DCHECK(gpu_host_);
+  DCHECK(discardable_shared_memory_manager_);
+}
+
+AshGpuInterfaceProvider::~AshGpuInterfaceProvider() = default;
+
+void AshGpuInterfaceProvider::RegisterGpuInterfaces(
+    service_manager::BinderRegistry* registry) {
+  registry->AddInterface(base::BindRepeating(
+      &AshGpuInterfaceProvider::BindGpuRequest, base::Unretained(this)));
+  registry->AddInterface(base::BindRepeating(
+      &AshGpuInterfaceProvider::BindDiscardableSharedMemoryManagerRequest,
+      base::Unretained(this)));
+}
+
+void AshGpuInterfaceProvider::BindDiscardableSharedMemoryManagerRequest(
+    discardable_memory::mojom::DiscardableSharedMemoryManagerRequest request) {
+  discardable_shared_memory_manager_->Bind(std::move(request),
+                                           service_manager::BindSourceInfo());
+}
+
+void AshGpuInterfaceProvider::BindGpuRequest(ui::mojom::GpuRequest request) {
+  gpu_host_->Add(std::move(request));
+}
+
+}  // namespace ash
diff --git a/ash/ws/ash_gpu_interface_provider.h b/ash/ws/ash_gpu_interface_provider.h
new file mode 100644
index 0000000..f90b1bf
--- /dev/null
+++ b/ash/ws/ash_gpu_interface_provider.h
@@ -0,0 +1,51 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_WS_ASH_GPU_INTERFACE_PROVIDER_H_
+#define ASH_WS_ASH_GPU_INTERFACE_PROVIDER_H_
+
+#include "components/discardable_memory/public/interfaces/discardable_shared_memory_manager.mojom.h"
+#include "services/ui/public/interfaces/gpu.mojom.h"
+#include "services/ui/ws2/gpu_interface_provider.h"
+
+namespace discardable_memory {
+class DiscardableSharedMemoryManager;
+}
+
+namespace ui {
+namespace gpu_host {
+class GpuHost;
+}
+}  // namespace ui
+
+namespace ash {
+
+// Implementation of GpuInterfaceProvider used when Ash runs out of process.
+class AshGpuInterfaceProvider : public ui::ws2::GpuInterfaceProvider {
+ public:
+  AshGpuInterfaceProvider(ui::gpu_host::GpuHost* gpu_host,
+                          discardable_memory::DiscardableSharedMemoryManager*
+                              discardable_shared_memory_manager);
+  ~AshGpuInterfaceProvider() override;
+
+  // ui::ws2::GpuInterfaceProvider:
+  void RegisterGpuInterfaces(
+      service_manager::BinderRegistry* registry) override;
+
+ private:
+  void BindDiscardableSharedMemoryManagerRequest(
+      discardable_memory::mojom::DiscardableSharedMemoryManagerRequest request);
+
+  void BindGpuRequest(ui::mojom::GpuRequest request);
+
+  ui::gpu_host::GpuHost* gpu_host_;
+  discardable_memory::DiscardableSharedMemoryManager*
+      discardable_shared_memory_manager_;
+
+  DISALLOW_COPY_AND_ASSIGN(AshGpuInterfaceProvider);
+};
+
+}  // namespace ash
+
+#endif  // ASH_WS_ASH_GPU_INTERFACE_PROVIDER_H_
diff --git a/base/android/java/src/org/chromium/base/JavaHandlerThread.java b/base/android/java/src/org/chromium/base/JavaHandlerThread.java
index 065fee1..9a7431ee 100644
--- a/base/android/java/src/org/chromium/base/JavaHandlerThread.java
+++ b/base/android/java/src/org/chromium/base/JavaHandlerThread.java
@@ -27,13 +27,13 @@
      * Construct a java-only instance. Can be connected with native side later.
      * Useful for cases where a java thread is needed before native library is loaded.
      */
-    public JavaHandlerThread(String name) {
-        mThread = new HandlerThread(name);
+    public JavaHandlerThread(String name, int priority) {
+        mThread = new HandlerThread(name, priority);
     }
 
     @CalledByNative
-    private static JavaHandlerThread create(String name) {
-        return new JavaHandlerThread(name);
+    private static JavaHandlerThread create(String name, int priority) {
+        return new JavaHandlerThread(name, priority);
     }
 
     public Looper getLooper() {
diff --git a/base/android/java_handler_thread.cc b/base/android/java_handler_thread.cc
index f61c7846..3b3f3b6 100644
--- a/base/android/java_handler_thread.cc
+++ b/base/android/java_handler_thread.cc
@@ -10,6 +10,7 @@
 #include "base/android/jni_string.h"
 #include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/threading/platform_thread_internal_posix.h"
 #include "base/threading/thread_restrictions.h"
 #include "jni/JavaHandlerThread_jni.h"
 
@@ -19,10 +20,12 @@
 
 namespace android {
 
-JavaHandlerThread::JavaHandlerThread(const char* name)
+JavaHandlerThread::JavaHandlerThread(const char* name,
+                                     base::ThreadPriority priority)
     : JavaHandlerThread(Java_JavaHandlerThread_create(
           AttachCurrentThread(),
-          ConvertUTF8ToJavaString(AttachCurrentThread(), name))) {}
+          ConvertUTF8ToJavaString(AttachCurrentThread(), name),
+          base::internal::ThreadPriorityToNiceValue(priority))) {}
 
 JavaHandlerThread::JavaHandlerThread(
     const base::android::ScopedJavaLocalRef<jobject>& obj)
diff --git a/base/android/java_handler_thread.h b/base/android/java_handler_thread.h
index 9529320..df90f66 100644
--- a/base/android/java_handler_thread.h
+++ b/base/android/java_handler_thread.h
@@ -27,7 +27,9 @@
 class BASE_EXPORT JavaHandlerThread {
  public:
   // Create new thread.
-  explicit JavaHandlerThread(const char* name);
+  explicit JavaHandlerThread(
+      const char* name,
+      base::ThreadPriority priority = base::ThreadPriority::NORMAL);
   // Wrap and connect to an existing JavaHandlerThread.
   // |obj| is an instance of JavaHandlerThread.
   explicit JavaHandlerThread(
diff --git a/base/test/android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java b/base/test/android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java
index 3da7ba88..3985e6a 100644
--- a/base/test/android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java
+++ b/base/test/android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java
@@ -5,6 +5,7 @@
 package org.chromium.base;
 
 import android.os.Handler;
+import android.os.Process;
 
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.CalledByNativeUnchecked;
@@ -32,7 +33,8 @@
             }
         };
 
-        JavaHandlerThread thread = new JavaHandlerThread("base_unittests_java");
+        JavaHandlerThread thread =
+                new JavaHandlerThread("base_unittests_java", Process.THREAD_PRIORITY_DEFAULT);
         thread.maybeStart();
 
         Handler handler = new Handler(thread.getLooper());
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn
index 968d2e58..9711f0d 100644
--- a/build/android/BUILD.gn
+++ b/build/android/BUILD.gn
@@ -38,9 +38,8 @@
     ]
   }
 
-  generate_interface_jar("android_ijar") {
-    input_jar = android_sdk_jar
-    output_jar = "$root_out_dir/lib.java/android.interface.jar"
+  android_system_java_prebuilt("android_sdk_java") {
+    jar_path = android_sdk_jar
   }
 
   # Write to a file some GN vars that are useful to scripts that use the output
diff --git a/build/android/gyp/compile_resources.py b/build/android/gyp/compile_resources.py
index fd87d28..79365fb 100755
--- a/build/android/gyp/compile_resources.py
+++ b/build/android/gyp/compile_resources.py
@@ -296,10 +296,11 @@
     '--version-name', options.version_name,
     '--auto-add-overlay',
     '--no-version-vectors',
-    '-I', options.android_sdk_jar,
     '-o', options.apk_path,
   ]
 
+  for j in options.android_sdk_jars:
+    link_command += ['-I', j]
   if options.proguard_file:
     link_command += ['--proguard', options.proguard_file]
   if options.proguard_file_main_dex:
@@ -336,7 +337,9 @@
   Returns:
     A (version_code, version_name) pair of strings.
   """
-  output = subprocess.check_output([aapt_path, 'dump', 'badging', sdk_path])
+  output = build_utils.CheckOutput(
+      [aapt_path, 'dump', 'badging', sdk_path],
+      print_stdout=False, print_stderr=False)
   version_code = re.search(r"versionCode='(.*?)'", output).group(1)
   version_name = re.search(r"versionName='(.*?)'", output).group(1)
   return version_code, version_name,
@@ -362,8 +365,23 @@
   ElementTree.register_namespace('tools', _TOOLS_NAMESPACE)
   original_manifest = ElementTree.parse(options.android_manifest)
 
-  version_code, version_name = _ExtractVersionFromSdk(
-      options.aapt_path, options.android_sdk_jar)
+  def maybe_extract_version(j):
+    try:
+      return _ExtractVersionFromSdk(options.aapt_path, j)
+    except build_utils.CalledProcessError:
+      return None
+
+  extract_all = [maybe_extract_version(j) for j in options.android_sdk_jars]
+  successful_extractions = [x for x in extract_all if x]
+  if len(successful_extractions) == 0:
+    raise Exception(
+        'Unable to find android SDK jar among candidates: %s'
+            % ', '.join(options.android_sdk_jars))
+  elif len(successful_extractions) > 1:
+    raise Exception(
+        'Found multiple android SDK jars among candidates: %s'
+            % ', '.join(options.android_sdk_jars))
+  version_code, version_name = successful_extractions.pop()
 
   # ElementTree.find does not work if the required tag is the root.
   if original_manifest.getroot().tag == 'manifest':
@@ -635,9 +653,9 @@
   possible_input_paths = [
     options.aapt_path,
     options.android_manifest,
-    options.android_sdk_jar,
     options.shared_resources_whitelist,
   ]
+  possible_input_paths += options.android_sdk_jars
   input_paths = [x for x in possible_input_paths if x]
   input_paths.extend(options.dependencies_res_zips)
   input_paths.extend(options.extra_r_text_files)
diff --git a/build/android/gyp/desugar.py b/build/android/gyp/desugar.py
index bf51b007..a30238d 100755
--- a/build/android/gyp/desugar.py
+++ b/build/android/gyp/desugar.py
@@ -17,21 +17,21 @@
     _SRC_ROOT, 'third_party', 'bazel', 'desugar', 'Desugar.jar'))
 
 
-def _OnStaleMd5(input_jar, output_jar, classpath, bootclasspath_entry):
+def _OnStaleMd5(input_jar, output_jar, classpath, bootclasspath):
   cmd = [
       'java',
       '-jar',
       _DESUGAR_JAR_PATH,
       '--input',
       input_jar,
-      '--bootclasspath_entry',
-      bootclasspath_entry,
       '--output',
       output_jar,
       # Don't include try-with-resources files in every .jar. Instead, they
       # are included via //third_party/bazel/desugar:desugar_runtime_java.
       '--desugar_try_with_resources_omit_runtime_classes',
   ]
+  for path in bootclasspath:
+    cmd += ['--bootclasspath_entry', path]
   for path in classpath:
     cmd += ['--classpath_entry', path]
   build_utils.CheckOutput(cmd, print_stdout=False)
@@ -47,21 +47,19 @@
                       help='Jar output path.')
   parser.add_argument('--classpath', required=True,
                       help='Classpath.')
-  parser.add_argument('--bootclasspath-entry', required=True,
+  parser.add_argument('--bootclasspath', required=True,
                       help='Path to javac bootclasspath interface jar.')
   options = parser.parse_args(args)
 
+  options.bootclasspath = build_utils.ParseGnList(options.bootclasspath)
   options.classpath = build_utils.ParseGnList(options.classpath)
-  input_paths = options.classpath + [
-      options.bootclasspath_entry,
-      options.input_jar,
-  ]
+  input_paths = options.classpath + options.bootclasspath + [options.input_jar]
   output_paths = [options.output_jar]
   depfile_deps = options.classpath + [_DESUGAR_JAR_PATH]
 
   build_utils.CallAndWriteDepfileIfStale(
       lambda: _OnStaleMd5(options.input_jar, options.output_jar,
-                          options.classpath, options.bootclasspath_entry),
+                          options.classpath, options.bootclasspath),
       options,
       input_paths=input_paths,
       input_strings=[],
diff --git a/build/android/gyp/prepare_resources.py b/build/android/gyp/prepare_resources.py
index b6a4ff4..38bcc32 100755
--- a/build/android/gyp/prepare_resources.py
+++ b/build/android/gyp/prepare_resources.py
@@ -131,7 +131,11 @@
                      '--no-crunch',
                      '--auto-add-overlay',
                      '--no-version-vectors',
-                     '-I', options.android_sdk_jar,
+                    ]
+  for j in options.android_sdk_jars:
+    package_command += ['-I', j]
+
+  package_command += [
                      '--output-text-symbols', gen_dir,
                      '-J', gen_dir,  # Required for R.txt generation.
                      '--ignore-assets', build_utils.AAPT_IGNORE_PATTERN]
@@ -255,8 +259,8 @@
   possible_input_paths = [
     options.aapt_path,
     options.android_manifest,
-    options.android_sdk_jar,
   ]
+  possible_input_paths += options.android_sdk_jars
   input_paths = [x for x in possible_input_paths if x]
   input_paths.extend(options.dependencies_res_zips)
   input_paths.extend(options.extra_r_text_files)
diff --git a/build/android/gyp/util/resource_utils.py b/build/android/gyp/util/resource_utils.py
index 84e4dc23..5ef36a4 100644
--- a/build/android/gyp/util/resource_utils.py
+++ b/build/android/gyp/util/resource_utils.py
@@ -448,7 +448,7 @@
 
   build_utils.AddDepfileOption(output_opts)
 
-  input_opts.add_argument('--android-sdk-jar', required=True,
+  input_opts.add_argument('--android-sdk-jars', required=True,
                         help='Path to the android.jar file.')
 
   input_opts.add_argument('--aapt-path', required=True,
@@ -484,6 +484,8 @@
     options: the result of parse_args() on the parser returned by
         ResourceArgsParser(). This function updates a few common fields.
   """
+  options.android_sdk_jars = build_utils.ParseGnList(options.android_sdk_jars)
+
   options.dependencies_res_zips = (
       build_utils.ParseGnList(options.dependencies_res_zips))
 
diff --git a/build/android/gyp/write_build_config.py b/build/android/gyp/write_build_config.py
index 9adba3d..dd5ee26 100755
--- a/build/android/gyp/write_build_config.py
+++ b/build/android/gyp/write_build_config.py
@@ -512,7 +512,7 @@
 _ROOT_TYPES = ('android_apk', 'java_binary',
                'java_annotation_processor', 'junit_binary', 'resource_rewriter')
 # Types that should not allow code deps to pass through.
-_RESOURCE_TYPES = ('android_assets', 'android_resources')
+_RESOURCE_TYPES = ('android_assets', 'android_resources', 'system_java_library')
 
 
 def _ExtractMarkdownDocumentation(input_text):
@@ -817,7 +817,6 @@
                     help='Path to JAR that contains java resources. Everything '
                     'from this JAR except meta-inf/ content and .class files '
                     'will be added to the final APK.')
-  parser.add_option('--bootclasspath', help='Path to custom android.jar/rt.jar')
 
   # android library options
   parser.add_option('--dex-path', help='Path to target\'s dex output.')
@@ -883,17 +882,18 @@
 
   jar_path_options = ['jar_path', 'unprocessed_jar_path', 'interface_jar_path']
   required_options_map = {
-      'java_binary': ['build_config'],
-      'java_annotation_processor': ['build_config', 'main_class'],
-      'junit_binary': ['build_config'],
-      'java_library': ['build_config'] + jar_path_options,
+      'android_apk': ['build_config','dex_path'] + jar_path_options,
       'android_assets': ['build_config'],
       'android_resources': ['build_config', 'resources_zip'],
-      'android_apk': ['build_config','dex_path'] + jar_path_options,
-      'dist_jar': ['build_config'],
       'dist_aar': ['build_config'],
-      'resource_rewriter': ['build_config'],
+      'dist_jar': ['build_config'],
       'group': ['build_config'],
+      'java_annotation_processor': ['build_config', 'main_class'],
+      'java_binary': ['build_config'],
+      'java_library': ['build_config'] + jar_path_options,
+      'junit_binary': ['build_config'],
+      'resource_rewriter': ['build_config'],
+      'system_java_library': ['build_config'],
   }
   required_options = required_options_map.get(options.type)
   if not required_options:
@@ -924,7 +924,8 @@
 
   is_java_target = options.type in (
       'java_binary', 'junit_binary', 'java_annotation_processor',
-      'java_library', 'android_apk', 'dist_aar', 'dist_jar')
+      'java_library', 'android_apk', 'dist_aar', 'dist_jar',
+      'system_java_library')
 
   deps = _DepsFromPaths(
       build_utils.ParseGnList(options.deps_configs), options.type)
@@ -939,6 +940,7 @@
                           processor_deps.AllConfigPaths() +
                           classpath_deps.AllConfigPaths()))
 
+  system_library_deps = deps.Direct('system_java_library')
   direct_library_deps = deps.Direct('java_library')
   all_library_deps = deps.All('java_library')
   all_resources_deps = deps.All('android_resources')
@@ -985,8 +987,6 @@
     gradle['dependent_java_projects'] = []
     gradle['dependent_prebuilt_jars'] = deps.GradlePrebuiltJarPaths()
 
-    if options.bootclasspath:
-      gradle['bootclasspath'] = options.bootclasspath
     if options.main_class:
       deps_info['main_class'] = options.main_class
 
@@ -1138,7 +1138,8 @@
   if is_java_target:
     # The classpath used to compile this target when annotation processors are
     # present.
-    javac_classpath = [c['unprocessed_jar_path'] for c in direct_library_deps]
+    javac_classpath = [
+        c['unprocessed_jar_path'] for c in direct_library_deps]
     # The classpath used to compile this target when annotation processors are
     # not present. These are also always used to know when a target needs to be
     # rebuilt.
@@ -1148,7 +1149,8 @@
     javac_full_interface_classpath = [
         c['interface_jar_path'] for c in all_library_deps]
     # The classpath used for bytecode-rewritting.
-    javac_full_classpath = [c['unprocessed_jar_path'] for c in all_library_deps]
+    javac_full_classpath = [
+        c['unprocessed_jar_path'] for c in all_library_deps]
     # The classpath to use to run this target (or as an input to ProGuard).
     java_full_classpath = []
     if options.jar_path:
@@ -1263,7 +1265,16 @@
     dex_config = config['final_dex']
     dex_config['dependency_dex_files'] = deps_dex_files
 
+  system_jars = [c['jar_path'] for c in system_library_deps]
+  system_interface_jars = [c['interface_jar_path'] for c in system_library_deps]
+  if system_library_deps:
+    config['android'] = {}
+    config['android']['sdk_interface_jars'] = system_interface_jars
+    config['android']['sdk_jars'] = system_jars
+    gradle['bootclasspath'] = system_jars
+
   if is_java_target:
+    config['javac']['bootclasspath'] = system_jars
     config['javac']['classpath'] = javac_classpath
     config['javac']['interface_classpath'] = javac_interface_classpath
     # Direct() will be of type 'java_annotation_processor'.
diff --git a/build/android/incremental_install/generate_android_manifest.py b/build/android/incremental_install/generate_android_manifest.py
index 0ae1bf18..2332490 100755
--- a/build/android/incremental_install/generate_android_manifest.py
+++ b/build/android/incremental_install/generate_android_manifest.py
@@ -42,7 +42,7 @@
   """Adds the android namespace prefix to the given identifier."""
   return '{%s}%s' % (_ANDROID_NAMESPACE, name)
 
-def _ParseArgs():
+def _ParseArgs(args):
   parser = argparse.ArgumentParser()
   parser.add_argument('--src-manifest',
                       help='The main manifest of the app',
@@ -57,12 +57,15 @@
   parser.add_argument('--out-apk', help='Path to output .ap_ file')
   parser.add_argument('--in-apk', help='Path to non-incremental .ap_ file')
   parser.add_argument('--aapt-path', help='Path to the Android aapt tool')
-  parser.add_argument('--android-sdk-jar', help='Path to the Android SDK jar.')
+  parser.add_argument('--android-sdk-jars', help='Path to the Android SDK jar.')
 
-  ret = parser.parse_args()
-  if ret.out_apk and not (ret.in_apk and ret.aapt_path and ret.android_sdk_jar):
+  ret = parser.parse_args(build_utils.ExpandFileArgs(args))
+  if ret.out_apk and not (ret.in_apk and ret.aapt_path
+                          and ret.android_sdk_jars):
     parser.error(
-        '--out-apk requires --in-apk, --aapt-path, and --android-sdk-jar.')
+        '--out-apk requires --in-apk, --aapt-path, and --android-sdk-jars.')
+  ret.android_sdk_jars = build_utils.ParseGnList(ret.android_sdk_jars)
+
   return ret
 
 
@@ -122,8 +125,8 @@
   return version_code, version_name,
 
 
-def main():
-  options = _ParseArgs()
+def main(raw_args):
+  options = _ParseArgs(raw_args)
   with open(options.src_manifest) as f:
     main_manifest_data = f.read()
   new_manifest_data = _ProcessManifest(main_manifest_data,
@@ -136,10 +139,12 @@
         options.aapt_path, options.in_apk)
     with tempfile.NamedTemporaryFile() as f:
       cmd = [options.aapt_path, 'package', '-f', '-F', f.name,
-             '-M', options.out_manifest, '-I', options.android_sdk_jar,
+             '-M', options.out_manifest,
              '-I', options.in_apk, '--replace-version',
              '--version-code', version_code, '--version-name', version_name,
              '--debug-mode']
+      for j in options.android_sdk_jars:
+        cmd += ['-I', j]
       subprocess.check_call(cmd)
       with zipfile.ZipFile(f.name, 'a') as z:
         path_transform = lambda p: None if p == 'AndroidManifest.xml' else p
@@ -147,6 +152,8 @@
             z, [options.in_apk], path_transform=path_transform)
       shutil.copyfile(f.name, options.out_apk)
 
+  return 0
+
 
 if __name__ == '__main__':
-  main()
+  sys.exit(main(sys.argv[1:]))
diff --git a/build/android/pylib/utils/proguard.py b/build/android/pylib/utils/proguard.py
index cefe38e..c243ce9c 100644
--- a/build/android/pylib/utils/proguard.py
+++ b/build/android/pylib/utils/proguard.py
@@ -213,7 +213,7 @@
     # There can be no nested constant element values.
     assert parent.ftype in [_ELEMENT_ARRAY, _ELEMENT_ANNOTATION]
     field = self._annotation_stack[-1]
-    if type(value) is str and not field.ftype == _ELEMENT_PRIMITIVE:
+    if isinstance(value, str) and not field.ftype == _ELEMENT_PRIMITIVE:
       # The value comes from the output parser via
       # UpdateCurrentAnnotationFieldValue, and should be a value of a constant
       # element. If it isn't, just skip it.
diff --git a/build/config/android/config.gni b/build/config/android/config.gni
index 3601801c..77ae43e 100644
--- a/build/config/android/config.gni
+++ b/build/config/android/config.gni
@@ -118,10 +118,10 @@
     system_webview_apk_target = "//android_webview:system_webview_apk"
   }
 
-  webview_public_framework_jar =
-      "//third_party/android_system_sdk/android_system.jar"
-  if (!defined(webview_framework_jar)) {
-    webview_framework_jar = webview_public_framework_jar
+  webview_public_framework_dep =
+      "//third_party/android_system_sdk:public_framework_system_java"
+  if (!defined(webview_framework_dep)) {
+    webview_framework_dep = webview_public_framework_dep
   }
 
   # TODO(crbug.com/807768): Remove this extra dependency.
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index e4ac941d..cf84f5a 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -376,12 +376,6 @@
         invoker.main_class,
       ]
     }
-    if (defined(invoker.alternative_android_sdk_ijar)) {
-      args += [
-        "--bootclasspath",
-        rebase_path(invoker.alternative_android_sdk_ijar, root_build_dir),
-      ]
-    }
     if (current_toolchain != default_toolchain) {
       # This has to be a built-time error rather than a GN assert because many
       # packages have a mix of java and non-java targets. For example, the
@@ -902,14 +896,10 @@
       if (defined(invoker.proguard_jar_path)) {
         _proguard_jar_path = invoker.proguard_jar_path
       }
-      _android_sdk_jar = android_sdk_jar
-      if (defined(invoker.alternative_android_sdk_jar)) {
-        _android_sdk_jar = invoker.alternative_android_sdk_jar
-      }
 
       inputs = [
-        _android_sdk_jar,
         _proguard_jar_path,
+        invoker.build_config,
       ]
       if (defined(invoker.inputs)) {
         inputs += invoker.inputs
@@ -922,6 +912,7 @@
         "$_output_jar_path.seeds",
         "$_output_jar_path.usage",
       ]
+      _rebased_build_config = rebase_path(invoker.build_config, root_build_dir)
       args = [
         "--depfile",
         rebase_path(depfile, root_build_dir),
@@ -930,7 +921,7 @@
         "--output-path",
         rebase_path(_output_jar_path, root_build_dir),
         "--classpath",
-        rebase_path(_android_sdk_jar, root_build_dir),
+        "@FileArg($_rebased_build_config:android:sdk_jars)",
       ]
       if (proguard_verbose) {
         args += [ "--verbose" ]
@@ -1215,9 +1206,6 @@
   #  jar_included_patterns: OPtional list of .class file patterns to include
   #    in the final .jar file. jar_excluded_patterns take precedence over this.
   #  strip_resource_classes:
-  #  alternative_android_sdk_ijar:
-  #  alternative_android_sdk_ijar_dep:
-  #  alternative_android_sdk:
   #  deps:
   #  java_files:
   #  java_sources_file:
@@ -1263,13 +1251,6 @@
     _deps = []
     _previous_output_jar = _input_jar_path
 
-    assert(!defined(invoker.alternative_android_sdk_ijar) ||
-           invoker.alternative_android_sdk_ijar != "")
-    assert(!defined(invoker.alternative_android_sdk_ijar_dep) ||
-           invoker.alternative_android_sdk_ijar_dep != "")
-    assert(!defined(invoker.alternative_android_sdk_jar) ||
-           invoker.alternative_android_sdk_jar != "")
-
     if (_enable_assert || _enable_custom_resources) {
       _java_bytecode_rewriter_target = "${target_name}__bytecode_rewrite"
       _java_bytecode_rewriter_input_jar = _previous_output_jar
@@ -1285,12 +1266,7 @@
         if (defined(invoker.deps)) {
           deps += invoker.deps
         }
-        _android_sdk_jar = android_sdk_jar
-        if (defined(invoker.alternative_android_sdk_jar)) {
-          _android_sdk_jar = invoker.alternative_android_sdk_jar
-        }
         inputs = [
-          _android_sdk_jar,
           _bytecode_rewriter_script,
           _java_bytecode_rewriter_input_jar,
           _build_config,
@@ -1316,7 +1292,7 @@
         }
         args += [
           "--extra-classpath-jar",
-          rebase_path(_android_sdk_jar, root_build_dir),
+          "@FileArg($_rebased_build_config:android:sdk_jars)",
           "--extra-classpath-jar",
           "@FileArg($_rebased_build_config:deps_info:javac_full_classpath)",
         ]
@@ -1346,14 +1322,6 @@
         outputs = [
           _desugar_output_jar,
         ]
-        if (defined(invoker.alternative_android_sdk_ijar)) {
-          deps += [ invoker.alternative_android_sdk_ijar_dep ]
-          _android_sdk_ijar = invoker.alternative_android_sdk_ijar
-        } else {
-          deps += [ "//build/android:android_ijar" ]
-          _android_sdk_ijar = "$root_out_dir/lib.java/android.interface.jar"
-        }
-        inputs += [ _android_sdk_ijar ]
         args = [
           "--depfile",
           rebase_path(depfile, root_build_dir),
@@ -1362,8 +1330,7 @@
           "--output-jar",
           rebase_path(_desugar_output_jar, root_build_dir),
           "--classpath=@FileArg($_rebased_build_config:javac:interface_classpath)",
-          "--bootclasspath-entry",
-          rebase_path(_android_sdk_ijar, root_build_dir),
+          "--bootclasspath=@FileArg($_rebased_build_config:android:sdk_interface_jars)",
         ]
       }
 
@@ -1535,8 +1502,6 @@
   #     The default is to use 'aapt' to generate the file from the content
   #     of the resource directories.
   #
-  #   alternative_android_sdk_jar: Alternative system android.jar to use.
-  #
   #   shared_resources: (optional)
   #     If true, generate an R.java file that uses non-final resource ID
   #     variables and an onResourcesLoaded() method.
@@ -1596,15 +1561,9 @@
 
       _android_aapt_path = android_default_aapt_path
 
-      _android_sdk_jar = android_sdk_jar
-      if (defined(invoker.alternative_android_sdk_jar)) {
-        _android_sdk_jar = invoker.alternative_android_sdk_jar
-      }
-
       inputs = [
         invoker.build_config,
         _android_aapt_path,
-        _android_sdk_jar,
       ]
 
       _rebased_all_resource_dirs =
@@ -1614,8 +1573,7 @@
       args = [
         "--depfile",
         rebase_path(depfile, root_build_dir),
-        "--android-sdk-jar",
-        rebase_path(_android_sdk_jar, root_build_dir),
+        "--android-sdk-jars=@FileArg($_rebased_build_config:android:sdk_jars)",
         "--aapt-path",
         rebase_path(_android_aapt_path, root_build_dir),
         "--dependencies-res-zips=@FileArg($_rebased_build_config:resources:dependency_zips)",
@@ -1624,6 +1582,9 @@
       ]
 
       if (defined(invoker.android_manifest)) {
+        if (defined(invoker.android_manifest_dep)) {
+          deps += [ invoker.android_manifest_dep ]
+        }
         inputs += [ invoker.android_manifest ]
         args += [
           "--android-manifest",
@@ -1704,8 +1665,6 @@
   #
   #   version_name: (optional)
   #
-  #   alternative_android_sdk_jar: Alternative system android.jar to use.
-  #
   #   shared_resources: (optional)
   #     If true, make all variables in each generated R.java file non-final,
   #     and provide an onResourcesLoaded() method that can be used to reset
@@ -1797,15 +1756,9 @@
         _android_aapt_path = "$android_sdk_app_bundle_build_tools/aapt"
       }
 
-      _android_sdk_jar = android_sdk_jar
-      if (defined(invoker.alternative_android_sdk_jar)) {
-        _android_sdk_jar = invoker.alternative_android_sdk_jar
-      }
-
       inputs = [
         invoker.build_config,
         _android_aapt_path,
-        _android_sdk_jar,
       ]
 
       _rebased_build_config = rebase_path(invoker.build_config, root_build_dir)
@@ -1813,8 +1766,7 @@
       args = [
         "--depfile",
         rebase_path(depfile, root_build_dir),
-        "--android-sdk-jar",
-        rebase_path(_android_sdk_jar, root_build_dir),
+        "--android-sdk-jars=@FileArg($_rebased_build_config:android:sdk_jars)",
         "--aapt-path",
         rebase_path(_android_aapt_path, root_build_dir),
         "--dependencies-res-zips=@FileArg($_rebased_build_config:resources:dependency_zips)",
@@ -2318,6 +2270,8 @@
     _incremental_android_manifest =
         get_label_info(_incremental_compile_resources_target_name,
                        "target_gen_dir") + "/AndroidManifest.xml"
+    _rebased_build_config =
+        rebase_path(invoker.assets_build_config, root_build_dir)
     action(_incremental_compile_resources_target_name) {
       deps = _incremental_deps
       script =
@@ -2335,10 +2289,6 @@
         _incremental_compiled_resources_path,
       ]
 
-      _android_sdk_jar = android_sdk_jar
-      if (defined(invoker.alternative_android_sdk_jar)) {
-        _android_sdk_jar = invoker.alternative_android_sdk_jar
-      }
       args = [
         "--src-manifest",
         rebase_path(_android_manifest, root_build_dir),
@@ -2350,8 +2300,7 @@
         rebase_path(_incremental_compiled_resources_path, root_build_dir),
         "--aapt-path",
         rebase_path(android_default_aapt_path, root_build_dir),
-        "--android-sdk-jar",
-        rebase_path(_android_sdk_jar, root_build_dir),
+        "--android-sdk-jars=@FileArg($_rebased_build_config:android:sdk_jars)",
       ]
       if (disable_incremental_isolated_processes) {
         args += [ "--disable-isolated-processes" ]
@@ -2459,11 +2408,6 @@
   #  javac_args: Optional list of extra arguments to pass to javac.
   #  chromium_code: Whether this corresponds to Chromium-specific sources.
   #  requires_android: True if these sources can only run on Android.
-  #  alternative_android_sdk_ijar: Optional path to alternative Android system
-  #    interface jar file (android.jar). Ignored it !requires_android.
-  #  alternative_android_sdk_ijar_dep: If alternative_android_sdk_ijar is
-  #    provided, this should be the dependency target that generates the
-  #    alternative .jar file.
   #  additional_jar_files: Optional list of files to copy into the resulting
   #    .jar file (by default, only .class files are put there). Each entry
   #    has the 'srcPath:dstPath' format.
@@ -2492,7 +2436,6 @@
 
     _build_config = invoker.build_config
     _chromium_code = invoker.chromium_code
-    _requires_android = invoker.requires_android
 
     if (defined(invoker.enable_errorprone)) {
       _enable_errorprone = invoker.enable_errorprone
@@ -2582,18 +2525,8 @@
         inputs += [ "$root_build_dir/bin/jmake" ]
         outputs += [ "${invoker.javac_jar_path}.pdb" ]
       }
-      if (_requires_android) {
-        if (defined(invoker.alternative_android_sdk_ijar)) {
-          deps += [ invoker.alternative_android_sdk_ijar_dep ]
-          _android_sdk_ijar = invoker.alternative_android_sdk_ijar
-        } else {
-          deps += [ "//build/android:android_ijar" ]
-          _android_sdk_ijar = "$root_out_dir/lib.java/android.interface.jar"
-        }
-        inputs += [ _android_sdk_ijar ]
-        _rebased_android_sdk_ijar =
-            rebase_path(_android_sdk_ijar, root_build_dir)
-        args += [ "--bootclasspath=$_rebased_android_sdk_ijar" ]
+      if (invoker.requires_android) {
+        args += [ "--bootclasspath=@FileArg($_rebased_build_config:android:sdk_interface_jars)" ]
       }
       if (_chromium_code) {
         args += [ "--chromium-code=1" ]
@@ -2730,13 +2663,11 @@
   #    instrumentation with the Emma coverage processor. If not provided,
   #    this is controlled by the global emma_coverage build arg variable
   #    and only used for non-test Chromium code.
-  #  alternative_android_sdk_jar: Optional. Alternative Android system
-  #    android.jar to use.
-  #  alternative_android_sdk_ijar: Optional alternative Android system
-  #    interface jar path (i.e. the alternative_android_sdk_jar file processed
-  #    by the ijar tool).
-  #  alternative_android_sdk_ijar_dep: Optional. Dependency target that
-  #    generates alternative_android_sdk_ijar (if the latter is provided).
+  #  include_android_sdk: Optional. Whether or not the android SDK dep
+  #    should be added to deps. Defaults to true for non-system libraries
+  #    that support android.
+  #  alternative_android_sdk_dep: Optional. Alternative Android system
+  #    android java target to use.
   #  annotation_processor_deps: Optional list of dependencies corresponding
   #    to annotation processors used to compile these sources.
   #  input_jars_paths: Optional list of additional .jar file paths, which will
@@ -2807,6 +2738,7 @@
     _is_annotation_processor = invoker.type == "java_annotation_processor"
     _is_java_binary =
         invoker.type == "java_binary" || invoker.type == "junit_binary"
+    _is_system_library = invoker.type == "system_java_library"
     _supports_android =
         defined(invoker.supports_android) && invoker.supports_android
     _requires_android =
@@ -2949,6 +2881,18 @@
       write_file(_java_sources_file, rebase_path(_java_files, root_build_dir))
     }
 
+    _include_android_sdk = !_is_system_library && _supports_android
+    if (defined(invoker.include_android_sdk)) {
+      _include_android_sdk = invoker.include_android_sdk
+    }
+    if (_include_android_sdk) {
+      if (defined(invoker.alternative_android_sdk_dep)) {
+        _accumulated_deps += [ invoker.alternative_android_sdk_dep ]
+      } else {
+        _accumulated_deps += [ "//build/android:android_sdk_java" ]
+      }
+    }
+
     # Define build_config_deps which will be a list of targets required to
     # build the _build_config.
     _build_config = "$target_gen_dir/$_main_target_name.build_config"
@@ -2957,7 +2901,6 @@
     write_build_config(_build_config_target_name) {
       forward_variables_from(invoker,
                              [
-                               "alternative_android_sdk_ijar",
                                "annotation_processor_deps",
                                "classpath_deps",
                                "gradle_treat_as_prebuilt",
@@ -3048,8 +2991,6 @@
         forward_variables_from(invoker,
                                [
                                  "additional_jar_files",
-                                 "alternative_android_sdk_ijar",
-                                 "alternative_android_sdk_ijar_dep",
                                  "apk_name",
                                  "enable_errorprone",
                                  "enable_incremental_javac_override",
@@ -3112,44 +3053,58 @@
     }  # _has_sources
 
     if (defined(_final_jar_path)) {
-      _process_prebuilt_target_name = "${target_name}__process_prebuilt"
-      process_java_prebuilt(_process_prebuilt_target_name) {
-        forward_variables_from(invoker,
-                               [
-                                 "alternative_android_sdk_ijar",
-                                 "alternative_android_sdk_ijar_dep",
-                                 "alternative_android_sdk_jar",
-                                 "jar_excluded_patterns",
-                                 "jar_included_patterns",
-                               ])
-        supports_android = _supports_android
-        enable_build_hooks = _enable_build_hooks
-        enable_build_hooks_android = _enable_build_hooks_android
-        build_config = _build_config
-        input_jar_path = _unprocessed_jar_path
-        emma_instrument = _emma_instrument
-        if (_emma_instrument) {
-          java_files = _java_files
-          java_sources_file = _java_sources_file
-        }
-        output_jar_path = _final_jar_path
-        if (_has_sources) {
-          deps = _accumulated_public_deps  # compile & build_config
-        } else {
-          deps = _accumulated_deps + _accumulated_public_deps
-        }
-      }
-      _accumulated_public_deps += [ ":$_process_prebuilt_target_name" ]
+      if (_is_system_library) {
+        _copy_system_library_target_name = "${target_name}__copy_system_library"
 
-      if (defined(_dex_path)) {
-        dex("${target_name}__dex") {
-          input_jars = [ _final_jar_path ]
-          output = _dex_path
-          deps = [
-            ":$_process_prebuilt_target_name",
+        # Use copy_ex rather than copy to ensure that we copy symlink targets
+        # rather than the symlink itself.
+        copy_ex(_copy_system_library_target_name) {
+          sources = [
+            _unprocessed_jar_path,
+          ]
+          dest = _final_jar_path
+          outputs = [
+            _final_jar_path,
           ]
         }
-        _accumulated_public_deps += [ ":${target_name}__dex" ]
+        _accumulated_public_deps += [ ":$_copy_system_library_target_name" ]
+      } else {
+        _process_prebuilt_target_name = "${target_name}__process_prebuilt"
+        process_java_prebuilt(_process_prebuilt_target_name) {
+          forward_variables_from(invoker,
+                                 [
+                                   "jar_excluded_patterns",
+                                   "jar_included_patterns",
+                                 ])
+          supports_android = _supports_android
+          enable_build_hooks = _enable_build_hooks
+          enable_build_hooks_android = _enable_build_hooks_android
+          build_config = _build_config
+          input_jar_path = _unprocessed_jar_path
+          emma_instrument = _emma_instrument
+          if (_emma_instrument) {
+            java_files = _java_files
+            java_sources_file = _java_sources_file
+          }
+          output_jar_path = _final_jar_path
+          if (_has_sources) {
+            deps = _accumulated_public_deps  # compile & build_config
+          } else {
+            deps = _accumulated_deps + _accumulated_public_deps
+          }
+        }
+        _accumulated_public_deps += [ ":$_process_prebuilt_target_name" ]
+
+        if (defined(_dex_path)) {
+          dex("${target_name}__dex") {
+            input_jars = [ _final_jar_path ]
+            output = _dex_path
+            deps = [
+              ":$_process_prebuilt_target_name",
+            ]
+          }
+          _accumulated_public_deps += [ ":${target_name}__dex" ]
+        }
       }
 
       if (!_is_java_binary) {
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index b297d0c..7310f6b6 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -782,6 +782,8 @@
   #   deps: Specifies the dependencies of this target. Any Android resources
   #     listed in deps will be included by libraries/apks that depend on this
   #     target.
+  #   alternative_android_sdk_dep: Optional. Alternative Android system
+  #     android java target to use.
   #   resource_dirs: List of directories containing resources for this target.
   #   generated_resource_dirs: List of directories containing resources for this
   #     target which are *generated* by a dependency. |generated_resource_files|
@@ -831,6 +833,17 @@
       _srcjar_path = _base_path + ".srcjar"
     }
 
+    _deps = []
+    if (defined(invoker.deps)) {
+      _deps += invoker.deps
+    }
+
+    if (defined(invoker.alternative_android_sdk_dep)) {
+      _deps += [ invoker.alternative_android_sdk_dep ]
+    } else {
+      _deps += [ "//build/android:android_sdk_java" ]
+    }
+
     write_build_config(_build_config_target_name) {
       type = "android_resources"
       build_config = _build_config
@@ -859,9 +872,7 @@
         srcjar = _srcjar_path
       }
 
-      if (defined(invoker.deps)) {
-        possible_config_deps = invoker.deps
-      }
+      possible_config_deps = _deps
     }
 
     prepare_resources(target_name) {
@@ -869,15 +880,12 @@
                              [
                                "android_manifest",
                                "custom_package",
-                               "deps",
                                "generated_resource_dirs",
                                "generated_resource_files",
                                "resource_dirs",
                                "v14_skip",
                              ])
-      if (!defined(deps)) {
-        deps = []
-      }
+      deps = _deps
       deps += [ ":$_build_config_target_name" ]
       if (defined(invoker.android_manifest_dep)) {
         deps += [ invoker.android_manifest_dep ]
@@ -1241,6 +1249,9 @@
       type = "junit_binary"
       main_target_name = invoker.target_name
 
+      # Include the android SDK jar(s) for resource processing.
+      include_android_sdk = true
+
       # Robolectric can handle deps that set !supports_android as well those
       # that set requires_android.
       bypass_platform_checks = true
@@ -1435,6 +1446,9 @@
     if (defined(invoker.deps)) {
       _deps = invoker.deps
     }
+    if (_supports_android) {
+      _deps += [ "//build/android:android_sdk_java" ]
+    }
     _enable_build_hooks =
         _supports_android &&
         (!defined(invoker.no_build_hooks) || !invoker.no_build_hooks)
@@ -1469,18 +1483,16 @@
       proguard(_jar_target_name) {
         forward_variables_from(invoker,
                                [
-                                 "alternative_android_sdk_jar",
                                  "data",
                                  "proguard_jar_path",
                                ])
+        build_config = _build_config
         deps = _deps
-        inputs = [
-          _build_config,
-        ]
 
         # Although these will be listed as deps in the depfile, they must also
         # appear here so that "gn analyze" knows about them.
         # https://crbug.com/827197
+        inputs = []
         if (defined(invoker.proguard_configs)) {
           inputs += invoker.proguard_configs
         }
@@ -1705,11 +1717,6 @@
     java_library(target_name) {
       forward_variables_from(invoker, "*")
 
-      if (defined(alternative_android_sdk_ijar)) {
-        assert(defined(alternative_android_sdk_ijar_dep))
-        assert(defined(alternative_android_sdk_jar))
-      }
-
       supports_android = true
       requires_android = true
 
@@ -1746,6 +1753,15 @@
     }
   }
 
+  template("android_system_java_prebuilt") {
+    java_library_impl(target_name) {
+      forward_variables_from(invoker, "*")
+      no_build_hooks = true
+      supports_android = true
+      type = "system_java_library"
+    }
+  }
+
   # Creates org/chromium/base/BuildConfig.java
   # This doesn't really belong in //build since it genates a file for //base.
   # However, we don't currently have a better way to include this file in all
@@ -2146,7 +2162,6 @@
     compile_apk_resources(_compile_resources_target) {
       forward_variables_from(invoker,
                              [
-                               "alternative_android_sdk_jar",
                                "app_as_shared_lib",
                                "shared_resources",
                                "support_zh_hk",
@@ -2316,6 +2331,7 @@
     java_library_impl(_java_target) {
       forward_variables_from(invoker,
                              [
+                               "alternative_android_sdk_dep",
                                "android_manifest",
                                "android_manifest_dep",
                                "apk_under_test",
@@ -2396,18 +2412,14 @@
     if (_proguard_enabled) {
       _proguard_target = "${_template_name}__proguard"
       proguard(_proguard_target) {
-        forward_variables_from(invoker,
-                               [
-                                 "alternative_android_sdk_jar",
-                                 "proguard_jar_path",
-                               ])
+        forward_variables_from(invoker, [ "proguard_jar_path" ])
+        build_config = _build_config
         deps = _deps + [
                  ":$_build_config_target",
                  ":$_compile_resources_target",
                  ":$_java_target",
                ]
         inputs = [
-          _build_config,
           _jar_path,
         ]
 
@@ -2570,7 +2582,6 @@
     create_apk("${_template_name}__create") {
       forward_variables_from(invoker,
                              [
-                               "alternative_android_sdk_jar",
                                "public_deps",
                                "secondary_native_libs",
                                "shared_resources",
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 2d82ed5..20fd1d6 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -95,7 +95,7 @@
   # default only when goma is enabled on Linux because setting this to true may
   # make it harder to debug binaries.
   # See below reference for detail.
-  # https://chromium.googlesource.com/chromium/src/+/master/docs/linux_debugging.md#Source-level-debug-with-fdebug_prefix_map
+  # https://chromium.googlesource.com/chromium/src/+/master/docs/linux_debugging.md#Source-level-debug-with-fdebug_compilation_dir
   strip_absolute_paths_from_debug_symbols = is_linux && use_goma
 
   # Allow projects that wish to stay on C++11 to override Chromium's default.
@@ -513,16 +513,17 @@
   # TODO(zforman): Once nacl's toolchain is updated, remove check.
   if (symbol_level != 0 && is_clang && !is_nacl && !is_win && !is_mac &&
       !is_ios && strip_absolute_paths_from_debug_symbols) {
-    # This is resolved to path like "$HOME/chromium/src/out/Release".
     # If debug option is given, clang includes $cwd in debug info.
     # In such build, this flag generates reproducible obj files
     # even we use build directory like "out/feature_a" and "out/feature_b" if
     # we build same files with same compile flag other than this.
-    # Other paths are already givne in relative, no need to normalize it by
-    # using -fdebug-prefix-map.
-    absolute_path = rebase_path(root_out_dir)
-
-    cflags += [ "-fdebug-prefix-map=$absolute_path=." ]
+    # Other paths are already givne in relative, no need to normalize them.
+    cflags += [
+      "-Xclang",
+      "-fdebug-compilation-dir",
+      "-Xclang",
+      ".",
+    ]
   }
 
   # Tells the compiler not to use absolute paths when passing the default
diff --git a/build/fuchsia/sdk.sha1 b/build/fuchsia/sdk.sha1
index 58dd34d..1f96f5b9 100644
--- a/build/fuchsia/sdk.sha1
+++ b/build/fuchsia/sdk.sha1
@@ -1 +1 @@
-0fe5efe7d114ff39c1f2f2606e8dad87bb62cdc4
\ No newline at end of file
+d59d4e8dd687053fdebd1c9521b7ef3bbbcfae1c
\ No newline at end of file
diff --git a/build/secondary/third_party/android_system_sdk/BUILD.gn b/build/secondary/third_party/android_system_sdk/BUILD.gn
new file mode 100644
index 0000000..b8f665b
--- /dev/null
+++ b/build/secondary/third_party/android_system_sdk/BUILD.gn
@@ -0,0 +1,9 @@
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/android/rules.gni")
+
+android_system_java_prebuilt("public_framework_system_java") {
+  jar_path = "//third_party/android_system_sdk/android_system.jar"
+}
diff --git a/cc/test/fake_paint_image_generator.cc b/cc/test/fake_paint_image_generator.cc
index ce2be35..99f6319 100644
--- a/cc/test/fake_paint_image_generator.cc
+++ b/cc/test/fake_paint_image_generator.cc
@@ -35,7 +35,9 @@
     frames_decoded_count_[frame_index] = 1;
   else
     frames_decoded_count_[frame_index]++;
-  CHECK(image_pixmap_.readPixels(info, pixels, row_bytes, 0, 0));
+  SkPixmap dst(info, pixels, row_bytes);
+  CHECK(image_pixmap_.scalePixels(dst, kMedium_SkFilterQuality));
+  decode_infos_.push_back(info);
   return true;
 }
 
diff --git a/cc/test/fake_paint_image_generator.h b/cc/test/fake_paint_image_generator.h
index fe8a1d3..923ebd01 100644
--- a/cc/test/fake_paint_image_generator.h
+++ b/cc/test/fake_paint_image_generator.h
@@ -36,6 +36,7 @@
   const base::flat_map<size_t, int>& frames_decoded() const {
     return frames_decoded_count_;
   }
+  const std::vector<SkImageInfo>& decode_infos() const { return decode_infos_; }
   void reset_frames_decoded() { frames_decoded_count_.clear(); }
 
  private:
@@ -43,6 +44,7 @@
   SkPixmap image_pixmap_;
   base::flat_map<size_t, int> frames_decoded_count_;
   std::vector<SkISize> supported_sizes_;
+  std::vector<SkImageInfo> decode_infos_;
 };
 
 }  // namespace cc
diff --git a/cc/tiles/gpu_image_decode_cache.cc b/cc/tiles/gpu_image_decode_cache.cc
index 421e9b5f1..2332f54 100644
--- a/cc/tiles/gpu_image_decode_cache.cc
+++ b/cc/tiles/gpu_image_decode_cache.cc
@@ -141,16 +141,23 @@
   SkISize supported_size =
       paint_image.GetSupportedDecodeSize(pixmap.bounds().size());
 
-  if (supported_size == pixmap.bounds().size()) {
+  const bool is_nearest_neighbor =
+      draw_image.filter_quality() == kNone_SkFilterQuality;
+  if (supported_size == pixmap.bounds().size() && !is_nearest_neighbor) {
     SkImageInfo info = pixmap.info();
     return paint_image.Decode(pixmap.writable_addr(), &info, color_space,
                               draw_image.frame_index());
   }
 
   // If we can't decode/scale directly, we will handle this in up to 3 steps.
-  // Step 1: Decode at the nearest (larger) directly supported size.
-  SkImageInfo decode_info = SkImageInfo::MakeN32Premul(supported_size.width(),
-                                                       supported_size.height());
+  // Step 1: Decode at the nearest (larger) directly supported size or the
+  // original size if nearest neighbor quality is requested.
+  SkISize decode_size =
+      is_nearest_neighbor
+          ? SkISize::Make(paint_image.width(), paint_image.height())
+          : supported_size;
+  SkImageInfo decode_info =
+      SkImageInfo::MakeN32Premul(decode_size.width(), decode_size.height());
   SkBitmap decode_bitmap;
   if (!decode_bitmap.tryAllocPixels(decode_info))
     return false;
diff --git a/cc/tiles/gpu_image_decode_cache_unittest.cc b/cc/tiles/gpu_image_decode_cache_unittest.cc
index 518fbc24..50e65b8 100644
--- a/cc/tiles/gpu_image_decode_cache_unittest.cc
+++ b/cc/tiles/gpu_image_decode_cache_unittest.cc
@@ -2387,6 +2387,82 @@
   }
 }
 
+TEST_P(GpuImageDecodeCacheTest, DecodeToScale) {
+  auto cache = CreateCache();
+  bool is_decomposable = true;
+  SkFilterQuality quality = kMedium_SkFilterQuality;
+
+  viz::ContextProvider::ScopedContextLock context_lock(context_provider());
+  SkISize full_size = SkISize::Make(100, 100);
+  std::vector<SkISize> supported_sizes = {SkISize::Make(25, 25),
+                                          SkISize::Make(50, 50)};
+  std::vector<FrameMetadata> frames = {FrameMetadata()};
+  sk_sp<FakePaintImageGenerator> generator =
+      sk_make_sp<FakePaintImageGenerator>(
+          SkImageInfo::MakeN32Premul(full_size.width(), full_size.height(),
+                                     DefaultColorSpace().ToSkColorSpace()),
+          frames, true, supported_sizes);
+  PaintImage paint_image = PaintImageBuilder::WithDefault()
+                               .set_id(PaintImage::GetNextId())
+                               .set_paint_image_generator(generator)
+                               .set_frame_index(0u)
+                               .TakePaintImage();
+
+  DrawImage draw_image1(
+      paint_image, SkIRect::MakeWH(paint_image.width(), paint_image.height()),
+      quality, CreateMatrix(SkSize::Make(0.5, 0.5), is_decomposable),
+      PaintImage::kDefaultFrameIndex, DefaultColorSpace());
+  DecodedDrawImage decoded_image1 =
+      EnsureImageBacked(cache->GetDecodedImageForDraw(draw_image1));
+  ASSERT_TRUE(decoded_image1.image());
+  EXPECT_EQ(decoded_image1.image()->width(), 50);
+  EXPECT_EQ(decoded_image1.image()->height(), 50);
+
+  // We should have requested a scaled decode from the generator.
+  ASSERT_EQ(generator->decode_infos().size(), 1u);
+  EXPECT_EQ(generator->decode_infos().at(0).width(), 50);
+  EXPECT_EQ(generator->decode_infos().at(0).height(), 50);
+  cache->DrawWithImageFinished(draw_image1, decoded_image1);
+}
+
+TEST_P(GpuImageDecodeCacheTest, DecodeToScaleNoneQuality) {
+  auto cache = CreateCache();
+  bool is_decomposable = true;
+  SkFilterQuality quality = kNone_SkFilterQuality;
+
+  viz::ContextProvider::ScopedContextLock context_lock(context_provider());
+  SkISize full_size = SkISize::Make(100, 100);
+  std::vector<SkISize> supported_sizes = {SkISize::Make(25, 25),
+                                          SkISize::Make(50, 50)};
+  std::vector<FrameMetadata> frames = {FrameMetadata()};
+  sk_sp<FakePaintImageGenerator> generator =
+      sk_make_sp<FakePaintImageGenerator>(
+          SkImageInfo::MakeN32Premul(full_size.width(), full_size.height(),
+                                     DefaultColorSpace().ToSkColorSpace()),
+          frames, true, supported_sizes);
+  PaintImage paint_image = PaintImageBuilder::WithDefault()
+                               .set_id(PaintImage::GetNextId())
+                               .set_paint_image_generator(generator)
+                               .set_frame_index(0u)
+                               .TakePaintImage();
+
+  DrawImage draw_image(
+      paint_image, SkIRect::MakeWH(paint_image.width(), paint_image.height()),
+      quality, CreateMatrix(SkSize::Make(0.5, 0.5), is_decomposable),
+      PaintImage::kDefaultFrameIndex, DefaultColorSpace());
+  DecodedDrawImage decoded_image =
+      EnsureImageBacked(cache->GetDecodedImageForDraw(draw_image));
+  ASSERT_TRUE(decoded_image.image());
+  EXPECT_EQ(decoded_image.image()->width(), 50);
+  EXPECT_EQ(decoded_image.image()->height(), 50);
+
+  // We should have requested the original decode from the generator.
+  ASSERT_EQ(generator->decode_infos().size(), 1u);
+  EXPECT_EQ(generator->decode_infos().at(0).width(), 100);
+  EXPECT_EQ(generator->decode_infos().at(0).height(), 100);
+  cache->DrawWithImageFinished(draw_image, decoded_image);
+}
+
 INSTANTIATE_TEST_CASE_P(
     GpuImageDecodeCacheTests,
     GpuImageDecodeCacheTest,
diff --git a/cc/tiles/software_image_decode_cache.cc b/cc/tiles/software_image_decode_cache.cc
index 6a52e91..cb0d247 100644
--- a/cc/tiles/software_image_decode_cache.cc
+++ b/cc/tiles/software_image_decode_cache.cc
@@ -383,43 +383,37 @@
     base::AutoUnlock release(lock_);
     local_cache_entry = Utils::DoDecodeImage(key, paint_image, color_type_);
   } else {
-    // Use the full image decode to generate a scaled/subrected decode.
-    // TODO(vmpstr): This part needs to handle decode to scale.
-    base::Optional<CacheKey> candidate_key;
-    auto image_keys_it = frame_key_to_image_keys_.find(key.frame_key());
-    // We know that we must have at least our own |entry| in this list, so it
-    // won't be empty.
-    DCHECK(image_keys_it != frame_key_to_image_keys_.end());
+    // Attempt to find a cached decode to generate a scaled/subrected decode
+    // from.
+    base::Optional<CacheKey> candidate_key = FindCachedCandidate(key);
 
-    auto& available_keys = image_keys_it->second;
-    std::sort(available_keys.begin(), available_keys.end(),
-              [](const CacheKey& one, const CacheKey& two) {
-                // Return true if |one| scale is less than |two| scale.
-                return one.target_size().width() < two.target_size().width() &&
-                       one.target_size().height() < two.target_size().height();
-              });
+    SkISize desired_size = gfx::SizeToSkISize(key.target_size());
+    const bool should_decode_to_scale =
+        // Prefer scaling from a cached decode instead of performing another
+        // decode to the desired size.
+        !candidate_key &&
+        // We need the original decode to subrect before scaling, if a subrect
+        // is requested.
+        key.src_rect() ==
+            gfx::Rect(paint_image.width(), paint_image.height()) &&
+        // Note that in the case where we can't decode to the exact desired
+        // size, but a size lower than the original, it would be better to
+        // decode to that size and then scale to the desired size. But this
+        // should be rare in practice, since we only decode to mip levels.
+        paint_image.GetSupportedDecodeSize(desired_size) == desired_size;
 
-    for (auto& available_key : available_keys) {
-      // Only consider keys coming from the same src rect, since otherwise the
-      // resulting image was extracted using a different src.
-      if (available_key.src_rect() != key.src_rect())
-        continue;
-
-      // that are at least as big as the required |key|.
-      if (available_key.target_size().width() < key.target_size().width() ||
-          available_key.target_size().height() < key.target_size().height()) {
-        continue;
-      }
-      auto image_it = decoded_images_.Peek(available_key);
-      DCHECK(image_it != decoded_images_.end());
-      auto* available_entry = image_it->second.get();
-      if (available_entry->is_locked || available_entry->Lock()) {
-        candidate_key.emplace(available_key);
-        break;
-      }
+    // We don't scale and cache the result if nearest neighbor is requested,
+    // i.e., the processing type should be kOriginal or kSubrectOriginal. And
+    // requesting a subrect already vetoes decode to scale.
+    DCHECK(!should_decode_to_scale || !key.is_nearest_neighbor());
+    if (should_decode_to_scale) {
+      base::AutoUnlock release(lock_);
+      local_cache_entry = Utils::DoDecodeImage(key, paint_image, color_type_);
     }
 
-    if (!candidate_key) {
+    // Couldn't decode to scale or find a cached candidate. Create the
+    // intermediate candidate key required for this decode.
+    if (!should_decode_to_scale && !candidate_key) {
       // IMPORTANT: There is a bit of a subtlety here. We would normally want to
       // generate a new candidate with the key.src_rect() as the src_rect. This
       // would ensure that when scaling we won't need to peek pixels, since it's
@@ -445,25 +439,27 @@
       candidate_key.emplace(
           CacheKey::FromDrawImage(candidate_draw_image, color_type_));
     }
-    CHECK(*candidate_key != key) << key.ToString();
 
-    auto decoded_draw_image =
-        GetDecodedImageForDrawInternal(*candidate_key, paint_image);
-    if (!decoded_draw_image.image()) {
-      local_cache_entry = nullptr;
-    } else {
-      base::AutoUnlock release(lock_);
-      // IMPORTANT: More subtleties:
-      // If the candidate could have used the original decode, that means we
-      // need to extractSubset from it. In all other cases, this would have
-      // already been done to generate the candidate.
-      local_cache_entry = Utils::GenerateCacheEntryFromCandidate(
-          key, decoded_draw_image, candidate_key->type() == CacheKey::kOriginal,
-          color_type_);
+    if (candidate_key) {
+      CHECK(*candidate_key != key) << key.ToString();
+      auto decoded_draw_image =
+          GetDecodedImageForDrawInternal(*candidate_key, paint_image);
+      if (!decoded_draw_image.image()) {
+        local_cache_entry = nullptr;
+      } else {
+        base::AutoUnlock release(lock_);
+        // IMPORTANT: More subtleties:
+        // If the candidate could have used the original decode, that means we
+        // need to extractSubset from it. In all other cases, this would have
+        // already been done to generate the candidate.
+        local_cache_entry = Utils::GenerateCacheEntryFromCandidate(
+            key, decoded_draw_image,
+            candidate_key->type() == CacheKey::kOriginal, color_type_);
+      }
+
+      // Unref to balance the GetDecodedImageForDrawInternal() call.
+      UnrefImage(*candidate_key);
     }
-
-    // Unref to balance the GetDecodedImageForDrawInternal() call.
-    UnrefImage(*candidate_key);
   }
 
   if (!local_cache_entry) {
@@ -488,6 +484,43 @@
   }
 }
 
+base::Optional<SoftwareImageDecodeCache::CacheKey>
+SoftwareImageDecodeCache::FindCachedCandidate(const CacheKey& key) {
+  auto image_keys_it = frame_key_to_image_keys_.find(key.frame_key());
+  // We know that we must have at least our own |entry| in this list, so it
+  // won't be empty.
+  DCHECK(image_keys_it != frame_key_to_image_keys_.end());
+
+  auto& available_keys = image_keys_it->second;
+  std::sort(available_keys.begin(), available_keys.end(),
+            [](const CacheKey& one, const CacheKey& two) {
+              // Return true if |one| scale is less than |two| scale.
+              return one.target_size().width() < two.target_size().width() &&
+                     one.target_size().height() < two.target_size().height();
+            });
+
+  for (auto& available_key : available_keys) {
+    // Only consider keys coming from the same src rect, since otherwise the
+    // resulting image was extracted using a different src.
+    if (available_key.src_rect() != key.src_rect())
+      continue;
+
+    // That are at least as big as the required |key|.
+    if (available_key.target_size().width() < key.target_size().width() ||
+        available_key.target_size().height() < key.target_size().height()) {
+      continue;
+    }
+    auto image_it = decoded_images_.Peek(available_key);
+    DCHECK(image_it != decoded_images_.end());
+    auto* available_entry = image_it->second.get();
+    if (available_entry->is_locked || available_entry->Lock()) {
+      return available_key;
+    }
+  }
+
+  return base::nullopt;
+}
+
 DecodedDrawImage SoftwareImageDecodeCache::GetDecodedImageForDraw(
     const DrawImage& draw_image) {
   // Non-cached images are be used for raster directly.
diff --git a/cc/tiles/software_image_decode_cache.h b/cc/tiles/software_image_decode_cache.h
index 0fa379c2..204eb45a 100644
--- a/cc/tiles/software_image_decode_cache.h
+++ b/cc/tiles/software_image_decode_cache.h
@@ -128,6 +128,7 @@
                               CacheEntry* cache_entry);
   void AddBudgetForImage(const CacheKey& key, CacheEntry* entry);
   void RemoveBudgetForImage(const CacheKey& key, CacheEntry* entry);
+  base::Optional<CacheKey> FindCachedCandidate(const CacheKey& key);
 
   void UnrefImage(const CacheKey& key);
 
diff --git a/cc/tiles/software_image_decode_cache_unittest.cc b/cc/tiles/software_image_decode_cache_unittest.cc
index c9f8c5a..fb7df6e 100644
--- a/cc/tiles/software_image_decode_cache_unittest.cc
+++ b/cc/tiles/software_image_decode_cache_unittest.cc
@@ -1777,5 +1777,138 @@
   }
 }
 
+TEST(SoftwareImageDecodeCacheTest, DecodeToScale) {
+  TestSoftwareImageDecodeCache cache;
+  bool is_decomposable = true;
+  SkFilterQuality quality = kMedium_SkFilterQuality;
+
+  SkISize full_size = SkISize::Make(100, 100);
+  std::vector<SkISize> supported_sizes = {SkISize::Make(25, 25),
+                                          SkISize::Make(50, 50)};
+  std::vector<FrameMetadata> frames = {FrameMetadata()};
+  sk_sp<FakePaintImageGenerator> generator =
+      sk_make_sp<FakePaintImageGenerator>(
+          SkImageInfo::MakeN32Premul(full_size.width(), full_size.height(),
+                                     DefaultColorSpace().ToSkColorSpace()),
+          frames, true, supported_sizes);
+  PaintImage paint_image = PaintImageBuilder::WithDefault()
+                               .set_id(PaintImage::GetNextId())
+                               .set_paint_image_generator(generator)
+                               .set_frame_index(0u)
+                               .TakePaintImage();
+
+  // Scale to mip level 1, there should be a single entry in the cache from
+  // the direct decode.
+  DrawImage draw_image1(
+      paint_image, SkIRect::MakeWH(paint_image.width(), paint_image.height()),
+      quality, CreateMatrix(SkSize::Make(0.5, 0.5), is_decomposable),
+      PaintImage::kDefaultFrameIndex, DefaultColorSpace());
+  DecodedDrawImage decoded_image1 = cache.GetDecodedImageForDraw(draw_image1);
+  ASSERT_TRUE(decoded_image1.image());
+  EXPECT_EQ(decoded_image1.image()->width(), 50);
+  EXPECT_EQ(decoded_image1.image()->height(), 50);
+  EXPECT_EQ(cache.GetNumCacheEntriesForTesting(), 1u);
+
+  // We should have requested a scaled decode from the generator.
+  ASSERT_EQ(generator->decode_infos().size(), 1u);
+  EXPECT_EQ(generator->decode_infos().at(0).width(), 50);
+  EXPECT_EQ(generator->decode_infos().at(0).height(), 50);
+
+  // Scale to mip level 2, we should be using the existing entry instead of
+  // re-decoding.
+  DrawImage draw_image2(
+      paint_image, SkIRect::MakeWH(paint_image.width(), paint_image.height()),
+      quality, CreateMatrix(SkSize::Make(0.25, 0.25), is_decomposable),
+      PaintImage::kDefaultFrameIndex, DefaultColorSpace());
+  DecodedDrawImage decoded_image2 = cache.GetDecodedImageForDraw(draw_image2);
+  ASSERT_TRUE(decoded_image2.image());
+  EXPECT_EQ(decoded_image2.image()->width(), 25);
+  EXPECT_EQ(decoded_image2.image()->height(), 25);
+  EXPECT_EQ(cache.GetNumCacheEntriesForTesting(), 2u);
+
+  // Since we scaled from the existing entry, no new decodes should be
+  // requested from the generator.
+  ASSERT_EQ(generator->decode_infos().size(), 1u);
+  EXPECT_EQ(generator->decode_infos().at(0).width(), 50);
+  EXPECT_EQ(generator->decode_infos().at(0).height(), 50);
+
+  cache.DrawWithImageFinished(draw_image1, decoded_image1);
+  cache.DrawWithImageFinished(draw_image2, decoded_image2);
+}
+
+TEST(SoftwareImageDecodeCacheTest, DecodeToScaleSubrect) {
+  TestSoftwareImageDecodeCache cache;
+  bool is_decomposable = true;
+  SkFilterQuality quality = kMedium_SkFilterQuality;
+
+  SkISize full_size = SkISize::Make(100, 100);
+  std::vector<SkISize> supported_sizes = {SkISize::Make(25, 25),
+                                          SkISize::Make(50, 50)};
+  std::vector<FrameMetadata> frames = {FrameMetadata()};
+  sk_sp<FakePaintImageGenerator> generator =
+      sk_make_sp<FakePaintImageGenerator>(
+          SkImageInfo::MakeN32Premul(full_size.width(), full_size.height(),
+                                     DefaultColorSpace().ToSkColorSpace()),
+          frames, true, supported_sizes);
+  PaintImage paint_image = PaintImageBuilder::WithDefault()
+                               .set_id(PaintImage::GetNextId())
+                               .set_paint_image_generator(generator)
+                               .set_frame_index(0u)
+                               .TakePaintImage();
+
+  // Scale to mip level 1, there should be 2 entries in the cache, since the
+  // subrect vetoes decode to scale.
+  DrawImage draw_image(paint_image, SkIRect::MakeWH(50, 50), quality,
+                       CreateMatrix(SkSize::Make(0.5, 0.5), is_decomposable),
+                       PaintImage::kDefaultFrameIndex, DefaultColorSpace());
+  DecodedDrawImage decoded_image = cache.GetDecodedImageForDraw(draw_image);
+  ASSERT_TRUE(decoded_image.image());
+  EXPECT_EQ(decoded_image.image()->width(), 25);
+  EXPECT_EQ(decoded_image.image()->height(), 25);
+  EXPECT_EQ(cache.GetNumCacheEntriesForTesting(), 2u);
+
+  // We should have requested the original decode from the generator.
+  ASSERT_EQ(generator->decode_infos().size(), 1u);
+  EXPECT_EQ(generator->decode_infos().at(0).width(), 100);
+  EXPECT_EQ(generator->decode_infos().at(0).height(), 100);
+  cache.DrawWithImageFinished(draw_image, decoded_image);
+}
+
+TEST(SoftwareImageDecodeCacheTest, DecodeToScaleNoneQuality) {
+  TestSoftwareImageDecodeCache cache;
+  bool is_decomposable = true;
+  SkFilterQuality quality = kNone_SkFilterQuality;
+
+  SkISize full_size = SkISize::Make(100, 100);
+  std::vector<SkISize> supported_sizes = {SkISize::Make(25, 25),
+                                          SkISize::Make(50, 50)};
+  std::vector<FrameMetadata> frames = {FrameMetadata()};
+  sk_sp<FakePaintImageGenerator> generator =
+      sk_make_sp<FakePaintImageGenerator>(
+          SkImageInfo::MakeN32Premul(full_size.width(), full_size.height(),
+                                     DefaultColorSpace().ToSkColorSpace()),
+          frames, true, supported_sizes);
+  PaintImage paint_image = PaintImageBuilder::WithDefault()
+                               .set_id(PaintImage::GetNextId())
+                               .set_paint_image_generator(generator)
+                               .set_frame_index(0u)
+                               .TakePaintImage();
+
+  DrawImage draw_image(
+      paint_image, SkIRect::MakeWH(paint_image.width(), paint_image.height()),
+      quality, CreateMatrix(SkSize::Make(0.5, 0.5), is_decomposable),
+      PaintImage::kDefaultFrameIndex, DefaultColorSpace());
+  DecodedDrawImage decoded_image = cache.GetDecodedImageForDraw(draw_image);
+  ASSERT_TRUE(decoded_image.image());
+  EXPECT_EQ(decoded_image.image()->width(), 100);
+  EXPECT_EQ(decoded_image.image()->height(), 100);
+
+  // We should have requested the original decode from the generator.
+  ASSERT_EQ(generator->decode_infos().size(), 1u);
+  EXPECT_EQ(generator->decode_infos().at(0).width(), 100);
+  EXPECT_EQ(generator->decode_infos().at(0).height(), 100);
+  cache.DrawWithImageFinished(draw_image, decoded_image);
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/tiles/software_image_decode_cache_utils.cc b/cc/tiles/software_image_decode_cache_utils.cc
index 4b6016b..565a0ffb 100644
--- a/cc/tiles/software_image_decode_cache_utils.cc
+++ b/cc/tiles/software_image_decode_cache_utils.cc
@@ -71,7 +71,6 @@
   TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
                "SoftwareImageDecodeCacheUtils::DoDecodeImage - "
                "decode");
-  DCHECK_EQ(key.type(), CacheKey::kOriginal);
   bool result = paint_image.Decode(target_pixels->data(), &target_info,
                                    key.target_color_space().ToSkColorSpace(),
                                    key.frame_key().frame_index());
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index a18fb599..2ffc15a 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -211,7 +211,6 @@
     "$google_play_services_package:google_play_services_auth_base_java",
     "$google_play_services_package:google_play_services_base_java",
     "$google_play_services_package:google_play_services_basement_java",
-    "$google_play_services_package:google_play_services_cast_framework_java",
     "$google_play_services_package:google_play_services_cast_java",
     "$google_play_services_package:google_play_services_fido_java",
     "$google_play_services_package:google_play_services_gcm_java",
@@ -458,7 +457,6 @@
     ":partner_location_descriptor_proto_java",
     "$google_play_services_package:google_play_services_base_java",
     "$google_play_services_package:google_play_services_basement_java",
-    "$google_play_services_package:google_play_services_cast_framework_java",
     "$google_play_services_package:google_play_services_cast_java",
     "$google_play_services_package:google_play_services_fido_java",
     "//base:base_java",
@@ -536,7 +534,6 @@
     ":partner_location_descriptor_proto_java",
     "$google_play_services_package:google_play_services_base_java",
     "$google_play_services_package:google_play_services_basement_java",
-    "$google_play_services_package:google_play_services_cast_framework_java",
     "$google_play_services_package:google_play_services_cast_java",
     "$google_play_services_package:google_play_services_fido_java",
     "$google_play_services_package:google_play_services_gcm_java",
@@ -1179,6 +1176,7 @@
     "//components/heap_profiling:heap_profiling_java_test_support",
     "//content/public/test/android:content_java_test_support",
   ]
+  deps += android_extra_test_deps
   if (!is_java_debug) {
     proguard_configs = [ "//chrome/android/java/apk_for_test.flags" ]
   }
@@ -1340,6 +1338,7 @@
     deps = [
       ":chrome_test_vr_java",
     ]
+    deps += android_extra_test_deps
     additional_apks = [ "//net/android:net_test_support_apk" ]
     proguard_enabled = !is_java_debug
     if (proguard_enabled && !enable_proguard_obfuscation) {
@@ -1413,6 +1412,7 @@
     "//third_party/junit",
     "//ui/android:ui_java",
   ]
+  deps += android_extra_test_deps
   proguard_enabled = !is_java_debug
   if (proguard_enabled && !enable_proguard_obfuscation) {
     proguard_configs = [ "//base/android/proguard/enable_obfuscation.flags" ]
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni
index a0dbf3d9..be00fc9 100644
--- a/chrome/android/chrome_public_apk_tmpl.gni
+++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -149,7 +149,7 @@
           [ "//chrome/android:monochrome_secondary_abi_lib" ]
     }
 
-    alternative_android_sdk_jar = webview_framework_jar
+    alternative_android_sdk_dep = webview_framework_dep
     app_as_shared_lib = true
     use_chromium_linker = false
     requires_sdk_api_level_23 = true
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
index 8a6635f..303b88e 100644
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -172,12 +172,6 @@
             android:value="180226000"/>
         {% endif %}
 
-        <!-- Cast support -->
-        <meta-data
-            android:name=
-            "com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
-            android:value="org.chromium.chrome.browser.media.router.caf.CastOptionsProvider"/>
-
         <!-- Note: All activities directly or indirectly derived from ChromeActivity
              must specify android:hardwareAccelerated="false".
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
index eeb0a08..31a4fc95 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -141,7 +141,7 @@
 import org.chromium.chrome.browser.vr_shell.VrShellDelegate;
 import org.chromium.chrome.browser.webapps.AddToHomescreenManager;
 import org.chromium.chrome.browser.widget.ControlContainer;
-import org.chromium.chrome.browser.widget.FadingBackgroundView;
+import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
 import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager;
@@ -264,7 +264,7 @@
     private BottomSheetController mBottomSheetController;
     private BottomSheet mBottomSheet;
     private ContextualSuggestionsCoordinator mContextualSuggestionsCoordinator;
-    private FadingBackgroundView mFadingBackgroundView;
+    private ScrimView mScrimView;
     private ManualFillingCoordinator mManualFillingController;
     private float mStatusBarScrimFraction;
     private int mBaseStatusBarColor;
@@ -753,8 +753,8 @@
     /**
      * @return The View used to obscure content and bring focus to a foreground view.
      */
-    public FadingBackgroundView getFadingBackgroundView() {
-        return mFadingBackgroundView;
+    public ScrimView getScrim() {
+        return mScrimView;
     }
 
     /**
@@ -1398,7 +1398,7 @@
         super.finishNativeInitialization();
 
         ViewGroup coordinator = findViewById(R.id.coordinator);
-        mFadingBackgroundView = new FadingBackgroundView(this, (fraction) -> {
+        mScrimView = new ScrimView(this, (fraction) -> {
             mStatusBarScrimFraction = fraction;
             setStatusBarColor(null, mBaseStatusBarColor);
         }, coordinator);
@@ -1408,7 +1408,7 @@
                 findViewById(R.id.keyboard_accessory_sheet_stub));
 
         if (mToolbarManager != null && mToolbarManager.getToolbar() != null) {
-            mToolbarManager.getToolbar().setScrim(mFadingBackgroundView);
+            mToolbarManager.getToolbar().setScrim(mScrimView);
         }
 
         if (supportsContextualSuggestionsBottomSheet()
@@ -1420,7 +1420,7 @@
             ((BottomContainer) findViewById(R.id.bottom_container)).setBottomSheet(mBottomSheet);
 
             mBottomSheetController = new BottomSheetController(this, getTabModelSelector(),
-                    getCompositorViewHolder().getLayoutManager(), mFadingBackgroundView,
+                    getCompositorViewHolder().getLayoutManager(), mScrimView,
                     getContextualSearchManager(), mBottomSheet);
 
             mContextualSuggestionsCoordinator = new ContextualSuggestionsCoordinator(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/ScrollingBottomViewSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/ScrollingBottomViewSceneLayer.java
index aa9f89a..396caab 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/ScrollingBottomViewSceneLayer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/ScrollingBottomViewSceneLayer.java
@@ -5,6 +5,7 @@
 package org.chromium.chrome.browser.compositor.scene_layer;
 
 import android.graphics.RectF;
+import android.view.View;
 
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.chrome.browser.compositor.LayerTitleCache;
@@ -75,8 +76,11 @@
     @Override
     public SceneOverlayLayer getUpdatedSceneOverlayTree(RectF viewport, RectF visibleViewport,
             LayerTitleCache layerTitleCache, ResourceManager resourceManager, float yOffset) {
+        // The composited shadow should be visible if the Android toolbar's isn't.
+        boolean isShadowVisible = mBottomView.getVisibility() != View.VISIBLE;
+
         nativeUpdateScrollingBottomViewLayer(mNativePtr, resourceManager, mResourceId,
-                mTopShadowHeightPx, viewport.height() + mCurrentOffsetPx, mCurrentOffsetPx > 0);
+                mTopShadowHeightPx, viewport.height() + mCurrentOffsetPx, isShadowVisible);
 
         return this;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java b/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java
index 3f0a7a1..aee8dc4f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java
@@ -9,6 +9,7 @@
 import org.chromium.chrome.browser.download.DownloadNotifier;
 import org.chromium.chrome.browser.download.DownloadServiceDelegate;
 import org.chromium.components.offline_items_collection.ContentId;
+import org.chromium.components.offline_items_collection.LegacyHelpers;
 import org.chromium.components.offline_items_collection.OfflineContentProvider;
 import org.chromium.components.offline_items_collection.OfflineItem;
 import org.chromium.components.offline_items_collection.OfflineItemState;
@@ -86,7 +87,6 @@
 
     @Override
     public void onItemUpdated(OfflineItem item) {
-        // Assume that any item sending updates should have them reflected in the UI.
         getVisualsAndUpdateItem(item);
     }
 
@@ -147,6 +147,10 @@
     }
 
     private void pushItemToUi(OfflineItem item, OfflineItemVisuals visuals) {
+        // TODO(http://crbug.com/855141): Find a cleaner way to hide unimportant UI updates.
+        // If it's a suggested page, do not add it to the notification UI.
+        if (LegacyHelpers.isLegacyOfflinePage(item.id) && item.isSuggested) return;
+
         DownloadInfo info = DownloadInfo.fromOfflineItem(item, visuals);
         switch (item.state) {
             case OfflineItemState.IN_PROGRESS:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CafMediaRouteProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CafMediaRouteProvider.java
index 5671823d..d8d26d9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CafMediaRouteProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CafMediaRouteProvider.java
@@ -11,16 +11,11 @@
 import android.support.v7.media.MediaRouter;
 import android.support.v7.media.MediaRouter.RouteInfo;
 
-import com.google.android.gms.cast.framework.CastSession;
-import com.google.android.gms.cast.framework.SessionManagerListener;
-
 import org.chromium.base.Log;
 import org.chromium.chrome.browser.media.router.ChromeMediaRouter;
-import org.chromium.chrome.browser.media.router.ClientRecord;
 import org.chromium.chrome.browser.media.router.DiscoveryCallback;
 import org.chromium.chrome.browser.media.router.DiscoveryDelegate;
 import org.chromium.chrome.browser.media.router.MediaController;
-import org.chromium.chrome.browser.media.router.MediaRoute;
 import org.chromium.chrome.browser.media.router.MediaRouteManager;
 import org.chromium.chrome.browser.media.router.MediaRouteProvider;
 import org.chromium.chrome.browser.media.router.MediaSink;
@@ -32,18 +27,13 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * A {@link MediaRouteProvider} implementation for Cast devices and applications, using Cast v3 API.
  */
-public class CafMediaRouteProvider
-        implements MediaRouteProvider, DiscoveryDelegate, SessionManagerListener<CastSession> {
+public class CafMediaRouteProvider implements MediaRouteProvider, DiscoveryDelegate {
     private static final String TAG = "cr_CafMRP";
 
-    private static final String AUTO_JOIN_PRESENTATION_ID = "auto-join";
-    private static final String PRESENTATION_ID_SESSION_ID_PREFIX = "cast-session_";
-
     protected static final List<MediaSink> NO_SINKS = Collections.emptyList();
 
     protected final MediaRouter mAndroidMediaRouter;
@@ -51,12 +41,6 @@
     protected final Map<String, DiscoveryCallback> mDiscoveryCallbacks =
             new HashMap<String, DiscoveryCallback>();
     protected Handler mHandler = new Handler();
-    protected final Map<String, MediaRoute> mRoutes = new HashMap<String, MediaRoute>();
-    private CreateRouteRequestInfo mPendingCreateRouteRequestInfo;
-    private CastSessionController mSessionController;
-
-    private ClientRecord mLastRemovedRouteRecord;
-    private final Map<String, ClientRecord> mClientRecords = new HashMap<String, ClientRecord>();
 
     private CafMediaRouteProvider(MediaRouter androidMediaRouter, MediaRouteManager manager) {
         mAndroidMediaRouter = androidMediaRouter;
@@ -67,14 +51,6 @@
         return new CafMediaRouteProvider(ChromeMediaRouter.getAndroidMediaRouter(), manager);
     }
 
-    public Map<String, ClientRecord> getClientRecords() {
-        return mClientRecords;
-    }
-
-    public Set<String> getClientIds() {
-        return mClientRecords.keySet();
-    }
-
     @Override
     public boolean supportsSource(String sourceId) {
         return getSourceFromId(sourceId) != null;
@@ -194,95 +170,23 @@
     @Override
     public void createRoute(String sourceId, String sinkId, String presentationId, String origin,
             int tabId, boolean isIncognito, int nativeRequestId) {
-        Log.d(TAG, "createRoute");
-        if (mPendingCreateRouteRequestInfo != null) {
-            // TODO(zqzhang): do something.
-        }
-        if (mAndroidMediaRouter == null) {
-            mManager.onRouteRequestError("Not supported", nativeRequestId);
-            return;
-        }
-
-        MediaSink sink = MediaSink.fromSinkId(sinkId, mAndroidMediaRouter);
-        if (sink == null) {
-            mManager.onRouteRequestError("No sink", nativeRequestId);
-            return;
-        }
-
-        MediaSource source = CastMediaSource.from(sourceId);
-        if (source == null) {
-            mManager.onRouteRequestError("Unsupported presentation URL", nativeRequestId);
-            return;
-        }
-
-        mPendingCreateRouteRequestInfo = new CreateRouteRequestInfo(
-                source, sink, presentationId, origin, tabId, isIncognito, nativeRequestId);
-
-        CastUtils.getCastContext().setReceiverApplicationId(source.getApplicationId());
-
-        for (MediaRouter.RouteInfo routeInfo : mAndroidMediaRouter.getRoutes()) {
-            if (routeInfo.getId().equals(sink.getId())) {
-                // Unselect and then select so that CAF will get notified of the selection.
-                mAndroidMediaRouter.unselect(0);
-                routeInfo.select();
-                break;
-            }
-        }
+        // Not implemented.
     }
 
     @Override
     public void joinRoute(
             String sourceId, String presentationId, String origin, int tabId, int nativeRequestId) {
-        CastMediaSource source = CastMediaSource.from(sourceId);
-        if (source == null || source.getClientId() == null) {
-            mManager.onRouteRequestError("Unsupported presentation URL", nativeRequestId);
-            return;
-        }
-
-        if (!hasSession()) {
-            mManager.onRouteRequestError("No presentation", nativeRequestId);
-            return;
-        }
-
-        if (!canJoinExistingSession(presentationId, origin, tabId, source)) {
-            mManager.onRouteRequestError("No matching route", nativeRequestId);
-            return;
-        }
-
-        MediaRoute route =
-                new MediaRoute(mSessionController.getSink().getId(), sourceId, presentationId);
-        addRoute(route, origin, tabId);
-        mManager.onRouteCreated(route.id, route.sinkId, nativeRequestId, this, false);
+        // Not implemented.
     }
 
     @Override
     public void closeRoute(String routeId) {
-        MediaRoute route = mRoutes.get(routeId);
-        if (route == null) return;
-
-        if (!hasSession()) {
-            mRoutes.remove(routeId);
-            mManager.onRouteClosed(routeId);
-            return;
-        }
-
-        ClientRecord client = getClientRecordByRouteId(routeId);
-        if (client != null && mAndroidMediaRouter != null) {
-            MediaSink sink =
-                    MediaSink.fromSinkId(mSessionController.getSink().getId(), mAndroidMediaRouter);
-            if (sink != null) {
-                mSessionController.notifyReceiverAction(routeId, sink, client.clientId, "stop");
-            }
-        }
-
-        mSessionController.endSession();
+        // Not implemented.
     }
 
     @Override
     public void detachRoute(String routeId) {
-        mRoutes.remove(routeId);
-
-        removeClient(getClientRecordByRouteId(routeId));
+        // Not implemented.
     }
 
     @Override
@@ -300,200 +204,4 @@
     private MediaSource getSourceFromId(String sourceId) {
         return CastMediaSource.from(sourceId);
     }
-
-    ///////////////////////////////////////////////
-    // SessionManagerListener implementation
-    ///////////////////////////////////////////////
-
-    @Override
-    public void onSessionStarting(CastSession session) {
-        Log.d(TAG, "onSessionStarting");
-        mSessionController = new CastSessionController(session, this,
-                mPendingCreateRouteRequestInfo.sink, mPendingCreateRouteRequestInfo.source);
-        MediaRoute route = new MediaRoute(mPendingCreateRouteRequestInfo.sink.getId(),
-                mPendingCreateRouteRequestInfo.source.getSourceId(),
-                mPendingCreateRouteRequestInfo.presentationId);
-        addRoute(
-                route, mPendingCreateRouteRequestInfo.origin, mPendingCreateRouteRequestInfo.tabId);
-        mManager.onRouteCreated(
-                route.id, route.sinkId, mPendingCreateRouteRequestInfo.nativeRequestId, this, true);
-
-        String clientId = ((CastMediaSource) mPendingCreateRouteRequestInfo.source).getClientId();
-
-        if (clientId != null) {
-            ClientRecord clientRecord = mClientRecords.get(clientId);
-            if (clientRecord != null) {
-                mSessionController.notifyReceiverAction(clientRecord.routeId,
-                        mPendingCreateRouteRequestInfo.sink, clientId, "cast");
-            }
-        }
-    }
-
-    @Override
-    public void onSessionStarted(CastSession session, String sessionId) {
-        Log.d(TAG, "onSessionStarted");
-        mPendingCreateRouteRequestInfo = null;
-        mSessionController.onSessionStarted();
-    }
-
-    @Override
-    public void onSessionStartFailed(CastSession session, int error) {
-        for (String routeId : mRoutes.keySet()) {
-            mManager.onRouteClosedWithError(routeId, "Launch error");
-        }
-        mRoutes.clear();
-        mClientRecords.clear();
-    }
-
-    @Override
-    public void onSessionEnding(CastSession session) {
-        // Not implemented.
-    }
-
-    @Override
-    public void onSessionEnded(CastSession session, int error) {
-        if (!hasSession()) return;
-
-        if (mClientRecords.isEmpty()) {
-            for (String routeId : mRoutes.keySet()) mManager.onRouteClosed(routeId);
-            mRoutes.clear();
-        } else {
-            mLastRemovedRouteRecord = mClientRecords.values().iterator().next();
-            for (ClientRecord client : mClientRecords.values()) {
-                mManager.onRouteClosed(client.routeId);
-
-                mRoutes.remove(client.routeId);
-            }
-            mClientRecords.clear();
-        }
-
-        detachFromSession();
-        if (mAndroidMediaRouter != null) {
-            mAndroidMediaRouter.selectRoute(mAndroidMediaRouter.getDefaultRoute());
-        }
-    }
-
-    @Override
-    public void onSessionResuming(CastSession session, String sessionId) {}
-
-    @Override
-    public void onSessionResumed(CastSession session, boolean wasSuspended) {}
-
-    @Override
-    public void onSessionResumeFailed(CastSession session, int error) {}
-
-    @Override
-    public void onSessionSuspended(CastSession session, int reason) {}
-
-    public boolean hasSession() {
-        return mSessionController != null;
-    }
-
-    private void detachFromSession() {
-        mSessionController.onSessionEnded();
-        mSessionController = null;
-    }
-
-    private void addRoute(MediaRoute route, String origin, int tabId) {
-        mRoutes.put(route.id, route);
-
-        CastMediaSource source = CastMediaSource.from(route.sourceId);
-        final String clientId = source.getClientId();
-
-        if (clientId == null || mClientRecords.containsKey(clientId)) return;
-
-        mClientRecords.put(clientId,
-                new ClientRecord(route.id, clientId, source.getApplicationId(),
-                        source.getAutoJoinPolicy(), origin, tabId));
-    }
-
-    private void removeClient(@Nullable ClientRecord client) {
-        if (client == null) return;
-
-        mLastRemovedRouteRecord = client;
-        mClientRecords.remove(client.clientId);
-    }
-
-    @Nullable
-    private ClientRecord getClientRecordByRouteId(String routeId) {
-        for (ClientRecord record : mClientRecords.values()) {
-            if (record.routeId.equals(routeId)) return record;
-        }
-        return null;
-    }
-
-    private static class CreateRouteRequestInfo {
-        public final MediaSource source;
-        public final MediaSink sink;
-        public final String presentationId;
-        public final String origin;
-        public final int tabId;
-        public final boolean isIncognito;
-        public final int nativeRequestId;
-
-        public CreateRouteRequestInfo(MediaSource source, MediaSink sink, String presentationId,
-                String origin, int tabId, boolean isIncognito, int nativeRequestId) {
-            this.source = source;
-            this.sink = sink;
-            this.presentationId = presentationId;
-            this.origin = origin;
-            this.tabId = tabId;
-            this.isIncognito = isIncognito;
-            this.nativeRequestId = nativeRequestId;
-        }
-    }
-
-    private boolean canJoinExistingSession(
-            String presentationId, String origin, int tabId, CastMediaSource source) {
-        if (AUTO_JOIN_PRESENTATION_ID.equals(presentationId)) {
-            return canAutoJoin(source, origin, tabId);
-        }
-        if (presentationId.startsWith(PRESENTATION_ID_SESSION_ID_PREFIX)) {
-            String sessionId = presentationId.substring(PRESENTATION_ID_SESSION_ID_PREFIX.length());
-            return mSessionController.getSession().getSessionId().equals(sessionId);
-        }
-        for (MediaRoute route : mRoutes.values()) {
-            if (route.presentationId.equals(presentationId)) return true;
-        }
-        return false;
-    }
-
-    private boolean canAutoJoin(CastMediaSource source, String origin, int tabId) {
-        if (source.getAutoJoinPolicy().equals(CastMediaSource.AUTOJOIN_PAGE_SCOPED)) return false;
-
-        CastMediaSource currentSource = (CastMediaSource) mSessionController.getSource();
-        if (!currentSource.getApplicationId().equals(source.getApplicationId())) return false;
-
-        if (mClientRecords.isEmpty() && mLastRemovedRouteRecord != null) {
-            return isSameOrigin(origin, mLastRemovedRouteRecord.origin)
-                    && tabId == mLastRemovedRouteRecord.tabId;
-        }
-
-        if (mClientRecords.isEmpty()) return false;
-
-        ClientRecord client = mClientRecords.values().iterator().next();
-
-        if (source.getAutoJoinPolicy().equals(CastMediaSource.AUTOJOIN_ORIGIN_SCOPED)) {
-            return isSameOrigin(origin, client.origin);
-        }
-        if (source.getAutoJoinPolicy().equals(CastMediaSource.AUTOJOIN_TAB_AND_ORIGIN_SCOPED)) {
-            return isSameOrigin(origin, client.origin) && tabId == client.tabId;
-        }
-
-        return false;
-    }
-
-    /**
-     * Compares two origins. Empty origin strings correspond to unique origins in
-     * url::Origin.
-     *
-     * @param originA A URL origin.
-     * @param originB A URL origin.
-     * @return True if originA and originB represent the same origin, false otherwise.
-     */
-    private static final boolean isSameOrigin(String originA, String originB) {
-        if (originA == null || originA.isEmpty() || originB == null || originB.isEmpty())
-            return false;
-        return originA.equals(originB);
-    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastMessageHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastMessageHandler.java
deleted file mode 100644
index e0e99592..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastMessageHandler.java
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.media.router.caf;
-
-/**
- * The handler for cast messages. It receives events between the Cast SDK and the page, process and
- * dispatch the messages accordingly. The handler talks to the Cast SDK via CastSession, and
- * talks to the pages via the media router.
- */
-public class CastMessageHandler {
-    // Sequence number used when no sequence number is required or was initially passed.
-    static final int INVALID_SEQUENCE_NUMBER = -1;
-}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastOptionsProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastOptionsProvider.java
deleted file mode 100644
index b805cc6..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastOptionsProvider.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.media.router.caf;
-
-import android.content.Context;
-
-import com.google.android.gms.cast.framework.CastOptions;
-import com.google.android.gms.cast.framework.OptionsProvider;
-import com.google.android.gms.cast.framework.SessionProvider;
-
-import java.util.List;
-
-/** {@link OptionsProvider} implementation for Chrome MR. */
-public class CastOptionsProvider implements OptionsProvider {
-    @Override
-    public CastOptions getCastOptions(Context context) {
-        return new CastOptions.Builder().setCastMediaOptions(null).build();
-    }
-
-    @Override
-    public List<SessionProvider> getAdditionalSessionProviders(Context context) {
-        return null;
-    }
-}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastSessionController.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastSessionController.java
deleted file mode 100644
index feab413..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastSessionController.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.media.router.caf;
-
-import com.google.android.gms.cast.framework.CastSession;
-
-import org.chromium.chrome.browser.media.router.ClientRecord;
-import org.chromium.chrome.browser.media.router.MediaSink;
-import org.chromium.chrome.browser.media.router.MediaSource;
-
-/**
- * A wrapper for {@link CastSession}, extending its functionality for Chrome MediaRouter.
- *
- * Has the same lifecycle with CastSession.
- */
-public class CastSessionController {
-    private static final String TAG = "CastSessionController";
-
-    private final CastSession mCastSession;
-    private final CafMediaRouteProvider mProvider;
-    private final MediaSink mSink;
-    private final MediaSource mSource;
-
-    public CastSessionController(CastSession castSession, CafMediaRouteProvider provider,
-            MediaSink sink, MediaSource source) {
-        mCastSession = castSession;
-        mProvider = provider;
-        mSink = sink;
-        mSource = source;
-    }
-
-    public MediaSource getSource() {
-        return mSource;
-    }
-
-    public MediaSink getSink() {
-        return mSink;
-    }
-
-    public CastSession getSession() {
-        return mCastSession;
-    }
-
-    public void onSessionStarted() {
-        for (ClientRecord client : mProvider.getClientRecords().values()) {
-            if (!client.isConnected) continue;
-
-            onClientConnected(client.clientId);
-        }
-        // TODO(zqzhang): register necessary listeners and attach to RemoteMediaClient.
-    }
-
-    public void onSessionEnded() {
-        // Not implemented.
-    }
-
-    public void endSession() {
-        CastSession currentCastSession =
-                CastUtils.getCastContext().getSessionManager().getCurrentCastSession();
-        if (currentCastSession == mCastSession) {
-            CastUtils.getCastContext().getSessionManager().endCurrentSession(true);
-        }
-    }
-
-    public void notifyReceiverAction(
-            String routeId, MediaSink sink, String clientId, String action) {
-        // Not implemented.
-    }
-
-    private void onClientConnected(String clientId) {
-        // Not implemented.
-    }
-}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastUtils.java
deleted file mode 100644
index 2469741..0000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/CastUtils.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.media.router.caf;
-
-import com.google.android.gms.cast.framework.CastContext;
-
-import org.chromium.base.ContextUtils;
-
-/** Utility methods for Cast. */
-public class CastUtils {
-    public static CastContext getCastContext() {
-        return CastContext.getSharedInstance(ContextUtils.getApplicationContext());
-    }
-}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/BaseMediaRouteProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/BaseMediaRouteProvider.java
index a38be7c..ce7871fb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/BaseMediaRouteProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/BaseMediaRouteProvider.java
@@ -164,7 +164,6 @@
         }
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     @Override
     public void createRoute(String sourceId, String sinkId, String presentationId, String origin,
             int tabId, boolean isIncognito, int nativeRequestId) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProvider.java
index ad23c44..64b1bff 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProvider.java
@@ -12,7 +12,6 @@
 import org.chromium.base.Log;
 import org.chromium.base.VisibleForTesting;
 import org.chromium.chrome.browser.media.router.ChromeMediaRouter;
-import org.chromium.chrome.browser.media.router.ClientRecord;
 import org.chromium.chrome.browser.media.router.MediaRoute;
 import org.chromium.chrome.browser.media.router.MediaRouteManager;
 import org.chromium.chrome.browser.media.router.MediaRouteProvider;
@@ -45,21 +44,18 @@
         return new CastMediaRouteProvider(ChromeMediaRouter.getAndroidMediaRouter(), manager);
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     @Override
     public void onSessionStartFailed() {
         super.onSessionStartFailed();
         mClientRecords.clear();
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     @Override
     public void onSessionStarted(CastSession session) {
         super.onSessionStarted(session);
         mMessageHandler.onSessionCreated(mSession);
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     @Override
     public void onSessionEnded() {
         if (mSession == null) return;
@@ -106,12 +102,10 @@
         return mMessageHandler;
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     public Set<String> getClients() {
         return mClientRecords.keySet();
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     public Map<String, ClientRecord> getClientRecords() {
         return mClientRecords;
     }
@@ -130,7 +124,6 @@
                 mMessageHandler);
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     @Override
     public void onSessionStarting(
             ChromeCastSessionManager.CastSessionLaunchRequest sessionLaunchRequest) {
@@ -153,7 +146,6 @@
         }
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     @Override
     public void joinRoute(String sourceId, String presentationId, String origin, int tabId,
             int nativeRequestId) {
@@ -178,7 +170,6 @@
         mManager.onRouteCreated(route.id, route.sinkId, nativeRequestId, this, false);
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     @Override
     public void closeRoute(String routeId) {
         MediaRoute route = mRoutes.get(routeId);
@@ -321,7 +312,6 @@
         mMessageHandler = new CastMessageHandler(this);
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     private boolean canAutoJoin(CastMediaSource source, String origin, int tabId) {
         if (source.getAutoJoinPolicy().equals(CastMediaSource.AUTOJOIN_PAGE_SCOPED)) return false;
 
@@ -348,7 +338,6 @@
         return false;
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     private boolean canJoinExistingSession(
             String presentationId, String origin, int tabId, CastMediaSource source) {
         if (AUTO_JOIN_PRESENTATION_ID.equals(presentationId)) {
@@ -364,7 +353,6 @@
         return false;
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     @Nullable
     private ClientRecord getClientRecordByRouteId(String routeId) {
         for (ClientRecord record : mClientRecords.values()) {
@@ -373,7 +361,6 @@
         return null;
     }
 
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     @VisibleForTesting
     void addRoute(MediaRoute route, String origin, int tabId) {
         mRoutes.put(route.id, route);
@@ -438,7 +425,6 @@
      * @param originB A URL origin.
      * @return True if originA and originB represent the same origin, false otherwise.
      */
-    // Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
     private static final boolean isSameOrigin(String originA, String originB) {
         if (originA == null || originA.isEmpty() || originB == null || originB.isEmpty())
             return false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandler.java
index 77c76fe4..c485f6c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandler.java
@@ -14,7 +14,6 @@
 
 import org.chromium.base.Log;
 import org.chromium.base.VisibleForTesting;
-import org.chromium.chrome.browser.media.router.ClientRecord;
 
 import java.util.ArrayDeque;
 import java.util.Arrays;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ClientRecord.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/ClientRecord.java
similarity index 82%
rename from chrome/android/java/src/org/chromium/chrome/browser/media/router/ClientRecord.java
rename to chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/ClientRecord.java
index 11cb8911..b3d43cf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ClientRecord.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/ClientRecord.java
@@ -2,7 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.browser.media.router;
+package org.chromium.chrome.browser.media.router.cast;
+
+import org.chromium.chrome.browser.media.router.MediaRoute;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -51,8 +53,13 @@
      */
     public List<String> pendingMessages = new ArrayList<String>();
 
-    public ClientRecord(String routeId, String clientId, String appId, String autoJoinPolicy,
-            String origin, int tabId) {
+    ClientRecord(
+            String routeId,
+            String clientId,
+            String appId,
+            String autoJoinPolicy,
+            String origin,
+            int tabId) {
         this.routeId = routeId;
         this.clientId = clientId;
         this.appId = appId;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CreateRouteRequest.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CreateRouteRequest.java
index c391f4633..9e485967 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CreateRouteRequest.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CreateRouteRequest.java
@@ -31,7 +31,6 @@
  * Since there're numerous asynchronous calls involved in getting the application to launch
  * the class is implemented as a state machine.
  */
-// Migrated to CafMediaRouteProvider. See https://crbug.com/711860.
 public class CreateRouteRequest implements GoogleApiClient.ConnectionCallbacks,
                                            GoogleApiClient.OnConnectionFailedListener,
                                            ResultCallback<Cast.ApplicationConnectionResult>,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java
index e04a4deb1..685feca 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java
@@ -17,7 +17,7 @@
 import org.chromium.chrome.browser.toolbar.Toolbar;
 import org.chromium.chrome.browser.toolbar.ToolbarActionModeCallback;
 import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
-import org.chromium.chrome.browser.widget.FadingBackgroundView;
+import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
 import org.chromium.ui.base.WindowAndroid;
 
@@ -198,5 +198,5 @@
     /**
      * @param scrim The scrim for this location bar to use.
      */
-    void setScrim(FadingBackgroundView scrim);
+    void setScrim(ScrimView scrim);
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
index 4b6ecbc..161be0a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -73,8 +73,8 @@
 import org.chromium.chrome.browser.util.ColorUtils;
 import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.chrome.browser.util.KeyNavigationUtil;
-import org.chromium.chrome.browser.widget.FadingBackgroundView;
-import org.chromium.chrome.browser.widget.FadingBackgroundView.ScrimParams;
+import org.chromium.chrome.browser.widget.ScrimView;
+import org.chromium.chrome.browser.widget.ScrimView.ScrimParams;
 import org.chromium.chrome.browser.widget.TintedDrawable;
 import org.chromium.chrome.browser.widget.TintedImageButton;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
@@ -94,10 +94,9 @@
  * This class represents the location bar where the user types in URLs and
  * search terms.
  */
-public class LocationBarLayout
-        extends FrameLayout implements OnClickListener, OnSuggestionsReceivedListener, LocationBar,
-                                       FakeboxDelegate, FadingBackgroundView.FadingViewObserver,
-                                       LocationBarVoiceRecognitionHandler.Delegate {
+public class LocationBarLayout extends FrameLayout
+        implements OnClickListener, OnSuggestionsReceivedListener, LocationBar, FakeboxDelegate,
+                   ScrimView.ScrimObserver, LocationBarVoiceRecognitionHandler.Delegate {
     private static final String TAG = "cr_LocationBar";
 
     // Delay triggering the omnibox results upon key press to allow the location bar to repaint
@@ -156,7 +155,7 @@
     private Runnable mRequestSuggestions;
 
     private ViewGroup mOmniboxResultsContainer;
-    private FadingBackgroundView mFadingView;
+    private ScrimView mScrim;
 
     private boolean mSuggestionsShown;
     private boolean mUrlHasFocus;
@@ -1997,28 +1996,28 @@
     }
 
     @Override
-    public void onFadingViewClick() {
+    public void onScrimClick() {
         setUrlBarFocus(false);
         updateFadingBackgroundView(false, false);
     }
 
     @Override
-    public void onFadingViewVisibilityChanged(boolean visible) {
+    public void onScrimVisibilityChanged(boolean visible) {
         Activity activity = mWindowAndroid.getActivity().get();
         if (!(activity instanceof ChromeActivity)) return;
         ChromeActivity chromeActivity = (ChromeActivity) activity;
 
         if (visible) {
-            chromeActivity.addViewObscuringAllTabs(mFadingView);
+            chromeActivity.addViewObscuringAllTabs(mScrim);
         } else {
-            chromeActivity.removeViewObscuringAllTabs(mFadingView);
+            chromeActivity.removeViewObscuringAllTabs(mScrim);
             updateOmniboxResultsContainerVisibility(false);
         }
     }
 
     @Override
-    public void setScrim(FadingBackgroundView scrim) {
-        mFadingView = scrim;
+    public void setScrim(ScrimView scrim) {
+        mScrim = scrim;
 
         // In some cases, users can start chrome and immediately start tapping the omnibox. In that
         // case, the omnibox will focus, but there is no scrim. This checks if the scrim needs to
@@ -2034,16 +2033,16 @@
      *                        scrim.
      */
     protected void updateFadingBackgroundView(boolean visible, boolean ignoreNtpChecks) {
-        if (mFadingView == null) return;
+        if (mScrim == null) return;
         NewTabPage ntp = mToolbarDataProvider.getNewTabPageForCurrentTab();
         boolean locationBarShownInNTP = ntp != null && ntp.isLocationBarShownInNTP();
 
         if (visible && (!locationBarShownInNTP || ignoreNtpChecks)) {
             // If the location bar is shown in the NTP, the toolbar will eventually trigger a
             // fade in.
-            mFadingView.showFadingOverlay(mScrimParams);
+            mScrim.showScrim(mScrimParams);
         } else {
-            mFadingView.hideFadingOverlay(!locationBarShownInNTP);
+            mScrim.hideScrim(!locationBarShownInNTP);
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarCoordinator.java
index 765028f..2cae79a9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarCoordinator.java
@@ -13,13 +13,13 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
 import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
+import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager;
 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
 import org.chromium.chrome.browser.modelutil.PropertyKey;
 import org.chromium.chrome.browser.modelutil.PropertyModelChangeProcessor;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.toolbar.BottomToolbarViewBinder.ViewHolder;
 import org.chromium.ui.resources.ResourceManager;
-import org.chromium.ui.resources.dynamics.ViewResourceAdapter;
 
 /**
  * The coordinator for the bottom toolbar. This class handles all interactions that the bottom
@@ -34,12 +34,6 @@
     /** The tab switcher button component that lives in the bottom toolbar. */
     private final TabSwitcherButtonCoordinator mTabSwitcherButtonCoordinator;
 
-    /** The resource ID used to reference the view bitmap in native. */
-    private final int mResourceId;
-
-    /** The resource adapter for the composited bottom toolbar view. */
-    private final ViewResourceAdapter mViewResourceAdapter;
-
     /**
      * Build the coordinator that manages the bottom toolbar.
      * @param fullscreenManager A {@link ChromeFullscreenManager} to update the bottom controls
@@ -59,9 +53,6 @@
                 (ScrollingBottomViewResourceFrameLayout) inflatedView;
         toolbarRoot.setTopShadowHeight(shadowHeight);
 
-        mResourceId = toolbarRoot.getId();
-        mViewResourceAdapter = toolbarRoot.getResourceAdapter();
-
         PropertyModelChangeProcessor<BottomToolbarModel, ViewHolder, PropertyKey> processor =
                 new PropertyModelChangeProcessor<>(
                         model, new ViewHolder(toolbarRoot), new BottomToolbarViewBinder());
@@ -87,22 +78,24 @@
      * @param tabModelSelector A {@link TabModelSelector} that the tab switcher button uses to
      *                         keep its tab count updated.
      * @param overviewModeBehavior The overview mode manager.
+     * @param contextualSearchManager The manager for Contextual Search to handle interactions when
+     *                                that feature is visible.
      */
     public void initializeWithNative(ResourceManager resourceManager, LayoutManager layoutManager,
             OnClickListener tabSwitcherListener, OnClickListener searchAcceleratorListener,
             OnClickListener homeButtonListener, OnTouchListener menuButtonListener,
-            TabModelSelector tabModelSelector, OverviewModeBehavior overviewModeBehavior) {
+            TabModelSelector tabModelSelector, OverviewModeBehavior overviewModeBehavior,
+            ContextualSearchManager contextualSearchManager) {
         mMediator.setButtonListeners(
                 searchAcceleratorListener, homeButtonListener, menuButtonListener);
         mMediator.setLayoutManager(layoutManager);
+        mMediator.setResourceManager(resourceManager);
         mMediator.setOverviewModeBehavior(overviewModeBehavior);
         mMediator.setToolbarSwipeHandler(layoutManager.getToolbarSwipeHandler());
+        mMediator.setContextualSearchManager(contextualSearchManager);
 
         mTabSwitcherButtonCoordinator.setTabSwitcherListener(tabSwitcherListener);
         mTabSwitcherButtonCoordinator.setTabModelSelector(tabModelSelector);
-
-        resourceManager.getDynamicResourceLoader().registerResource(
-                mResourceId, mViewResourceAdapter);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarMediator.java
index f367dd18..6eca361 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarMediator.java
@@ -13,15 +13,22 @@
 import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior.OverviewModeObserver;
 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler;
+import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager;
+import org.chromium.chrome.browser.contextualsearch.ContextualSearchObserver;
 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager.FullscreenListener;
+import org.chromium.chrome.browser.gsa.GSAContextDisplaySelection;
+import org.chromium.ui.resources.ResourceManager;
+
+import javax.annotation.Nullable;
 
 /**
  * This class is responsible for reacting to events from the outside world, interacting with other
  * coordinators, running most of the business logic associated with the bottom toolbar, and updating
  * the model accordingly.
  */
-class BottomToolbarMediator implements FullscreenListener, OverviewModeObserver {
+class BottomToolbarMediator
+        implements FullscreenListener, OverviewModeObserver, ContextualSearchObserver {
     /** The model for the bottom toolbar that holds all of its state. */
     private BottomToolbarModel mModel;
 
@@ -31,6 +38,9 @@
     /** The overview mode manager. */
     private OverviewModeBehavior mOverviewModeBehavior;
 
+    /** The manager for Contextual Search to observe appearance/disappearance of the feature. */
+    private ContextualSearchManager mContextualSearchManger;
+
     /**
      * Build a new mediator that handles events from outside the bottom toolbar.
      * @param model The {@link BottomToolbarModel} that holds all the state for the bottom toolbar.
@@ -63,6 +73,7 @@
     public void destroy() {
         mFullscreenManager.removeListener(this);
         mOverviewModeBehavior.removeOverviewModeObserver(this);
+        if (mContextualSearchManger != null) mContextualSearchManger.removeObserver(this);
     }
 
     @Override
@@ -100,6 +111,19 @@
     @Override
     public void onOverviewModeFinishedHiding() {}
 
+    @Override
+    public void onShowContextualSearch(@Nullable GSAContextDisplaySelection selectionContext) {
+        mModel.setValue(BottomToolbarModel.ANDROID_VIEW_VISIBLE, false);
+    }
+
+    @Override
+    public void onHideContextualSearch() {
+        // If the scroll offset for the toolbar is non-zero, it needs to remain hidden after
+        // contextual search is hidden.
+        if (mModel.getValue(BottomToolbarModel.Y_OFFSET) != 0) return;
+        mModel.setValue(BottomToolbarModel.ANDROID_VIEW_VISIBLE, true);
+    }
+
     public void setButtonListeners(OnClickListener searchAcceleratorListener,
             OnClickListener homeButtonListener, OnTouchListener menuButtonListener) {
         mModel.setValue(BottomToolbarModel.SEARCH_ACCELERATOR_LISTENER, searchAcceleratorListener);
@@ -111,6 +135,10 @@
         mModel.setValue(BottomToolbarModel.LAYOUT_MANAGER, layoutManager);
     }
 
+    public void setResourceManager(ResourceManager resourceManager) {
+        mModel.setValue(BottomToolbarModel.RESOURCE_MANAGER, resourceManager);
+    }
+
     public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) {
         mOverviewModeBehavior = overviewModeBehavior;
         mOverviewModeBehavior.addOverviewModeObserver(this);
@@ -123,4 +151,10 @@
     public boolean isShowingAppMenuUpdateBadge() {
         return mModel.getValue(BottomToolbarModel.UPDATE_BADGE_VISIBLE);
     }
+
+    public void setContextualSearchManager(ContextualSearchManager contextualSearchManager) {
+        mContextualSearchManger = contextualSearchManager;
+        if (mContextualSearchManger == null) return;
+        mContextualSearchManger.addObserver(this);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarModel.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarModel.java
index 8be93b3..972dfc0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarModel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarModel.java
@@ -10,6 +10,7 @@
 import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler;
 import org.chromium.chrome.browser.modelutil.PropertyModel;
+import org.chromium.ui.resources.ResourceManager;
 
 /**
  * All of the state for the bottom toolbar, updated by the {@link BottomToolbarCoordinator}.
@@ -36,6 +37,10 @@
     /** A {@link LayoutManager} to attach overlays to. */
     public static final ObjectPropertyKey<LayoutManager> LAYOUT_MANAGER = new ObjectPropertyKey<>();
 
+    /** A {@link ResourceManager} for loading textures into the compositor. */
+    public static final ObjectPropertyKey<ResourceManager> RESOURCE_MANAGER =
+            new ObjectPropertyKey<>();
+
     /** Whether or not the search accelerator is visible. */
     public static final BooleanPropertyKey SEARCH_ACCELERATOR_VISIBLE = new BooleanPropertyKey();
 
@@ -49,7 +54,7 @@
     /** Default constructor. */
     public BottomToolbarModel() {
         super(Y_OFFSET, ANDROID_VIEW_VISIBLE, SEARCH_ACCELERATOR_LISTENER, HOME_BUTTON_LISTENER,
-                MENU_BUTTON_LISTENER, LAYOUT_MANAGER, SEARCH_ACCELERATOR_VISIBLE,
+                MENU_BUTTON_LISTENER, LAYOUT_MANAGER, RESOURCE_MANAGER, SEARCH_ACCELERATOR_VISIBLE,
                 UPDATE_BADGE_VISIBLE, TOOLBAR_SWIPE_HANDLER);
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarViewBinder.java
index 9b36d64..7e44473b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarViewBinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarViewBinder.java
@@ -67,6 +67,11 @@
                     view.toolbarRoot, view.toolbarRoot.getTopShadowHeight());
             model.getValue(BottomToolbarModel.LAYOUT_MANAGER)
                     .addSceneOverlayToBack(view.sceneLayer);
+        } else if (BottomToolbarModel.RESOURCE_MANAGER == propertyKey) {
+            model.getValue(BottomToolbarModel.RESOURCE_MANAGER)
+                    .getDynamicResourceLoader()
+                    .registerResource(
+                            view.toolbarRoot.getId(), view.toolbarRoot.getResourceAdapter());
         } else if (BottomToolbarModel.HOME_BUTTON_LISTENER == propertyKey) {
             view.toolbarRoot.findViewById(R.id.home_button)
                     .setOnClickListener(model.getValue(BottomToolbarModel.HOME_BUTTON_LISTENER));
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java
index 3c63a03..d566cbe 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java
@@ -54,7 +54,7 @@
 import org.chromium.chrome.browser.util.AccessibilityUtil;
 import org.chromium.chrome.browser.util.ColorUtils;
 import org.chromium.chrome.browser.util.FeatureUtilities;
-import org.chromium.chrome.browser.widget.FadingBackgroundView;
+import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.browser.widget.TintedDrawable;
 import org.chromium.chrome.browser.widget.TintedImageButton;
 import org.chromium.components.url_formatter.UrlFormatter;
@@ -823,5 +823,5 @@
     }
 
     @Override
-    public void setScrim(FadingBackgroundView scrim) {}
+    public void setScrim(ScrimView scrim) {}
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar.java
index 57e8636..1c2b8b2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar.java
@@ -8,7 +8,7 @@
 import android.view.View;
 
 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
-import org.chromium.chrome.browser.widget.FadingBackgroundView;
+import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
 
 /**
@@ -116,5 +116,5 @@
     /**
      * @param scrim The scrim for this location bar to use.
      */
-    void setScrim(FadingBackgroundView scrim);
+    void setScrim(ScrimView scrim);
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java
index d47ad86f2..296abe43 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java
@@ -40,8 +40,8 @@
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.util.ViewUtils;
-import org.chromium.chrome.browser.widget.FadingBackgroundView;
 import org.chromium.chrome.browser.widget.PulseDrawable;
+import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.browser.widget.TintedImageButton;
 import org.chromium.chrome.browser.widget.ToolbarProgressBar;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
@@ -981,7 +981,7 @@
     }
 
     @Override
-    public void setScrim(FadingBackgroundView scrim) {
+    public void setScrim(ScrimView scrim) {
         getLocationBar().setScrim(scrim);
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index 51323914..d5af258 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -714,7 +714,8 @@
                     mActivity.getCompositorViewHolder().getResourceManager(),
                     mActivity.getCompositorViewHolder().getLayoutManager(), tabSwitcherClickHandler,
                     searchAcceleratorListener, homeButtonListener, mAppMenuButtonHelper,
-                    mTabModelSelector, mOverviewModeBehavior);
+                    mTabModelSelector, mOverviewModeBehavior,
+                    mActivity.getContextualSearchManager());
         }
 
         onNativeLibraryReady();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActionsNotificationManager.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActionsNotificationManager.java
index 43b4e990..969768b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActionsNotificationManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActionsNotificationManager.java
@@ -66,18 +66,26 @@
     }
 
     private Notification createNotification() {
+        int intentFlags = WebappLauncherActivity.getWebappActivityIntentFlags();
+        int pendingIntentFlags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT;
+
         PendingIntent focusIntent = PendingIntent.getActivity(mWebappActivity, 0,
-                new Intent(mWebappActivity, mWebappActivity.getClass()).setAction(ACTION_FOCUS),
-                PendingIntent.FLAG_UPDATE_CURRENT);
+                new Intent(mWebappActivity, mWebappActivity.getClass())
+                        .setAction(ACTION_FOCUS)
+                        .setFlags(intentFlags),
+                pendingIntentFlags);
 
         PendingIntent openInChromeIntent = PendingIntent.getActivity(mWebappActivity, 0,
                 new Intent(mWebappActivity, mWebappActivity.getClass())
-                        .setAction(ACTION_OPEN_IN_CHROME),
-                PendingIntent.FLAG_UPDATE_CURRENT);
+                        .setAction(ACTION_OPEN_IN_CHROME)
+                        .setFlags(intentFlags),
+                pendingIntentFlags);
 
         PendingIntent shareIntent = PendingIntent.getActivity(mWebappActivity, 0,
-                new Intent(mWebappActivity, mWebappActivity.getClass()).setAction(ACTION_SHARE),
-                PendingIntent.FLAG_UPDATE_CURRENT);
+                new Intent(mWebappActivity, mWebappActivity.getClass())
+                        .setAction(ACTION_SHARE)
+                        .setFlags(intentFlags),
+                pendingIntentFlags);
 
         return NotificationBuilderFactory
                 .createChromeNotificationBuilder(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java
index a66cd0f..42232bc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java
@@ -212,6 +212,14 @@
         // Activity.
         launchIntent.setAction(Intent.ACTION_VIEW);
         launchIntent.setData(Uri.parse(WebappActivity.WEBAPP_SCHEME + "://" + info.id()));
+        launchIntent.setFlags(getWebappActivityIntentFlags());
+        return launchIntent;
+    }
+
+    /**
+     * Returns the set of Intent flags required to correctly launch a WebappActivity.
+     */
+    public static int getWebappActivityIntentFlags() {
         // Setting FLAG_ACTIVITY_CLEAR_TOP handles 2 edge cases:
         // - If a legacy PWA is launching from a notification, we want to ensure that the URL being
         // launched is the URL in the intent. If a paused WebappActivity exists for this id,
@@ -222,10 +230,14 @@
         // clicks a link to takes them back to the scope of a WebAPK, we want to destroy the
         // CustomTabActivity activity and go back to the WebAPK activity. It is intentional that
         // Custom Tab will not be reachable with a back button.
-        launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+
+        // In addition FLAG_ACTIVITY_NEW_DOCUMENT is required otherwise on Samsung Lollipop devices
+        // an Intent to an existing top Activity (such as sent from the Webapp Actions Notification)
+        // will trigger a new WebappActivity to be launched and onCreate called instead of
+        // onNewIntent of the existing WebappActivity being called.
+        return Intent.FLAG_ACTIVITY_NEW_TASK
                 | ApiCompatibilityUtils.getActivityNewDocumentFlag()
-                | Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        return launchIntent;
+                | Intent.FLAG_ACTIVITY_CLEAR_TOP;
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/FadingBackgroundView.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/ScrimView.java
similarity index 87%
rename from chrome/android/java/src/org/chromium/chrome/browser/widget/FadingBackgroundView.java
rename to chrome/android/java/src/org/chromium/chrome/browser/widget/ScrimView.java
index 6311a89..291e0ce6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/FadingBackgroundView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/ScrimView.java
@@ -27,12 +27,12 @@
  *
  * If the view is disabled, then its alpha will be set to 0f and it will not receive touch events.
  *
- * To use the scrim, {@link #showFadingOverlay(ScrimParams)} must be called to set the params for
- * how the scrimm will behave. After that, users can either allow the default animation to run or
+ * To use the scrim, {@link #showScrim(ScrimParams)} must be called to set the params for
+ * how the scrim will behave. After that, users can either allow the default animation to run or
  * change the view's alpha manually using {@link #setViewAlpha(float)}. Once the scrim is done being
- * used, {@link #hideFadingOverlay(boolean)} should be called.
+ * used, {@link #hideScrim(boolean)} should be called.
  */
-public class FadingBackgroundView extends View implements View.OnClickListener {
+public class ScrimView extends View implements View.OnClickListener {
     /** Params that define the behavior of the scrim for a single user. */
     public static class ScrimParams {
         /**
@@ -51,7 +51,7 @@
         public final boolean showInFrontOfAnchorView;
 
         /** An observer for visibility and input related events. */
-        public final FadingViewObserver observer;
+        public final ScrimObserver observer;
 
         /**
          * Build a new set of params to control the scrim.
@@ -63,7 +63,7 @@
          * @param observer n observer for visibility and input related events.
          */
         public ScrimParams(View anchorView, boolean showInFrontOfAnchorView,
-                boolean affectsStatusBar, int topMargin, FadingViewObserver observer) {
+                boolean affectsStatusBar, int topMargin, ScrimObserver observer) {
             this.topMargin = topMargin;
             this.affectsStatusBar = affectsStatusBar;
             this.anchorView = anchorView;
@@ -89,18 +89,18 @@
     /**
      * An interface for listening to events on the fading view.
      */
-    public interface FadingViewObserver {
+    public interface ScrimObserver {
         /**
          * An event that triggers when the view is clicked.
          */
-        void onFadingViewClick();
+        void onScrimClick();
 
         /**
          * An event that triggers when the visibility of the overlay has changed. Visibility is true
          * if the overlay's opacity is > 0f.
          * @param visible True if the overlay has become visible.
          */
-        void onFadingViewVisibilityChanged(boolean visible);
+        void onScrimVisibilityChanged(boolean visible);
     }
 
     /** The duration for the fading animation. */
@@ -129,7 +129,7 @@
      * @param scrimDelegate A means of changing the scrim over the status bar.
      * @param parent The {@link ViewGroup} the scrim should exist in.
      */
-    public FadingBackgroundView(
+    public ScrimView(
             Context context, @Nullable StatusBarScrimDelegate scrimDelegate, ViewGroup parent) {
         super(context);
         mStatusBarScrimDelegate = scrimDelegate;
@@ -170,7 +170,7 @@
      * @param alpha The desired alpha for this view.
      */
     public void setViewAlpha(float alpha) {
-        assert mActiveParams != null : "#showFadingOverlay must be called before setting alpha!";
+        assert mActiveParams != null : "#showScrim must be called before setting alpha!";
 
         if (!isEnabled() || MathUtils.areFloatsEqual(alpha, getAlpha())) return;
 
@@ -221,26 +221,25 @@
     /**
      * Triggers a fade in of the omnibox results background creating a new animation if necessary.
      */
-    public void showFadingOverlay(ScrimParams params) {
+    public void showScrim(ScrimParams params) {
         onParamsChanged(params);
         setVisibility(View.VISIBLE);
         if (mActiveParams.observer != null) {
-            mActiveParams.observer.onFadingViewVisibilityChanged(true);
+            mActiveParams.observer.onScrimVisibilityChanged(true);
         }
         if (mOverlayFadeInAnimator == null) {
             mOverlayFadeInAnimator = ObjectAnimator.ofFloat(this, ALPHA, 1f);
             mOverlayFadeInAnimator.setDuration(FADE_DURATION_MS);
-            mOverlayFadeInAnimator.setInterpolator(
-                    BakedBezierInterpolator.FADE_IN_CURVE);
+            mOverlayFadeInAnimator.setInterpolator(BakedBezierInterpolator.FADE_IN_CURVE);
         }
 
-        runFadeOverlayAnimation(mOverlayFadeInAnimator);
+        runFadeAnimation(mOverlayFadeInAnimator);
     }
 
     /**
      * Triggers a fade out of the omnibox results background creating a new animation if necessary.
      */
-    public void hideFadingOverlay(boolean fadeOut) {
+    public void hideScrim(boolean fadeOut) {
         if (mOverlayFadeOutAnimator == null) {
             mOverlayFadeOutAnimator = ObjectAnimator.ofFloat(this, ALPHA, 0f);
             mOverlayFadeOutAnimator.setDuration(FADE_DURATION_MS);
@@ -250,7 +249,7 @@
                 public void onAnimationEnd(Animator animation) {
                     setVisibility(View.GONE);
                     if (mActiveParams != null && mActiveParams.observer != null) {
-                        mActiveParams.observer.onFadingViewVisibilityChanged(false);
+                        mActiveParams.observer.onScrimVisibilityChanged(false);
                     }
                     onParamsChanged(null);
                 }
@@ -258,7 +257,7 @@
         }
 
         mOverlayFadeOutAnimator.setFloatValues(getAlpha(), 0f);
-        runFadeOverlayAnimation(mOverlayFadeOutAnimator);
+        runFadeAnimation(mOverlayFadeOutAnimator);
         if (!fadeOut) mOverlayFadeOutAnimator.end();
     }
 
@@ -266,7 +265,7 @@
      * Runs an animation for this view. If one is running, the existing one will be canceled.
      * @param fadeAnimation The animation to run.
      */
-    private void runFadeOverlayAnimation(Animator fadeAnimation) {
+    private void runFadeAnimation(Animator fadeAnimation) {
         if (mOverlayAnimator == fadeAnimation && mOverlayAnimator.isRunning()) {
             return;
         } else if (mOverlayAnimator != null) {
@@ -279,6 +278,6 @@
     @Override
     public void onClick(View view) {
         if (mActiveParams == null || mActiveParams.observer == null) return;
-        mActiveParams.observer.onFadingViewClick();
+        mActiveParams.observer.onScrimClick();
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetController.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetController.java
index db99a31d..ce04b36 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetController.java
@@ -26,9 +26,9 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
-import org.chromium.chrome.browser.widget.FadingBackgroundView;
-import org.chromium.chrome.browser.widget.FadingBackgroundView.FadingViewObserver;
-import org.chromium.chrome.browser.widget.FadingBackgroundView.ScrimParams;
+import org.chromium.chrome.browser.widget.ScrimView;
+import org.chromium.chrome.browser.widget.ScrimView.ScrimObserver;
+import org.chromium.chrome.browser.widget.ScrimView.ScrimParams;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.BottomSheetContent;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.StateChangeReason;
 
@@ -82,12 +82,12 @@
      * Build a new controller of the bottom sheet.
      * @param tabModelSelector A tab model selector to track events on tabs open in the browser.
      * @param layoutManager A layout manager for detecting changes in the active layout.
-     * @param fadingBackgroundView The scrim that shows when the bottom sheet is opened.
+     * @param scrim The scrim that shows when the bottom sheet is opened.
      * @param contextualSearchManager The manager for Contextual Search to attach listeners to.
      * @param bottomSheet The bottom sheet that this class will be controlling.
      */
     public BottomSheetController(final Activity activity, final TabModelSelector tabModelSelector,
-            final LayoutManager layoutManager, final FadingBackgroundView fadingBackgroundView,
+            final LayoutManager layoutManager, final ScrimView scrim,
             ContextualSearchManager contextualSearchManager, BottomSheet bottomSheet) {
         mBottomSheet = bottomSheet;
         mLayoutManager = layoutManager;
@@ -160,36 +160,36 @@
             }
         });
 
-        FadingViewObserver scrimObserver = new FadingViewObserver() {
+        ScrimObserver scrimObserver = new ScrimObserver() {
             @Override
-            public void onFadingViewClick() {
+            public void onScrimClick() {
                 if (!mBottomSheet.isSheetOpen()) return;
                 mBottomSheet.setSheetState(
                         BottomSheet.SHEET_STATE_PEEK, true, StateChangeReason.TAP_SCRIM);
             }
 
             @Override
-            public void onFadingViewVisibilityChanged(boolean visible) {}
+            public void onScrimVisibilityChanged(boolean visible) {}
         };
         mScrimParams = new ScrimParams(mBottomSheet, false, true, 0, scrimObserver);
 
         mBottomSheet.addObserver(new EmptyBottomSheetObserver() {
             @Override
             public void onSheetOpened(@StateChangeReason int reason) {
-                fadingBackgroundView.showFadingOverlay(mScrimParams);
-                fadingBackgroundView.setViewAlpha(0);
+                scrim.showScrim(mScrimParams);
+                scrim.setViewAlpha(0);
             }
 
             @Override
             public void onSheetClosed(@StateChangeReason int reason) {
-                fadingBackgroundView.hideFadingOverlay(false);
+                scrim.hideScrim(false);
             }
 
             @Override
             public void onTransitionPeekToHalf(float transitionFraction) {
                 // TODO(mdjones): This event should not occur after the bottom sheet is closed.
-                if (fadingBackgroundView.getVisibility() == View.VISIBLE) {
-                    fadingBackgroundView.setViewAlpha(transitionFraction);
+                if (scrim.getVisibility() == View.VISIBLE) {
+                    scrim.setViewAlpha(transitionFraction);
                 }
             }
 
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index dab545c..10c2828 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -704,7 +704,6 @@
   "java/src/org/chromium/chrome/browser/media/remote/RemoteVideoInfo.java",
   "java/src/org/chromium/chrome/browser/media/remote/PositionExtrapolator.java",
   "java/src/org/chromium/chrome/browser/media/router/BaseMediaRouteDialogManager.java",
-  "java/src/org/chromium/chrome/browser/media/router/ClientRecord.java",
   "java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java",
   "java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterDialogController.java",
   "java/src/org/chromium/chrome/browser/media/router/DiscoveryCallback.java",
@@ -720,11 +719,7 @@
   "java/src/org/chromium/chrome/browser/media/router/MediaRouteProvider.java",
   "java/src/org/chromium/chrome/browser/media/router/MediaSource.java",
   "java/src/org/chromium/chrome/browser/media/router/MediaSink.java",
-  "java/src/org/chromium/chrome/browser/media/router/caf/CastOptionsProvider.java",
-  "java/src/org/chromium/chrome/browser/media/router/caf/CastSessionController.java",
-  "java/src/org/chromium/chrome/browser/media/router/caf/CastUtils.java",
   "java/src/org/chromium/chrome/browser/media/router/caf/CafMediaRouteProvider.java",
-  "java/src/org/chromium/chrome/browser/media/router/caf/CastMessageHandler.java",
   "java/src/org/chromium/chrome/browser/media/router/cast/BaseMediaRouteProvider.java",
   "java/src/org/chromium/chrome/browser/media/router/cast/CastMediaRouteProvider.java",
   "java/src/org/chromium/chrome/browser/media/router/cast/CastMediaSource.java",
@@ -735,6 +730,7 @@
   "java/src/org/chromium/chrome/browser/media/router/cast/CastSessionInfo.java",
   "java/src/org/chromium/chrome/browser/media/router/cast/CastSessionUtil.java",
   "java/src/org/chromium/chrome/browser/media/router/cast/ChromeCastSessionManager.java",
+  "java/src/org/chromium/chrome/browser/media/router/cast/ClientRecord.java",
   "java/src/org/chromium/chrome/browser/media/router/cast/CreateRouteRequest.java",
   "java/src/org/chromium/chrome/browser/media/router/cast/remoting/RemotingCastSession.java",
   "java/src/org/chromium/chrome/browser/media/router/cast/remoting/RemotingMediaRouteProvider.java",
@@ -1498,7 +1494,6 @@
   "java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java",
   "java/src/org/chromium/chrome/browser/widget/DualControlLayout.java",
   "java/src/org/chromium/chrome/browser/widget/EmptyAlertEditText.java",
-  "java/src/org/chromium/chrome/browser/widget/FadingBackgroundView.java",
   "java/src/org/chromium/chrome/browser/widget/FadingEdgeScrollView.java",
   "java/src/org/chromium/chrome/browser/widget/FadingShadow.java",
   "java/src/org/chromium/chrome/browser/widget/FadingShadowView.java",
@@ -1518,6 +1513,7 @@
   "java/src/org/chromium/chrome/browser/widget/RadioButtonLayout.java",
   "java/src/org/chromium/chrome/browser/widget/RadioButtonWithDescription.java",
   "java/src/org/chromium/chrome/browser/widget/RoundedIconGenerator.java",
+  "java/src/org/chromium/chrome/browser/widget/ScrimView.java",
   "java/src/org/chromium/chrome/browser/widget/TextViewWithCompoundDrawables.java",
   "java/src/org/chromium/chrome/browser/widget/ThumbnailDiskStorage.java",
   "java/src/org/chromium/chrome/browser/widget/ThumbnailGenerator.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ScrimTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ScrimTest.java
index 5427ebe..86b2eaa 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ScrimTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ScrimTest.java
@@ -28,8 +28,8 @@
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.omnibox.UrlBar;
 import org.chromium.chrome.browser.util.MathUtils;
-import org.chromium.chrome.browser.widget.FadingBackgroundView.FadingViewObserver;
-import org.chromium.chrome.browser.widget.FadingBackgroundView.ScrimParams;
+import org.chromium.chrome.browser.widget.ScrimView.ScrimObserver;
+import org.chromium.chrome.browser.widget.ScrimView.ScrimParams;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
@@ -52,7 +52,7 @@
 
     private BottomSheet mBottomSheet;
     private BottomSheetController mSheetController;
-    private FadingBackgroundView mScrim;
+    private ScrimView mScrim;
 
     @Before
     public void setUp() throws Exception {
@@ -67,7 +67,7 @@
                                    .findViewById(org.chromium.chrome.R.id.bottom_sheet);
             mBottomSheet.init(coordinator, activity);
 
-            mScrim = activity.getFadingBackgroundView();
+            mScrim = activity.getScrim();
 
             mSheetController = new BottomSheetController(activity, activity.getTabModelSelector(),
                     activity.getCompositorViewHolder().getLayoutManager(), mScrim,
@@ -80,12 +80,12 @@
     @Feature({"Scrim"})
     public void testScrimVisibility() throws InterruptedException, TimeoutException {
         CallbackHelper visibilityHelper = new CallbackHelper();
-        FadingViewObserver observer = new FadingViewObserver() {
+        ScrimObserver observer = new ScrimObserver() {
             @Override
-            public void onFadingViewClick() {}
+            public void onScrimClick() {}
 
             @Override
-            public void onFadingViewVisibilityChanged(boolean visible) {
+            public void onScrimVisibilityChanged(boolean visible) {
                 visibilityHelper.notifyCalled();
             }
         };
@@ -96,7 +96,7 @@
 
         int callCount = visibilityHelper.getCallCount();
         ThreadUtils.runOnUiThreadBlocking(() -> {
-            mScrim.showFadingOverlay(params);
+            mScrim.showScrim(params);
             // Skip the animation and set the scrim opacity to 50%.
             mScrim.setViewAlpha(0.5f);
         });
@@ -104,7 +104,7 @@
         assertScrimVisibility(true);
 
         callCount = visibilityHelper.getCallCount();
-        ThreadUtils.runOnUiThreadBlocking(() -> mScrim.hideFadingOverlay(false));
+        ThreadUtils.runOnUiThreadBlocking(() -> mScrim.hideScrim(false));
         visibilityHelper.waitForCallback(callCount, 1);
         assertScrimVisibility(false);
     }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetControllerTest.java
index 9fa8dce..7d677df 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetControllerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetControllerTest.java
@@ -28,7 +28,7 @@
 import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
 import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
-import org.chromium.chrome.browser.widget.FadingBackgroundView;
+import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.BottomSheetContent;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.ContentPriority;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
@@ -69,8 +69,7 @@
                                    .findViewById(org.chromium.chrome.R.id.bottom_sheet);
             mBottomSheet.init(coordinator, activity);
 
-            FadingBackgroundView scrim =
-                    new FadingBackgroundView(mActivityTestRule.getActivity(), null, coordinator);
+            ScrimView scrim = new ScrimView(mActivityTestRule.getActivity(), null, coordinator);
 
             mSheetController = new BottomSheetController(activity, activity.getTabModelSelector(),
                     activity.getCompositorViewHolder().getLayoutManager(), scrim,
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandlerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandlerTest.java
index b2f92d9..0a89394 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandlerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/media/router/cast/CastMessageHandlerTest.java
@@ -35,7 +35,6 @@
 
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.Feature;
-import org.chromium.chrome.browser.media.router.ClientRecord;
 import org.chromium.chrome.browser.media.router.cast.CastMessageHandler.RequestRecord;
 import org.chromium.chrome.browser.media.router.cast.JSONTestUtils.JSONObjectLike;
 import org.chromium.chrome.browser.media.router.cast.JSONTestUtils.JSONStringLike;
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index c17faeb2..2d23967 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -612,6 +612,10 @@
   <message name="IDS_SETTINGS_AUTOFILL" desc="Name for the autofill section and toggle.">
     Autofill settings
   </message>
+  <!-- TODO(https://crbug.com/854562): Rename this to "IDS_SETTINGS_AUTOFILL" once Autofill Home is fully launched. -->
+  <message name="IDS_SETTINGS_AUTOFILL_AUTOFILL_HOME" desc="Name for the addresses and payment methods section used for Autofill Home.">
+    Addresses &amp; Payment methods
+  </message>
   <message name="IDS_SETTINGS_GOOGLE_PAYMENTS" desc="Label used to differentiate when an address or credit card entry comes from Google Pay. This should follow the casing of the 'Google Pay' brand. 'Google Pay' should not be translated as it is the product name.">
     Google Pay
   </message>
@@ -636,9 +640,13 @@
   <message name="IDS_SETTINGS_AUTOFILL_ADDRESSES_EMAIL" desc="This is the label for the field that lets a user modify the email address that will be used when auto-filling forms on the web.">
     Email
   </message>
+  <!-- TODO(https://crbug.com/854562): Remove this string (and use "IDS_SETTINGS_AUTOFILL_PAYMENT_METHODS" instead) once Autofill Home is fully launched. -->
   <message name="IDS_SETTINGS_AUTOFILL_CREDIT_CARD_HEADING" desc="Title for the list of saved passwords that can be used to fill in forms.">
     Credit cards
   </message>
+  <message name="IDS_SETTINGS_AUTOFILL_PAYMENT_METHODS" desc="Title for the list of saved payment methods that can be used to fill in forms.">
+    Payment methods
+  </message>
   <message name="IDS_SETTINGS_AUTOFILL_CREDIT_CARD_TYPE_COLUMN_LABEL" desc="Label for the column containing the type of credit card that is saved. The type is in the format: `Visa ****1234`.">
     Type
   </message>
@@ -681,6 +689,10 @@
   <message name="IDS_SETTINGS_PASSWORDS" desc="Name for the password section and toggle">
     Manage passwords
   </message>
+  <!-- TODO(https://crbug.com/854562): Rename this to "IDS_SETTINGS_PASSWORDS" once Autofill Home is fully launched. -->
+  <message name="IDS_SETTINGS_PASSWORDS_AUTOFILL_HOME" desc="Name for the password section and settings entry used for Autofill Home.">
+    Passwords
+  </message>
   <message name="IDS_SETTINGS_PASSWORDS_SAVE_PASSWORDS_TOGGLE_LABEL" desc="Label for a toggle that allows users to be prompted if they want to save their passwords when logging into webpages.">
     Offer to save passwords
   </message>
@@ -732,12 +744,20 @@
   <message name="IDS_SETTINGS_ADDRESS_NONE" desc="Placeholder that is shown when there are no addresses in the list of saved addresses.">
     Saved addresses will appear here
   </message>
+  <!-- TODO(https://crbug.com/854562): Remove this string (and use "IDS_SETTINGS_PAYMENT_METHODS_NONE" instead) once Autofill Home is fully launched. -->
   <message name="IDS_SETTINGS_CREDIT_CARD_NONE" desc="Placeholder that is shown when there are no credit cards in the list of saved credit cards.">
     Saved cards will appear here
   </message>
+  <message name="IDS_SETTINGS_PAYMENT_METHODS_NONE" desc="Placeholder that is shown when there are no payment methods in the list of saved payment methods.">
+    Saved payment methods will appear here
+  </message>
+  <!-- TODO(https://crbug.com/854562): Remove this string (and use "IDS_SETTINGS_PAYMENT_METHODS_DISABLED" instead) once Autofill Home is fully launched. -->
   <message name="IDS_SETTINGS_CREDIT_CARD_DISABLED" desc="Placeholder that is shown when credit card autofill has been disabled by policy.">
     Saved cards are disabled by your administrator
   </message>
+  <message name="IDS_SETTINGS_PAYMENT_METHODS_DISABLED" desc="Placeholder that is shown when payment methods autofill has been disabled by policy.">
+    Saved payment methods are disabled by your administrator
+  </message>
   <message name="IDS_SETTINGS_PASSWORDS_NONE" desc="Placeholder that is shown when there are no passwords in the list of saved passwords.">
     Saved passwords will appear here
   </message>
@@ -3487,6 +3507,10 @@
   <message name="IDS_SETTINGS_ENABLE_PAYMENTS_INTEGRATION_CHECKBOX_LABEL" desc="Label for the checkbox that controls the Autofill/Payments integration feature.">
     Credit cards and addresses using Google Pay.
   </message>
+  <!-- TODO(https://crbug.com/854562): Rename this to "IDS_SETTINGS_ENABLE_PAYMENTS_INTEGRATION_CHECKBOX_LABEL" once Autofill Home is fully launched. -->
+  <message name="IDS_SETTINGS_ENABLE_PAYMENTS_INTEGRATION_CHECKBOX_LABEL_AUTOFILL_HOME" desc="Label for the checkbox that controls the Autofill/Payments integration feature used for Autofill Home.">
+    Payment methods and addresses using Google Pay.
+  </message>
   <message name="IDS_SETTINGS_OPEN_TABS_CHECKBOX_LABEL" desc="Label for the checkbox which enables or disables syncing open tabs between multiple browser instances.">
     Open Tabs
   </message>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 20c5f72e..7ef9503 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -845,8 +845,6 @@
     "net_benchmarking.cc",
     "net_benchmarking.h",
     "notifications/alert_dispatcher_mac.h",
-    "notifications/desktop_notification_profile_util.cc",
-    "notifications/desktop_notification_profile_util.h",
     "notifications/metrics/notification_metrics_logger.cc",
     "notifications/metrics/notification_metrics_logger.h",
     "notifications/metrics/notification_metrics_logger_factory.cc",
diff --git a/chrome/browser/android/history_report/usage_report_util.cc b/chrome/browser/android/history_report/usage_report_util.cc
index 992df66..d73b8e0 100644
--- a/chrome/browser/android/history_report/usage_report_util.cc
+++ b/chrome/browser/android/history_report/usage_report_util.cc
@@ -15,7 +15,7 @@
 namespace history_report {
 namespace usage_report_util {
 
-// Returns a levelDb key for a report. It's a concatenation of timestamp and id
+// Returns a LevelDB key for a report. It's a concatenation of timestamp and id
 // fields of a report.
 std::string ReportToKey(const history_report::UsageReport& report) {
   std::stringstream key;
diff --git a/chrome/browser/android/history_report/usage_reports_buffer_backend.cc b/chrome/browser/android/history_report/usage_reports_buffer_backend.cc
index 164b64e..9ea799e2 100644
--- a/chrome/browser/android/history_report/usage_reports_buffer_backend.cc
+++ b/chrome/browser/android/history_report/usage_reports_buffer_backend.cc
@@ -98,7 +98,7 @@
     history_report::UsageReport last_report;
     leveldb::Slice value_slice = db_iter->value();
     if (last_report.ParseFromArray(value_slice.data(), value_slice.size())) {
-      reports->push_back(last_report);
+      reports->emplace_back(std::move(last_report));
       --batch_size;
     }
     db_iter->Next();
diff --git a/chrome/browser/android/preferences/website_preference_bridge.cc b/chrome/browser/android/preferences/website_preference_bridge.cc
index cb1c2ce8..0cb277f4 100644
--- a/chrome/browser/android/preferences/website_preference_bridge.cc
+++ b/chrome/browser/android/preferences/website_preference_bridge.cc
@@ -28,7 +28,7 @@
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
 #include "chrome/browser/content_settings/web_site_settings_uma_util.h"
 #include "chrome/browser/engagement/important_sites_util.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
+#include "chrome/browser/notifications/notification_permission_context.h"
 #include "chrome/browser/permissions/permission_decision_auto_blocker.h"
 #include "chrome/browser/permissions/permission_manager.h"
 #include "chrome/browser/permissions/permission_uma_util.h"
@@ -442,19 +442,7 @@
     return;
   }
 
-  switch (setting) {
-    case CONTENT_SETTING_DEFAULT:
-      DesktopNotificationProfileUtil::ClearSetting(profile, url);
-      break;
-    case CONTENT_SETTING_ALLOW:
-      DesktopNotificationProfileUtil::GrantPermission(profile, url);
-      break;
-    case CONTENT_SETTING_BLOCK:
-      DesktopNotificationProfileUtil::DenyPermission(profile, url);
-      break;
-    default:
-      NOTREACHED();
-  }
+  NotificationPermissionContext::UpdatePermission(profile, url, setting);
   WebSiteSettingsUmaUtil::LogPermissionChange(
       CONTENT_SETTINGS_TYPE_NOTIFICATIONS, setting);
 }
diff --git a/chrome/browser/chromeos/arc/arc_session_manager.cc b/chrome/browser/chromeos/arc/arc_session_manager.cc
index f8ed8ff..60df85e 100644
--- a/chrome/browser/chromeos/arc/arc_session_manager.cc
+++ b/chrome/browser/chromeos/arc/arc_session_manager.cc
@@ -51,6 +51,7 @@
 #include "components/arc/arc_util.h"
 #include "components/arc/metrics/arc_metrics_service.h"
 #include "components/prefs/pref_service.h"
+#include "components/session_manager/core/session_manager.h"
 #include "content/public/browser/browser_thread.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/display/types/display_constants.h"
@@ -94,6 +95,18 @@
 }
 
 void ShowUMAConsentMessageBox() {
+  session_manager::SessionManager* manager =
+      session_manager::SessionManager::Get();
+  // SessionManager may not be available in unittests.
+  // TODO(lgcheng@) Temporarily drop this warning if login screen is still
+  // present. Fix this when we have full spec what EDU requests.
+  if (!manager ||
+      manager->session_state() != session_manager::SessionState::ACTIVE) {
+    LOG(ERROR) << "Login screen is still present. Dropping request to show UMA "
+                  "consent message box";
+    return;
+  }
+
   chrome::ShowWarningMessageBox(
       nullptr,
       l10n_util::GetStringUTF16(
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc
index 9042f9ef..c117b2a 100644
--- a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc
+++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc
@@ -482,10 +482,8 @@
 ArcBluetoothBridge::~ArcBluetoothBridge() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
-  if (bluetooth_adapter_) {
-    bluetooth_adapter_->RemovePairingDelegate(this);
+  if (bluetooth_adapter_)
     bluetooth_adapter_->RemoveObserver(this);
-  }
 
   arc_bridge_service_->bluetooth()->RemoveObserver(this);
   arc_bridge_service_->bluetooth()->SetHost(nullptr);
@@ -503,8 +501,6 @@
 
   if (!bluetooth_adapter_->HasObserver(this))
     bluetooth_adapter_->AddObserver(this);
-  bluetooth_adapter_->AddPairingDelegate(
-      this, device::BluetoothAdapter::PAIRING_DELEGATE_PRIORITY_HIGH);
 }
 
 void ArcBluetoothBridge::OnConnectionReady() {
@@ -553,22 +549,6 @@
                                  std::move(adv_data));
 }
 
-device::BluetoothDevice::PairingDelegate* ArcBluetoothBridge::ShowPairingDialog(
-    device::BluetoothDevice* device) {
-  chromeos::BluetoothPairingDialog::ShowDialog(
-      device::BluetoothDevice::CanonicalizeAddress(device->GetAddress()),
-      device->GetNameForDisplay(), device->IsPaired(), device->IsConnected());
-
-  BluetoothDevice::PairingDelegate* delegate =
-      bluetooth_adapter_->DefaultPairingDelegate();
-  if (!delegate || delegate == this) {
-    OnPairedError(mojom::BluetoothAddress::From(device->GetAddress()),
-                  BluetoothDevice::ERROR_FAILED);
-    return nullptr;
-  }
-  return delegate;
-}
-
 void ArcBluetoothBridge::AdapterPoweredChanged(BluetoothAdapter* adapter,
                                                bool powered) {
   AdapterPowerState power_change =
@@ -1236,12 +1216,11 @@
     return;
   }
 
-  // Use this object as the pairing delegate to handle pairing requests.
-  // If pairing finished successfully, DevicePairedChanged will notify Android
-  // on paired state change event, so DoNothing is passed as a success callback.
-  device->Pair(this, base::DoNothing(),
-               base::Bind(&ArcBluetoothBridge::OnPairedError,
-                          weak_factory_.GetWeakPtr(), base::Passed(&addr)));
+  // BluetoothPairingDialog will automatically pair the device and handle all
+  // the incoming pairing requests.
+  chromeos::BluetoothPairingDialog::ShowDialog(
+      device::BluetoothDevice::CanonicalizeAddress(device->GetAddress()),
+      device->GetNameForDisplay(), device->IsPaired(), device->IsConnected());
 }
 
 void ArcBluetoothBridge::RemoveBond(mojom::BluetoothAddressPtr addr) {
@@ -2094,73 +2073,6 @@
       base::Bind(&OnRemoveServiceRecordError, repeating_callback));
 }
 
-void ArcBluetoothBridge::RequestPinCode(device::BluetoothDevice* device) {
-  BluetoothDevice::PairingDelegate* delegate = ShowPairingDialog(device);
-
-  // Forward RequestPinCode to extension's pairing delegate to update the UI
-  // dialog properly.
-  if (delegate)
-    delegate->RequestPinCode(device);
-}
-
-void ArcBluetoothBridge::RequestPasskey(device::BluetoothDevice* device) {
-  BluetoothDevice::PairingDelegate* delegate = ShowPairingDialog(device);
-
-  // Forward RequestPasskey to extension's pairing delegate to update the UI
-  // dialog properly.
-  if (delegate)
-    delegate->RequestPasskey(device);
-}
-
-void ArcBluetoothBridge::DisplayPinCode(device::BluetoothDevice* device,
-                                        const std::string& pincode) {
-  BluetoothDevice::PairingDelegate* delegate = ShowPairingDialog(device);
-
-  // Forward DisplayPinCode to extension's pairing delegate to update the UI
-  // dialog properly.
-  if (delegate)
-    delegate->DisplayPinCode(device, pincode);
-}
-
-void ArcBluetoothBridge::DisplayPasskey(device::BluetoothDevice* device,
-                                        uint32_t passkey) {
-  BluetoothDevice::PairingDelegate* delegate = ShowPairingDialog(device);
-
-  // Forward DisplayPasskey to extension's pairing delegate to update the UI
-  // dialog properly.
-  if (delegate)
-    delegate->DisplayPasskey(device, passkey);
-}
-
-void ArcBluetoothBridge::KeysEntered(device::BluetoothDevice* device,
-                                     uint32_t entered) {
-  BluetoothDevice::PairingDelegate* delegate = ShowPairingDialog(device);
-
-  // Forward KeysEntered to extension's pairing delegate to update the UI
-  // dialog properly.
-  if (delegate)
-    delegate->KeysEntered(device, entered);
-}
-
-void ArcBluetoothBridge::ConfirmPasskey(device::BluetoothDevice* device,
-                                        uint32_t passkey) {
-  BluetoothDevice::PairingDelegate* delegate = ShowPairingDialog(device);
-
-  // Forward ConfirmPasskey to extension's pairing delegate to update the UI
-  // dialog properly.
-  if (delegate)
-    delegate->ConfirmPasskey(device, passkey);
-}
-
-void ArcBluetoothBridge::AuthorizePairing(device::BluetoothDevice* device) {
-  BluetoothDevice::PairingDelegate* delegate = ShowPairingDialog(device);
-
-  // Forward AuthorizePairing to extension's pairing delegate to update the UI
-  // dialog properly.
-  if (delegate)
-    delegate->AuthorizePairing(device);
-}
-
 template <typename... Args>
 void ArcBluetoothBridge::AddAdvertisementTask(
     base::OnceCallback<void(base::OnceCallback<void(Args...)>)> task,
@@ -2766,7 +2678,11 @@
   advertising_data.push_back(std::move(local_name));
 
   // Service UUIDs
-  const BluetoothDevice::UUIDSet& uuid_set = device->GetUUIDs();
+  BluetoothDevice::UUIDSet uuid_set = device->GetUUIDs();
+  for (const BluetoothRemoteGattService* gatt_service :
+       device->GetGattServices()) {
+    uuid_set.erase(gatt_service->GetUUID());
+  }
   if (uuid_set.size() > 0) {
     mojom::BluetoothAdvertisingDataPtr service_uuids =
         mojom::BluetoothAdvertisingData::New();
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
index fc9f141..6c23197 100644
--- a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
+++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
@@ -54,8 +54,7 @@
       public device::BluetoothAdapter::Observer,
       public device::BluetoothAdapterFactory::AdapterCallback,
       public device::BluetoothLocalGattService::Delegate,
-      public mojom::BluetoothHost,
-      public device::BluetoothDevice::PairingDelegate {
+      public mojom::BluetoothHost {
  public:
   using GattStatusCallback =
       base::OnceCallback<void(mojom::BluetoothGattStatus)>;
@@ -307,18 +306,6 @@
   void RemoveSdpRecord(uint32_t service_handle,
                        RemoveSdpRecordCallback callback) override;
 
-  // device::BluetoothDevice::PairingDelegate:
-  void RequestPinCode(device::BluetoothDevice* device) override;
-  void RequestPasskey(device::BluetoothDevice* device) override;
-  void DisplayPinCode(device::BluetoothDevice* device,
-                      const std::string& pincode) override;
-  void DisplayPasskey(device::BluetoothDevice* device,
-                      uint32_t passkey) override;
-  void KeysEntered(device::BluetoothDevice* device, uint32_t entered) override;
-  void ConfirmPasskey(device::BluetoothDevice* device,
-                      uint32_t passkey) override;
-  void AuthorizePairing(device::BluetoothDevice* device) override;
-
   // Set up or disable multiple advertising.
   void ReserveAdvertisementHandle(
       ReserveAdvertisementHandleCallback callback) override;
@@ -533,11 +520,6 @@
   void SendDevice(const device::BluetoothDevice* device,
                   bool include_cached_device) const;
 
-  // Shows a pairing dialog to handle incoming pairing requests.
-  // Returns the pairing delegate of the dialog UI.
-  device::BluetoothDevice::PairingDelegate* ShowPairingDialog(
-      device::BluetoothDevice* device);
-
   ArcBridgeService* const arc_bridge_service_;  // Owned by ArcServiceManager.
 
   scoped_refptr<bluez::BluetoothAdapterBlueZ> bluetooth_adapter_;
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc
index 550987c..d71791f 100644
--- a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc
+++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc
@@ -24,11 +24,13 @@
 #include "device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_client.h"
 #include "device/bluetooth/dbus/fake_bluetooth_gatt_service_client.h"
 #include "device/bluetooth/dbus/fake_bluetooth_le_advertising_manager_client.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
 constexpr int16_t kTestRssi = -50;
 constexpr int16_t kTestRssi2 = -70;
+constexpr char kTestServiceUUID[] = "00001357-0000-1000-8000-00805f9b34fb";
 }  // namespace
 
 namespace arc {
@@ -52,6 +54,10 @@
     fake_bluetooth_device_client->CreateDevice(
         dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
         dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
+    fake_bluetooth_device_client->UpdateServiceAndManufacturerData(
+        dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath),
+        {kTestServiceUUID}, /* service_data = */ {},
+        /* manufacture_data = */ {});
     fake_bluetooth_gatt_service_client->ExposeHeartRateService(
         dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
     fake_bluetooth_gatt_characteristic_client->ExposeHeartRateCharacteristics(
@@ -205,7 +211,7 @@
 TEST_F(ArcBluetoothBridgeTest, DeviceFound) {
   EXPECT_EQ(0u, fake_bluetooth_instance_->device_found_data().size());
   AddTestDevice();
-  EXPECT_EQ(2u, fake_bluetooth_instance_->device_found_data().size());
+  EXPECT_EQ(5u, fake_bluetooth_instance_->device_found_data().size());
   const std::vector<mojom::BluetoothPropertyPtr>& prop =
       fake_bluetooth_instance_->device_found_data().back();
 
@@ -217,9 +223,12 @@
   EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress),
             prop[1]->get_bdaddr()->To<std::string>());
   EXPECT_TRUE(prop[2]->is_uuids());
-  EXPECT_EQ(1u, prop[2]->get_uuids().size());
-  EXPECT_EQ(bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID,
-            prop[2]->get_uuids()[0].value());
+  EXPECT_THAT(
+      prop[2]->get_uuids(),
+      testing::UnorderedElementsAre(
+          device::BluetoothUUID(
+              bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID),
+          device::BluetoothUUID(kTestServiceUUID)));
   EXPECT_TRUE(prop[3]->is_device_class());
   EXPECT_EQ(bluez::FakeBluetoothDeviceClient::kLowEnergyClass,
             prop[3]->get_device_class());
@@ -232,7 +241,7 @@
   EXPECT_EQ(kTestRssi, prop[6]->get_remote_rssi());
 
   ChangeTestDeviceRssi(kTestRssi2);
-  EXPECT_EQ(3u, fake_bluetooth_instance_->device_found_data().size());
+  EXPECT_EQ(6u, fake_bluetooth_instance_->device_found_data().size());
   const std::vector<mojom::BluetoothPropertyPtr>& prop2 =
       fake_bluetooth_instance_->device_found_data().back();
   EXPECT_EQ(7u, prop2.size());
@@ -263,7 +272,7 @@
 
   EXPECT_TRUE(adv_data[1]->is_service_uuids());
   EXPECT_EQ(1u, adv_data[1]->get_service_uuids().size());
-  EXPECT_EQ(bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID,
+  EXPECT_EQ(kTestServiceUUID,
             adv_data[1]->get_service_uuids()[0].canonical_value());
 
   EXPECT_EQ(kTestRssi, le_device_found_data->rssi());
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
index 70b6052..14ce2581 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
@@ -644,16 +644,6 @@
 
 void EasyUnlockServiceRegular::OnScreenDidUnlock(
     proximity_auth::ScreenlockBridge::LockHandler::ScreenType screen_type) {
-  if (!will_unlock_using_easy_unlock_ && pref_manager_ &&
-      base::CommandLine::ForCurrentProcess()->HasSwitch(
-          proximity_auth::switches::kEnableForcePasswordReauth)) {
-    // If a password was used, then record the current timestamp. This timestamp
-    // is used to enforce password reauths after a certain time has elapsed.
-    // Note: This code path is also triggered by the login flow.
-    pref_manager_->SetLastPasswordEntryTimestampMs(
-        base::Time::Now().ToJavaTime());
-  }
-
   // If we tried to load remote devices (e.g. after a sync or the
   // service was initialized) while the screen was locked, we can now
   // load the new remote devices.
diff --git a/chrome/browser/chromeos/login/enrollment/enrollment_screen_browsertest.cc b/chrome/browser/chromeos/login/enrollment/enrollment_screen_browsertest.cc
index 9640587..2988ad7 100644
--- a/chrome/browser/chromeos/login/enrollment/enrollment_screen_browsertest.cc
+++ b/chrome/browser/chromeos/login/enrollment/enrollment_screen_browsertest.cc
@@ -142,7 +142,7 @@
   ASSERT_TRUE(view);
 
   test::JSChecker checker(
-      LoginDisplayHost::default_host()->GetWebUILoginView()->GetWebContents());
+      LoginDisplayHost::default_host()->GetOobeWebContents());
 
   // Run through the flow
   view->Show();
diff --git a/chrome/browser/chromeos/login/enrollment/enrollment_uma.cc b/chrome/browser/chromeos/login/enrollment/enrollment_uma.cc
index 9f596df8..6edb9d5 100644
--- a/chrome/browser/chromeos/login/enrollment/enrollment_uma.cc
+++ b/chrome/browser/chromeos/login/enrollment/enrollment_uma.cc
@@ -25,6 +25,7 @@
     case policy::EnrollmentConfig::MODE_LOCAL_ADVERTISED:
     case policy::EnrollmentConfig::MODE_SERVER_ADVERTISED:
     case policy::EnrollmentConfig::MODE_ATTESTATION:
+    case policy::EnrollmentConfig::MODE_OFFLINE_DEMO:
       base::UmaHistogramSparse(kMetricEnrollment, sample);
       break;
     case policy::EnrollmentConfig::MODE_LOCAL_FORCED:
@@ -37,13 +38,6 @@
     case policy::EnrollmentConfig::MODE_RECOVERY:
       base::UmaHistogramSparse(kMetricEnrollmentRecovery, sample);
       break;
-    case policy::EnrollmentConfig::MODE_OFFLINE_DEMO:
-      // MODE_OFFLINE_DEMO is currently NOTREACHED(), since the normal
-      // enrollment flow (which invokes this function) shouldn't use this mode.
-      // TODO(mukai, agawronska): decide what needs to be done here.
-      // https://crbug.com/835904
-      NOTREACHED();
-      break;
     case policy::EnrollmentConfig::MODE_NONE:
       NOTREACHED();
       break;
diff --git a/chrome/browser/chromeos/login/login_manager_test.cc b/chrome/browser/chromeos/login/login_manager_test.cc
index 5a076fc..dafa83a7 100644
--- a/chrome/browser/chromeos/login/login_manager_test.cc
+++ b/chrome/browser/chromeos/login/login_manager_test.cc
@@ -228,8 +228,7 @@
   LoginDisplayHost* host = LoginDisplayHost::default_host();
   EXPECT_TRUE(host != NULL);
 
-  content::WebContents* web_contents =
-      host->GetWebUILoginView()->GetWebContents();
+  content::WebContents* web_contents = host->GetOobeWebContents();
   EXPECT_TRUE(web_contents != NULL);
   set_web_contents(web_contents);
   js_checker_.set_web_contents(web_contents);
diff --git a/chrome/browser/chromeos/login/proxy_auth_dialog_browsertest.cc b/chrome/browser/chromeos/login/proxy_auth_dialog_browsertest.cc
index 3c0fa46..079c3c9 100644
--- a/chrome/browser/chromeos/login/proxy_auth_dialog_browsertest.cc
+++ b/chrome/browser/chromeos/login/proxy_auth_dialog_browsertest.cc
@@ -94,10 +94,6 @@
 // Flaky: https://crbug.com/481651 and https://crbug.com/772072
 IN_PROC_BROWSER_TEST_F(ProxyAuthOnUserBoardScreenTest,
                        DISABLED_ProxyAuthDialogOnUserBoardScreen) {
-  LoginDisplayHost* login_display_host = LoginDisplayHost::default_host();
-  WebUILoginView* web_ui_login_view = login_display_host->GetWebUILoginView();
-  OobeUI* oobe_ui = web_ui_login_view->GetOobeUI();
-
   {
     OobeScreenWaiter screen_waiter(OobeScreen::SCREEN_ACCOUNT_PICKER);
     ProxyAuthDialogWaiter auth_dialog_waiter;
@@ -111,8 +107,9 @@
   {
     OobeScreenWaiter screen_waiter(OobeScreen::SCREEN_GAIA_SIGNIN);
     ProxyAuthDialogWaiter auth_dialog_waiter;
-    ASSERT_TRUE(content::ExecuteScript(oobe_ui->web_ui()->GetWebContents(),
-                                       "$('add-user-button').click()"));
+    ASSERT_TRUE(content::ExecuteScript(
+        LoginDisplayHost::default_host()->GetOobeWebContents(),
+        "$('add-user-button').click()"));
     screen_waiter.Wait();
     auth_dialog_waiter.Wait();
     ASSERT_TRUE(auth_dialog_waiter.login_handler());
diff --git a/chrome/browser/chromeos/login/screens/error_screen.cc b/chrome/browser/chromeos/login/screens/error_screen.cc
index f0f32eb..c5ccaec 100644
--- a/chrome/browser/chromeos/login/screens/error_screen.cc
+++ b/chrome/browser/chromeos/login/screens/error_screen.cc
@@ -109,7 +109,7 @@
 void ErrorScreen::FixCaptivePortal() {
   if (!captive_portal_window_proxy_.get()) {
     content::WebContents* web_contents =
-        LoginDisplayHost::default_host()->GetWebUILoginView()->GetWebContents();
+        LoginDisplayHost::default_host()->GetOobeWebContents();
     captive_portal_window_proxy_.reset(new CaptivePortalWindowProxy(
         network_state_informer_.get(), web_contents));
   }
diff --git a/chrome/browser/chromeos/login/test/oobe_base_test.cc b/chrome/browser/chromeos/login/test/oobe_base_test.cc
index 2b34da28..68b4cb79 100644
--- a/chrome/browser/chromeos/login/test/oobe_base_test.cc
+++ b/chrome/browser/chromeos/login/test/oobe_base_test.cc
@@ -115,7 +115,7 @@
       content::NotificationService::AllSources()));
 
   js_checker_.set_web_contents(
-      LoginDisplayHost::default_host()->GetWebUILoginView()->GetWebContents());
+      LoginDisplayHost::default_host()->GetOobeWebContents());
 
   test::UserSessionManagerTestApi session_manager_test_api(
       UserSessionManager::GetInstance());
diff --git a/chrome/browser/chromeos/login/ui/captive_portal_window_browsertest.cc b/chrome/browser/chromeos/login/ui/captive_portal_window_browsertest.cc
index b7fec8c..6d78fc94 100644
--- a/chrome/browser/chromeos/login/ui/captive_portal_window_browsertest.cc
+++ b/chrome/browser/chromeos/login/ui/captive_portal_window_browsertest.cc
@@ -78,7 +78,7 @@
 
   void SetUpOnMainThread() override {
     content::WebContents* web_contents =
-        LoginDisplayHost::default_host()->GetWebUILoginView()->GetWebContents();
+        LoginDisplayHost::default_host()->GetOobeWebContents();
     captive_portal_window_proxy_.reset(
         new CaptivePortalWindowProxy(&delegate_, web_contents));
   }
diff --git a/chrome/browser/chromeos/login/ui/fake_login_display_host.cc b/chrome/browser/chromeos/login/ui/fake_login_display_host.cc
index 0773e62..956d486 100644
--- a/chrome/browser/chromeos/login/ui/fake_login_display_host.cc
+++ b/chrome/browser/chromeos/login/ui/fake_login_display_host.cc
@@ -41,6 +41,10 @@
   return nullptr;
 }
 
+content::WebContents* FakeLoginDisplayHost::GetOobeWebContents() const {
+  return nullptr;
+}
+
 WebUILoginView* FakeLoginDisplayHost::GetWebUILoginView() const {
   return nullptr;
 }
diff --git a/chrome/browser/chromeos/login/ui/fake_login_display_host.h b/chrome/browser/chromeos/login/ui/fake_login_display_host.h
index b42c07be..26530cd 100644
--- a/chrome/browser/chromeos/login/ui/fake_login_display_host.h
+++ b/chrome/browser/chromeos/login/ui/fake_login_display_host.h
@@ -26,6 +26,7 @@
   LoginDisplay* GetLoginDisplay() override;
   gfx::NativeWindow GetNativeWindow() const override;
   OobeUI* GetOobeUI() const override;
+  content::WebContents* GetOobeWebContents() const override;
   WebUILoginView* GetWebUILoginView() const override;
   void BeforeSessionStart() override;
   void Finalize(base::OnceClosure) override;
diff --git a/chrome/browser/chromeos/login/ui/login_display_host.h b/chrome/browser/chromeos/login/ui/login_display_host.h
index ff737b6..5c30762 100644
--- a/chrome/browser/chromeos/login/ui/login_display_host.h
+++ b/chrome/browser/chromeos/login/ui/login_display_host.h
@@ -19,6 +19,10 @@
 
 class AccountId;
 
+namespace content {
+class WebContents;
+}
+
 namespace chromeos {
 
 class AppLaunchController;
@@ -61,6 +65,9 @@
   // Returns instance of the OOBE WebUI.
   virtual OobeUI* GetOobeUI() const = 0;
 
+  // Return the WebContents instance of OOBE, if any.
+  virtual content::WebContents* GetOobeWebContents() const = 0;
+
   // Returns the current login view.
   virtual WebUILoginView* GetWebUILoginView() const = 0;
 
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc b/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc
index 13fdb6aa..6fec22e 100644
--- a/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc
+++ b/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc
@@ -117,6 +117,12 @@
   return dialog_->GetOobeUI();
 }
 
+content::WebContents* LoginDisplayHostMojo::GetOobeWebContents() const {
+  if (!dialog_)
+    return nullptr;
+  return dialog_->GetWebContents();
+}
+
 WebUILoginView* LoginDisplayHostMojo::GetWebUILoginView() const {
   NOTREACHED();
   return nullptr;
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_mojo.h b/chrome/browser/chromeos/login/ui/login_display_host_mojo.h
index 066ef658..64ebd4f 100644
--- a/chrome/browser/chromeos/login/ui/login_display_host_mojo.h
+++ b/chrome/browser/chromeos/login/ui/login_display_host_mojo.h
@@ -70,6 +70,7 @@
   LoginDisplay* GetLoginDisplay() override;
   gfx::NativeWindow GetNativeWindow() const override;
   OobeUI* GetOobeUI() const override;
+  content::WebContents* GetOobeWebContents() const override;
   WebUILoginView* GetWebUILoginView() const override;
   void OnFinalize() override;
   void SetStatusAreaVisible(bool visible) override;
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_webui.cc b/chrome/browser/chromeos/login/ui/login_display_host_webui.cc
index e4ad585..e2f4073a 100644
--- a/chrome/browser/chromeos/login/ui/login_display_host_webui.cc
+++ b/chrome/browser/chromeos/login/ui/login_display_host_webui.cc
@@ -774,6 +774,11 @@
   return login_view_->GetOobeUI();
 }
 
+content::WebContents* LoginDisplayHostWebUI::GetOobeWebContents() const {
+  if (!login_view_)
+    return nullptr;
+  return login_view_->GetWebContents();
+}
 ////////////////////////////////////////////////////////////////////////////////
 // LoginDisplayHostWebUI, content:NotificationObserver:
 
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_webui.h b/chrome/browser/chromeos/login/ui/login_display_host_webui.h
index 6ed1aef..fea96cd 100644
--- a/chrome/browser/chromeos/login/ui/login_display_host_webui.h
+++ b/chrome/browser/chromeos/login/ui/login_display_host_webui.h
@@ -57,6 +57,7 @@
   LoginDisplay* GetLoginDisplay() override;
   gfx::NativeWindow GetNativeWindow() const override;
   OobeUI* GetOobeUI() const override;
+  content::WebContents* GetOobeWebContents() const override;
   WebUILoginView* GetWebUILoginView() const override;
   void OnFinalize() override;
   void SetStatusAreaVisible(bool visible) override;
diff --git a/chrome/browser/chromeos/login/ui/mock_login_display_host.h b/chrome/browser/chromeos/login/ui/mock_login_display_host.h
index 3d27691..b67cebe 100644
--- a/chrome/browser/chromeos/login/ui/mock_login_display_host.h
+++ b/chrome/browser/chromeos/login/ui/mock_login_display_host.h
@@ -22,6 +22,7 @@
   MOCK_METHOD0(GetLoginDisplay, LoginDisplay*());
   MOCK_CONST_METHOD0(GetNativeWindow, gfx::NativeWindow(void));
   MOCK_CONST_METHOD0(GetOobeUI, OobeUI*(void));
+  MOCK_CONST_METHOD0(GetOobeWebContents, content::WebContents*(void));
   MOCK_CONST_METHOD0(GetWebUILoginView, WebUILoginView*(void));
   MOCK_METHOD0(BeforeSessionStart, void(void));
 
diff --git a/chrome/browser/chromeos/login/ui/oobe_ui_dialog_delegate.cc b/chrome/browser/chromeos/login/ui/oobe_ui_dialog_delegate.cc
index 2bcfac741..95d0361 100644
--- a/chrome/browser/chromeos/login/ui/oobe_ui_dialog_delegate.cc
+++ b/chrome/browser/chromeos/login/ui/oobe_ui_dialog_delegate.cc
@@ -59,6 +59,10 @@
       dialog_view_->web_contents());
 }
 
+content::WebContents* OobeUIDialogDelegate::GetWebContents() {
+  return dialog_view_->web_contents();
+}
+
 void OobeUIDialogDelegate::Show(bool closable_by_esc) {
   closable_by_esc_ = closable_by_esc;
   dialog_widget_->Show();
diff --git a/chrome/browser/chromeos/login/ui/oobe_ui_dialog_delegate.h b/chrome/browser/chromeos/login/ui/oobe_ui_dialog_delegate.h
index 34f72a92..31ae401 100644
--- a/chrome/browser/chromeos/login/ui/oobe_ui_dialog_delegate.h
+++ b/chrome/browser/chromeos/login/ui/oobe_ui_dialog_delegate.h
@@ -12,6 +12,10 @@
 #include "base/strings/string16.h"
 #include "ui/web_dialogs/web_dialog_delegate.h"
 
+namespace content {
+class WebContents;
+}
+
 namespace ui {
 class Accelerator;
 }
@@ -55,6 +59,8 @@
   // Initialize the dialog widget.
   void Init();
 
+  content::WebContents* GetWebContents();
+
   void SetSize(int width, int height);
   OobeUI* GetOobeUI() const;
   gfx::NativeWindow GetNativeWindow() const;
diff --git a/chrome/browser/chromeos/login/ui/simple_web_view_dialog_browsertest.cc b/chrome/browser/chromeos/login/ui/simple_web_view_dialog_browsertest.cc
index 13b878f..f6cf2ca 100644
--- a/chrome/browser/chromeos/login/ui/simple_web_view_dialog_browsertest.cc
+++ b/chrome/browser/chromeos/login/ui/simple_web_view_dialog_browsertest.cc
@@ -65,7 +65,7 @@
 
 IN_PROC_BROWSER_TEST_F(SimpleWebViewDialogTest, Interstitial) {
   content::WebContents* web_contents =
-      LoginDisplayHost::default_host()->GetWebUILoginView()->GetWebContents();
+      LoginDisplayHost::default_host()->GetOobeWebContents();
   StubDelegate delegate;
   CaptivePortalWindowProxy proxy(&delegate, web_contents);
   proxy.Show();
diff --git a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
index 5777f68..bcbc0023 100644
--- a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
+++ b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
@@ -352,11 +352,8 @@
   content::WebContents* GetWebContents() {
     LoginDisplayHost* host = LoginDisplayHost::default_host();
     if (!host)
-      return NULL;
-    WebUILoginView* webui_login_view = host->GetWebUILoginView();
-    if (!webui_login_view)
-      return NULL;
-    return webui_login_view->GetWebContents();
+      return nullptr;
+    return host->GetOobeWebContents();
   }
 
   void WaitUntilJSIsReady() {
diff --git a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
index 184f31a..bae7ff9 100644
--- a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
+++ b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
@@ -474,12 +474,7 @@
 
     chromeos::LoginDisplayHost* host =
         chromeos::LoginDisplayHost::default_host();
-    ASSERT_TRUE(host);
-    chromeos::WebUILoginView* web_ui_login_view = host->GetWebUILoginView();
-    ASSERT_TRUE(web_ui_login_view);
-    content::WebUI* web_ui = web_ui_login_view->GetWebUI();
-    ASSERT_TRUE(web_ui);
-    contents_ = web_ui->GetWebContents();
+    contents_ = host->GetOobeWebContents();
     ASSERT_TRUE(contents_);
 
     // Wait for the login UI to be ready.
diff --git a/chrome/browser/chromeos/shutdown_policy_browsertest.cc b/chrome/browser/chromeos/shutdown_policy_browsertest.cc
index e7efd3b3..06b0054 100644
--- a/chrome/browser/chromeos/shutdown_policy_browsertest.cc
+++ b/chrome/browser/chromeos/shutdown_policy_browsertest.cc
@@ -315,11 +315,7 @@
         content::NotificationService::AllSources()).Wait();
     LoginDisplayHost* host = LoginDisplayHost::default_host();
     ASSERT_TRUE(host);
-    WebUILoginView* web_ui_login_view = host->GetWebUILoginView();
-    ASSERT_TRUE(web_ui_login_view);
-    content::WebUI* web_ui = web_ui_login_view->GetWebUI();
-    ASSERT_TRUE(web_ui);
-    contents_ = web_ui->GetWebContents();
+    contents_ = host->GetOobeWebContents();
     ASSERT_TRUE(contents_);
 
     // Wait for the login UI to be ready.
diff --git a/chrome/browser/chromeos/system/device_disabling_browsertest.cc b/chrome/browser/chromeos/system/device_disabling_browsertest.cc
index 52d8f536..216d6b83 100644
--- a/chrome/browser/chromeos/system/device_disabling_browsertest.cc
+++ b/chrome/browser/chromeos/system/device_disabling_browsertest.cc
@@ -184,9 +184,7 @@
   // show the login screen. Simulate this.
   const LoginDisplayHost* host = LoginDisplayHost::default_host();
   ASSERT_TRUE(host);
-  WebUILoginView* webui_login_view = host->GetWebUILoginView();
-  ASSERT_TRUE(webui_login_view);
-  content::WebContents* web_contents = webui_login_view->GetWebContents();
+  content::WebContents* web_contents = host->GetOobeWebContents();
   ASSERT_TRUE(web_contents);
   ASSERT_TRUE(content::ExecuteScript(web_contents,
                                      "Oobe.showAddUserForTesting();"));
diff --git a/chrome/browser/extensions/api/cookies/cookies_helpers.cc b/chrome/browser/extensions/api/cookies/cookies_helpers.cc
index a0c873d..0fa2604 100644
--- a/chrome/browser/extensions/api/cookies/cookies_helpers.cc
+++ b/chrome/browser/extensions/api/cookies/cookies_helpers.cc
@@ -8,6 +8,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <utility>
 #include <vector>
 
@@ -94,8 +95,12 @@
 
   cookie.session = !canonical_cookie.IsPersistent();
   if (canonical_cookie.IsPersistent()) {
-    cookie.expiration_date.reset(
-        new double(canonical_cookie.ExpiryDate().ToDoubleT()));
+    double expiration_date = canonical_cookie.ExpiryDate().ToDoubleT();
+    if (canonical_cookie.ExpiryDate().is_max() ||
+        !std::isfinite(expiration_date)) {
+      expiration_date = std::numeric_limits<double>::max();
+    }
+    cookie.expiration_date = std::make_unique<double>(expiration_date);
   }
   cookie.store_id = store_id;
 
diff --git a/chrome/browser/extensions/api/cookies/cookies_helpers_unittest.cc b/chrome/browser/extensions/api/cookies/cookies_helpers_unittest.cc
new file mode 100644
index 0000000..bc00813
--- /dev/null
+++ b/chrome/browser/extensions/api/cookies/cookies_helpers_unittest.cc
@@ -0,0 +1,42 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/api/cookies/cookies_helpers.h"
+
+#include <limits>
+#include <memory>
+
+#include "net/cookies/canonical_cookie.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+// Tests that cookies with an expiration date too far in the future to represent
+// with base::Time serialize gracefully.
+// Regression test for https://crbug.com/848221.
+TEST(CookiesHelperUnittest, CookieConversionWithInfiniteExpirationDate) {
+  // Set a cookie to expire at base::Time::Max(). This can happen when the
+  // cookie is set to expire farther in the future than we can accurately
+  // represent with base::Time(). Note that, in practice, this is really only
+  // applicable on 32-bit machines, but we can fake it a bit for cross-platform
+  // testing by just setting the expiration date directly.
+  const base::Time kExpirationDate = base::Time::Max();
+  net::CanonicalCookie cookie("cookiename", "cookievalue", "example.com", "/",
+                              base::Time::Now(), kExpirationDate, base::Time(),
+                              false, false, net::CookieSameSite::DEFAULT_MODE,
+                              net::COOKIE_PRIORITY_DEFAULT);
+
+  // Serialize the cookie to JSON. We need to gracefully handle the infinite
+  // expiration date, which should be converted to the maximum value.
+  api::cookies::Cookie serialized_cookie =
+      cookies_helpers::CreateCookie(cookie, "1");
+  std::unique_ptr<base::Value> value_cookie = serialized_cookie.ToValue();
+  ASSERT_TRUE(value_cookie);
+  base::Value* expiration_time =
+      value_cookie->FindKeyOfType("expirationDate", base::Value::Type::DOUBLE);
+  ASSERT_TRUE(expiration_time);
+  EXPECT_EQ(std::numeric_limits<double>::max(), expiration_time->GetDouble());
+}
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/api/sessions/sessions_api.cc b/chrome/browser/extensions/api/sessions/sessions_api.cc
index cd25ac6b..e56809e 100644
--- a/chrome/browser/extensions/api/sessions/sessions_api.cc
+++ b/chrome/browser/extensions/api/sessions/sessions_api.cc
@@ -44,7 +44,6 @@
 
 namespace extensions {
 
-namespace tabs = api::tabs;
 namespace windows = api::windows;
 
 namespace {
@@ -76,14 +75,14 @@
   return t1->timestamp > t2->timestamp;
 }
 
-tabs::Tab CreateTabModelHelper(
+api::tabs::Tab CreateTabModelHelper(
     const sessions::SerializedNavigationEntry& current_navigation,
     const std::string& session_id,
     int index,
     bool pinned,
     bool active,
     const Extension* extension) {
-  tabs::Tab tab_struct;
+  api::tabs::Tab tab_struct;
 
   const GURL& url = current_navigation.virtual_url();
   std::string title = base::UTF16ToUTF8(current_navigation.title());
@@ -105,12 +104,12 @@
   return tab_struct;
 }
 
-std::unique_ptr<windows::Window> CreateWindowModelHelper(
-    std::unique_ptr<std::vector<tabs::Tab>> tabs,
+std::unique_ptr<api::windows::Window> CreateWindowModelHelper(
+    std::unique_ptr<std::vector<api::tabs::Tab>> tabs,
     const std::string& session_id,
-    const windows::WindowType& type,
-    const windows::WindowState& state) {
-  std::unique_ptr<windows::Window> window_struct(new windows::Window);
+    const api::windows::WindowType& type,
+    const api::windows::WindowState& state) {
+  std::unique_ptr<api::windows::Window> window_struct(new api::windows::Window);
   window_struct->tabs = std::move(tabs);
   window_struct->session_id.reset(new std::string(session_id));
   window_struct->incognito = false;
@@ -123,8 +122,8 @@
 
 std::unique_ptr<api::sessions::Session> CreateSessionModelHelper(
     int last_modified,
-    std::unique_ptr<tabs::Tab> tab,
-    std::unique_ptr<windows::Window> window) {
+    std::unique_ptr<api::tabs::Tab> tab,
+    std::unique_ptr<api::windows::Window> window) {
   std::unique_ptr<api::sessions::Session> session_struct(
       new api::sessions::Session());
   session_struct->last_modified = last_modified;
@@ -143,7 +142,7 @@
 
 }  // namespace
 
-tabs::Tab SessionsGetRecentlyClosedFunction::CreateTabModel(
+api::tabs::Tab SessionsGetRecentlyClosedFunction::CreateTabModel(
     const sessions::TabRestoreService::Tab& tab,
     bool active) {
   return CreateTabModelHelper(tab.navigations[tab.current_navigation_index],
@@ -152,29 +151,29 @@
                               extension());
 }
 
-std::unique_ptr<windows::Window>
+std::unique_ptr<api::windows::Window>
 SessionsGetRecentlyClosedFunction::CreateWindowModel(
     const sessions::TabRestoreService::Window& window) {
   DCHECK(!window.tabs.empty());
 
-  auto tabs = std::make_unique<std::vector<tabs::Tab>>();
+  auto tabs = std::make_unique<std::vector<api::tabs::Tab>>();
   for (const auto& tab : window.tabs)
     tabs->push_back(
         CreateTabModel(*tab, tab->tabstrip_index == window.selected_tab_index));
 
   return CreateWindowModelHelper(
       std::move(tabs), base::IntToString(window.id.id()),
-      windows::WINDOW_TYPE_NORMAL, windows::WINDOW_STATE_NORMAL);
+      api::windows::WINDOW_TYPE_NORMAL, api::windows::WINDOW_STATE_NORMAL);
 }
 
 std::unique_ptr<api::sessions::Session>
 SessionsGetRecentlyClosedFunction::CreateSessionModel(
     const sessions::TabRestoreService::Entry& entry) {
-  std::unique_ptr<tabs::Tab> tab;
-  std::unique_ptr<windows::Window> window;
+  std::unique_ptr<api::tabs::Tab> tab;
+  std::unique_ptr<api::windows::Window> window;
   switch (entry.type) {
     case sessions::TabRestoreService::TAB:
-      tab.reset(new tabs::Tab(CreateTabModel(
+      tab.reset(new api::tabs::Tab(CreateTabModel(
           static_cast<const sessions::TabRestoreService::Tab&>(entry), false)));
       break;
     case sessions::TabRestoreService::WINDOW:
@@ -221,7 +220,7 @@
   return RespondNow(ArgumentList(GetRecentlyClosed::Results::Create(result)));
 }
 
-tabs::Tab SessionsGetDevicesFunction::CreateTabModel(
+api::tabs::Tab SessionsGetDevicesFunction::CreateTabModel(
     const std::string& session_tag,
     const sessions::SessionTab& tab,
     int tab_index,
@@ -232,7 +231,8 @@
       tab.pinned, active, extension());
 }
 
-std::unique_ptr<windows::Window> SessionsGetDevicesFunction::CreateWindowModel(
+std::unique_ptr<api::windows::Window>
+SessionsGetDevicesFunction::CreateWindowModel(
     const sessions::SessionWindow& window,
     const std::string& session_tag) {
   DCHECK(!window.tabs.empty());
@@ -253,10 +253,11 @@
     tabs_in_window.push_back(tab);
   }
   if (tabs_in_window.empty())
-    return std::unique_ptr<windows::Window>();
+    return nullptr;
   std::sort(tabs_in_window.begin(), tabs_in_window.end(), SortTabsByRecency);
 
-  std::unique_ptr<std::vector<tabs::Tab>> tabs(new std::vector<tabs::Tab>());
+  std::unique_ptr<std::vector<api::tabs::Tab>> tabs(
+      new std::vector<api::tabs::Tab>());
   for (size_t i = 0; i < tabs_in_window.size(); ++i) {
     tabs->push_back(CreateTabModel(session_tag, *tabs_in_window[i], i,
                                    window.selected_tab_index == (int)i));
@@ -265,29 +266,29 @@
   std::string session_id =
       SessionId(session_tag, window.window_id.id()).ToString();
 
-  windows::WindowType type = windows::WINDOW_TYPE_NONE;
+  api::windows::WindowType type = api::windows::WINDOW_TYPE_NONE;
   switch (window.type) {
     case sessions::SessionWindow::TYPE_TABBED:
-      type = windows::WINDOW_TYPE_NORMAL;
+      type = api::windows::WINDOW_TYPE_NORMAL;
       break;
     case sessions::SessionWindow::TYPE_POPUP:
-      type = windows::WINDOW_TYPE_POPUP;
+      type = api::windows::WINDOW_TYPE_POPUP;
       break;
   }
 
-  windows::WindowState state = windows::WINDOW_STATE_NONE;
+  api::windows::WindowState state = api::windows::WINDOW_STATE_NONE;
   switch (window.show_state) {
     case ui::SHOW_STATE_NORMAL:
-      state = windows::WINDOW_STATE_NORMAL;
+      state = api::windows::WINDOW_STATE_NORMAL;
       break;
     case ui::SHOW_STATE_MINIMIZED:
-      state = windows::WINDOW_STATE_MINIMIZED;
+      state = api::windows::WINDOW_STATE_MINIMIZED;
       break;
     case ui::SHOW_STATE_MAXIMIZED:
-      state = windows::WINDOW_STATE_MAXIMIZED;
+      state = api::windows::WINDOW_STATE_MAXIMIZED;
       break;
     case ui::SHOW_STATE_FULLSCREEN:
-      state = windows::WINDOW_STATE_FULLSCREEN;
+      state = api::windows::WINDOW_STATE_FULLSCREEN;
       break;
     case ui::SHOW_STATE_DEFAULT:
     case ui::SHOW_STATE_INACTIVE:
@@ -295,7 +296,7 @@
       break;
   }
 
-  std::unique_ptr<windows::Window> window_struct(
+  std::unique_ptr<api::windows::Window> window_struct(
       CreateWindowModelHelper(std::move(tabs), session_id, type, state));
   // TODO(dwankri): Dig deeper to resolve bounds not being optional, so closed
   // windows in GetRecentlyClosed can have set values in Window helper.
@@ -311,14 +312,15 @@
 SessionsGetDevicesFunction::CreateSessionModel(
     const sessions::SessionWindow& window,
     const std::string& session_tag) {
-  std::unique_ptr<windows::Window> window_model(
+  std::unique_ptr<api::windows::Window> window_model(
       CreateWindowModel(window, session_tag));
   // There is a chance that after pruning uninteresting tabs the window will be
   // empty.
-  return !window_model ? std::unique_ptr<api::sessions::Session>()
-                       : CreateSessionModelHelper(window.timestamp.ToTimeT(),
-                                                  std::unique_ptr<tabs::Tab>(),
-                                                  std::move(window_model));
+  return !window_model
+             ? nullptr
+             : CreateSessionModelHelper(window.timestamp.ToTimeT(),
+                                        std::unique_ptr<api::tabs::Tab>(),
+                                        std::move(window_model));
 }
 
 api::sessions::Device SessionsGetDevicesFunction::CreateDeviceModel(
@@ -383,11 +385,11 @@
 
 ExtensionFunction::ResponseValue SessionsRestoreFunction::GetRestoredTabResult(
     content::WebContents* contents) {
-  std::unique_ptr<tabs::Tab> tab(ExtensionTabUtil::CreateTabObject(
+  std::unique_ptr<api::tabs::Tab> tab(ExtensionTabUtil::CreateTabObject(
       contents, ExtensionTabUtil::kScrubTab, extension()));
   std::unique_ptr<api::sessions::Session> restored_session(
       CreateSessionModelHelper(base::Time::Now().ToTimeT(), std::move(tab),
-                               std::unique_ptr<windows::Window>()));
+                               std::unique_ptr<api::windows::Window>()));
   return ArgumentList(Restore::Results::Create(*restored_session));
 }
 
@@ -402,10 +404,10 @@
   std::unique_ptr<base::DictionaryValue> window_value(
       ExtensionTabUtil::CreateWindowValueForExtension(
           *browser, extension(), ExtensionTabUtil::kPopulateTabs));
-  std::unique_ptr<windows::Window> window(
-      windows::Window::FromValue(*window_value));
+  std::unique_ptr<api::windows::Window> window(
+      api::windows::Window::FromValue(*window_value));
   return ArgumentList(Restore::Results::Create(*CreateSessionModelHelper(
-      base::Time::Now().ToTimeT(), std::unique_ptr<tabs::Tab>(),
+      base::Time::Now().ToTimeT(), std::unique_ptr<api::tabs::Tab>(),
       std::move(window))));
 }
 
diff --git a/chrome/browser/extensions/api/tabs/app_window_controller.cc b/chrome/browser/extensions/api/tabs/app_window_controller.cc
index afcb3fe..81b4e16 100644
--- a/chrome/browser/extensions/api/tabs/app_window_controller.cc
+++ b/chrome/browser/extensions/api/tabs/app_window_controller.cc
@@ -38,8 +38,6 @@
 }
 
 std::string AppWindowController::GetWindowTypeText() const {
-  if (app_window_->window_type_is_panel())
-    return tabs_constants::kWindowTypeValuePanel;
   return tabs_constants::kWindowTypeValueApp;
 }
 
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
index d04a2ce..49cb95f 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -239,19 +239,16 @@
 
   bool has_bound = create_data->left || create_data->top ||
                    create_data->width || create_data->height;
-  bool is_panel = create_data->type == windows::CreateType::CREATE_TYPE_PANEL;
 
   switch (create_data->state) {
     case windows::WINDOW_STATE_MINIMIZED:
       // If minimised, default focused state should be unfocused.
-      return !(create_data->focused && *create_data->focused) && !has_bound &&
-             !is_panel;
+      return !(create_data->focused && *create_data->focused) && !has_bound;
     case windows::WINDOW_STATE_MAXIMIZED:
     case windows::WINDOW_STATE_FULLSCREEN:
     case windows::WINDOW_STATE_LOCKED_FULLSCREEN:
       // If maximised/fullscreen, default focused state should be focused.
-      return !(create_data->focused && !*create_data->focused) && !has_bound &&
-             !is_panel;
+      return !(create_data->focused && !*create_data->focused) && !has_bound;
     case windows::WINDOW_STATE_NORMAL:
     case windows::WINDOW_STATE_DOCKED:
     case windows::WINDOW_STATE_NONE:
@@ -548,20 +545,12 @@
     // Figure out window type before figuring out bounds so that default
     // bounds can be set according to the window type.
     switch (create_data->type) {
+      // TODO(stevenjb): Remove 'panel' from windows.json.
+      case windows::CREATE_TYPE_PANEL:
       case windows::CREATE_TYPE_POPUP:
         window_type = Browser::TYPE_POPUP;
         extension_id = extension()->id();
         break;
-
-      case windows::CREATE_TYPE_PANEL: {
-        extension_id = extension()->id();
-        // TODO(dimich): Eventually, remove the 'panel' values form valid
-        // window.create parameters. However, this is a more breaking change, so
-        // for now simply treat it as a POPUP.
-        window_type = Browser::TYPE_POPUP;
-        break;
-      }
-
       case windows::CREATE_TYPE_NONE:
       case windows::CREATE_TYPE_NORMAL:
         break;
diff --git a/chrome/browser/extensions/api/tabs/tabs_constants.cc b/chrome/browser/extensions/api/tabs/tabs_constants.cc
index 7524ad4..4e396657 100644
--- a/chrome/browser/extensions/api/tabs/tabs_constants.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_constants.cc
@@ -67,7 +67,6 @@
 
 const char kWindowTypeValueNormal[] = "normal";
 const char kWindowTypeValuePopup[] = "popup";
-const char kWindowTypeValuePanel[] = "panel";
 const char kWindowTypeValueApp[] = "app";
 const char kWindowTypeValueDevTools[] = "devtools";
 
diff --git a/chrome/browser/extensions/api/tabs/tabs_constants.h b/chrome/browser/extensions/api/tabs/tabs_constants.h
index fb97e80..e0b76e3 100644
--- a/chrome/browser/extensions/api/tabs/tabs_constants.h
+++ b/chrome/browser/extensions/api/tabs/tabs_constants.h
@@ -73,7 +73,6 @@
 extern const char kStatusValueLoading[];
 extern const char kWindowTypeValueNormal[];
 extern const char kWindowTypeValuePopup[];
-extern const char kWindowTypeValuePanel[];
 extern const char kWindowTypeValueApp[];
 extern const char kWindowTypeValueDevTools[];
 
diff --git a/chrome/browser/extensions/api/tabs/tabs_event_router.cc b/chrome/browser/extensions/api/tabs/tabs_event_router.cc
index dbd8462..43d4ab7 100644
--- a/chrome/browser/extensions/api/tabs/tabs_event_router.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_event_router.cc
@@ -35,8 +35,6 @@
 
 namespace extensions {
 
-namespace tabs = api::tabs;
-
 namespace {
 
 bool WillDispatchTabUpdatedEvent(
@@ -211,7 +209,7 @@
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
   std::unique_ptr<base::ListValue> args(new base::ListValue);
   auto event = std::make_unique<Event>(events::TABS_ON_CREATED,
-                                       tabs::OnCreated::kEventName,
+                                       api::tabs::OnCreated::kEventName,
                                        std::move(args), profile);
   event->user_gesture = EventRouter::USER_GESTURE_NOT_ENABLED;
   event->will_dispatch_callback =
@@ -249,8 +247,9 @@
   args->Append(std::move(object_args));
 
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
-  DispatchEvent(profile, events::TABS_ON_ATTACHED, tabs::OnAttached::kEventName,
-                std::move(args), EventRouter::USER_GESTURE_UNKNOWN);
+  DispatchEvent(profile, events::TABS_ON_ATTACHED,
+                api::tabs::OnAttached::kEventName, std::move(args),
+                EventRouter::USER_GESTURE_UNKNOWN);
 }
 
 void TabsEventRouter::TabDetachedAt(WebContents* contents,
@@ -274,8 +273,9 @@
   args->Append(std::move(object_args));
 
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
-  DispatchEvent(profile, events::TABS_ON_DETACHED, tabs::OnDetached::kEventName,
-                std::move(args), EventRouter::USER_GESTURE_UNKNOWN);
+  DispatchEvent(profile, events::TABS_ON_DETACHED,
+                api::tabs::OnDetached::kEventName, std::move(args),
+                EventRouter::USER_GESTURE_UNKNOWN);
 }
 
 void TabsEventRouter::TabClosingAt(TabStripModel* tab_strip_model,
@@ -295,8 +295,9 @@
   args->Append(std::move(object_args));
 
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
-  DispatchEvent(profile, events::TABS_ON_REMOVED, tabs::OnRemoved::kEventName,
-                std::move(args), EventRouter::USER_GESTURE_UNKNOWN);
+  DispatchEvent(profile, events::TABS_ON_REMOVED,
+                api::tabs::OnRemoved::kEventName, std::move(args),
+                EventRouter::USER_GESTURE_UNKNOWN);
 
   UnregisterForTabNotifications(contents);
 }
@@ -324,18 +325,19 @@
       ? EventRouter::USER_GESTURE_ENABLED
       : EventRouter::USER_GESTURE_NOT_ENABLED;
   DispatchEvent(profile, events::TABS_ON_SELECTION_CHANGED,
-                tabs::OnSelectionChanged::kEventName, args->CreateDeepCopy(),
-                gesture);
+                api::tabs::OnSelectionChanged::kEventName,
+                args->CreateDeepCopy(), gesture);
   DispatchEvent(profile, events::TABS_ON_ACTIVE_CHANGED,
-                tabs::OnActiveChanged::kEventName, std::move(args), gesture);
+                api::tabs::OnActiveChanged::kEventName, std::move(args),
+                gesture);
 
   // The onActivated event takes one argument: {windowId, tabId}.
   auto on_activated_args = std::make_unique<base::ListValue>();
   object_args->Set(tabs_constants::kTabIdKey, std::make_unique<Value>(tab_id));
   on_activated_args->Append(std::move(object_args));
   DispatchEvent(profile, events::TABS_ON_ACTIVATED,
-                tabs::OnActivated::kEventName, std::move(on_activated_args),
-                gesture);
+                api::tabs::OnActivated::kEventName,
+                std::move(on_activated_args), gesture);
 }
 
 void TabsEventRouter::TabSelectionChanged(
@@ -368,11 +370,11 @@
   // The onHighlighted event replaced onHighlightChanged.
   Profile* profile = tab_strip_model->profile();
   DispatchEvent(profile, events::TABS_ON_HIGHLIGHT_CHANGED,
-                tabs::OnHighlightChanged::kEventName,
+                api::tabs::OnHighlightChanged::kEventName,
                 std::unique_ptr<base::ListValue>(args->DeepCopy()),
                 EventRouter::USER_GESTURE_UNKNOWN);
   DispatchEvent(profile, events::TABS_ON_HIGHLIGHTED,
-                tabs::OnHighlighted::kEventName, std::move(args),
+                api::tabs::OnHighlighted::kEventName, std::move(args),
                 EventRouter::USER_GESTURE_UNKNOWN);
 }
 
@@ -394,7 +396,7 @@
   args->Append(std::move(object_args));
 
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
-  DispatchEvent(profile, events::TABS_ON_MOVED, tabs::OnMoved::kEventName,
+  DispatchEvent(profile, events::TABS_ON_MOVED, api::tabs::OnMoved::kEventName,
                 std::move(args), EventRouter::USER_GESTURE_UNKNOWN);
 }
 
@@ -465,7 +467,7 @@
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
 
   auto event = std::make_unique<Event>(events::TABS_ON_UPDATED,
-                                       tabs::OnUpdated::kEventName,
+                                       api::tabs::OnUpdated::kEventName,
                                        std::move(args_base), profile);
   event->user_gesture = EventRouter::USER_GESTURE_NOT_ENABLED;
   event->will_dispatch_callback =
@@ -503,7 +505,7 @@
   args->AppendInteger(old_tab_id);
 
   DispatchEvent(Profile::FromBrowserContext(new_contents->GetBrowserContext()),
-                events::TABS_ON_REPLACED, tabs::OnReplaced::kEventName,
+                events::TABS_ON_REPLACED, api::tabs::OnReplaced::kEventName,
                 std::move(args), EventRouter::USER_GESTURE_UNKNOWN);
 
   UnregisterForTabNotifications(old_contents);
@@ -541,7 +543,7 @@
   Profile* profile = Profile::FromBrowserContext(
       data.web_contents->GetBrowserContext());
   DispatchEvent(profile, events::TABS_ON_ZOOM_CHANGE,
-                tabs::OnZoomChange::kEventName,
+                api::tabs::OnZoomChange::kEventName,
                 api::tabs::OnZoomChange::Create(zoom_change_info),
                 EventRouter::USER_GESTURE_UNKNOWN);
 }
diff --git a/chrome/browser/extensions/api/tabs/tabs_test.cc b/chrome/browser/extensions/api/tabs/tabs_test.cc
index 865866b..790ac91 100644
--- a/chrome/browser/extensions/api/tabs/tabs_test.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_test.cc
@@ -1075,18 +1075,6 @@
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionWindowCreateTest, ValidateCreateWindowState) {
-  EXPECT_TRUE(base::MatchPattern(
-      RunCreateWindowExpectError(
-          "[{\"state\": \"fullscreen\", \"type\": \"panel\"}]"),
-      keys::kInvalidWindowStateError));
-  EXPECT_TRUE(base::MatchPattern(
-      RunCreateWindowExpectError(
-          "[{\"state\": \"maximized\", \"type\": \"panel\"}]"),
-      keys::kInvalidWindowStateError));
-  EXPECT_TRUE(base::MatchPattern(
-      RunCreateWindowExpectError(
-          "[{\"state\": \"minimized\", \"type\": \"panel\"}]"),
-      keys::kInvalidWindowStateError));
   EXPECT_TRUE(
       base::MatchPattern(RunCreateWindowExpectError(
                              "[{\"state\": \"minimized\", \"focused\": true}]"),
diff --git a/chrome/browser/extensions/error_console/error_console_browsertest.cc b/chrome/browser/extensions/error_console/error_console_browsertest.cc
index 2d31519a7..e724c422 100644
--- a/chrome/browser/extensions/error_console/error_console_browsertest.cc
+++ b/chrome/browser/extensions/error_console/error_console_browsertest.cc
@@ -492,8 +492,7 @@
     message =
         "Uncaught TypeError: Error in invocation of "
         "tabs.get(integer tabId, function callback): "
-        "Error at parameter 'tabId': Invalid type: "
-        "expected integer, found string.";
+        "No matching signature.";
   } else {
     // API calls are checked in schemaUtils.js with JS bindings.
     source = "extensions::" + std::string(kSchemaUtils);
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc
index 83ecbc55..1cb00f3 100644
--- a/chrome/browser/extensions/service_worker_apitest.cc
+++ b/chrome/browser/extensions/service_worker_apitest.cc
@@ -15,8 +15,8 @@
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/lazy_background_page_test_util.h"
 #include "chrome/browser/gcm/gcm_profile_service_factory.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
 #include "chrome/browser/notifications/notification_display_service_factory.h"
+#include "chrome/browser/notifications/notification_permission_context.h"
 #include "chrome/browser/notifications/stub_notification_display_service.h"
 #include "chrome/browser/permissions/permission_manager.h"
 #include "chrome/browser/permissions/permission_result.h"
@@ -405,13 +405,8 @@
   ~ServiceWorkerPushMessagingTest() override {}
 
   void GrantNotificationPermissionForTest(const GURL& url) {
-    GURL origin = url.GetOrigin();
-    DesktopNotificationProfileUtil::GrantPermission(profile(), origin);
-    ASSERT_EQ(CONTENT_SETTING_ALLOW,
-              PermissionManager::Get(profile())
-                  ->GetPermissionStatus(CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
-                                        origin, origin)
-                  .content_setting);
+    NotificationPermissionContext::UpdatePermission(profile(), url.GetOrigin(),
+                                                    CONTENT_SETTING_ALLOW);
   }
 
   PushMessagingAppIdentifier GetAppIdentifierForServiceWorkerRegistration(
@@ -1230,7 +1225,7 @@
   ASSERT_TRUE(extension);
   GURL extension_url = extension->url();
 
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest(extension_url));
+  GrantNotificationPermissionForTest(extension_url);
 
   GURL url = extension->GetResourceURL("page.html");
   ui_test_utils::NavigateToURL(browser(), url);
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
index 74e8d571d..50ddca24 100644
--- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
+++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
@@ -430,8 +430,9 @@
   if (io_data->policy_header_helper())
     io_data->policy_header_helper()->AddPolicyHeaders(request->url(), request);
 
-  signin::FixAccountConsistencyRequestHeader(request, GURL() /* redirect_url */,
-                                             io_data);
+  signin::ChromeRequestAdapter signin_request_adapter(request);
+  signin::FixAccountConsistencyRequestHeader(
+      &signin_request_adapter, GURL() /* redirect_url */, io_data);
 
   AppendStandardResourceThrottles(request,
                                   resource_context,
@@ -600,8 +601,9 @@
   const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
   ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context);
 
-  signin::ProcessAccountConsistencyResponseHeaders(request, GURL(),
-                                                   io_data->IsOffTheRecord());
+  signin::ResponseAdapter signin_response_adapter(request);
+  signin::ProcessAccountConsistencyResponseHeaders(
+      &signin_response_adapter, GURL(), io_data->IsOffTheRecord());
 
   // Built-in additional protection for the chrome web store origin.
 #if BUILDFLAG(ENABLE_EXTENSIONS)
@@ -676,9 +678,12 @@
   // X-Chrome-Connected header to all Gaia requests from a connected profile so
   // Gaia could return a 204 response and let Chrome handle the action with
   // native UI.
-  signin::FixAccountConsistencyRequestHeader(request, redirect_url, io_data);
-  signin::ProcessAccountConsistencyResponseHeaders(request, redirect_url,
-                                                   io_data->IsOffTheRecord());
+  signin::ChromeRequestAdapter signin_request_adapter(request);
+  signin::FixAccountConsistencyRequestHeader(&signin_request_adapter,
+                                             redirect_url, io_data);
+  signin::ResponseAdapter signin_response_adapter(request);
+  signin::ProcessAccountConsistencyResponseHeaders(
+      &signin_response_adapter, redirect_url, io_data->IsOffTheRecord());
 
   if (io_data->policy_header_helper())
     io_data->policy_header_helper()->AddPolicyHeaders(redirect_url, request);
diff --git a/chrome/browser/media/chromeos_login_media_access_handler.cc b/chrome/browser/media/chromeos_login_media_access_handler.cc
index 262bfd8..ec3a0572 100644
--- a/chrome/browser/media/chromeos_login_media_access_handler.cc
+++ b/chrome/browser/media/chromeos_login_media_access_handler.cc
@@ -27,13 +27,8 @@
     const extensions::Extension* extension) {
   if (!web_contents)
     return false;
-  chromeos::LoginDisplayHost* login_display_host =
-      chromeos::LoginDisplayHost::default_host();
-  chromeos::WebUILoginView* webui_login_view =
-      login_display_host ? login_display_host->GetWebUILoginView() : nullptr;
-  content::WebContents* login_web_contents =
-      webui_login_view ? webui_login_view->GetWebContents() : nullptr;
-  return web_contents == login_web_contents;
+  chromeos::LoginDisplayHost* host = chromeos::LoginDisplayHost::default_host();
+  return host && web_contents == host->GetOobeWebContents();
 }
 
 bool ChromeOSLoginMediaAccessHandler::CheckMediaAccessPermission(
diff --git a/chrome/browser/notifications/desktop_notification_profile_util.cc b/chrome/browser/notifications/desktop_notification_profile_util.cc
deleted file mode 100644
index 4217bfc1..0000000
--- a/chrome/browser/notifications/desktop_notification_profile_util.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
-
-#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
-#include "chrome/browser/profiles/profile.h"
-#include "components/content_settings/core/browser/host_content_settings_map.h"
-#include "components/content_settings/core/common/content_settings_pattern.h"
-
-void DesktopNotificationProfileUtil::ResetToDefaultContentSetting(
-    Profile* profile) {
-  HostContentSettingsMapFactory::GetForProfile(profile)
-      ->SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
-                                 CONTENT_SETTING_DEFAULT);
-}
-
-// Clears the notifications setting for the given pattern.
-void DesktopNotificationProfileUtil::ClearSetting(Profile* profile,
-                                                  const GURL& origin) {
-  HostContentSettingsMapFactory::GetForProfile(profile)
-      ->SetContentSettingDefaultScope(
-          origin, GURL(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
-          content_settings::ResourceIdentifier(), CONTENT_SETTING_DEFAULT);
-}
-
-// Methods to setup and modify permission preferences.
-void DesktopNotificationProfileUtil::GrantPermission(
-    Profile* profile, const GURL& origin) {
-  HostContentSettingsMapFactory::GetForProfile(profile)
-      ->SetContentSettingDefaultScope(
-          origin, GURL(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
-          content_settings::ResourceIdentifier(), CONTENT_SETTING_ALLOW);
-}
-
-void DesktopNotificationProfileUtil::DenyPermission(
-    Profile* profile, const GURL& origin) {
-  HostContentSettingsMapFactory::GetForProfile(profile)
-      ->SetContentSettingDefaultScope(
-          origin, GURL(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
-          content_settings::ResourceIdentifier(), CONTENT_SETTING_BLOCK);
-}
-
-void DesktopNotificationProfileUtil::GetNotificationsSettings(
-    Profile* profile, ContentSettingsForOneType* settings) {
-  HostContentSettingsMapFactory::GetForProfile(profile)
-      ->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
-                              content_settings::ResourceIdentifier(),
-                              settings);
-}
diff --git a/chrome/browser/notifications/desktop_notification_profile_util.h b/chrome/browser/notifications/desktop_notification_profile_util.h
deleted file mode 100644
index e2bd26e3..0000000
--- a/chrome/browser/notifications/desktop_notification_profile_util.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATION_PROFILE_UTIL_H_
-#define CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATION_PROFILE_UTIL_H_
-
-#include "base/macros.h"
-#include "components/content_settings/core/common/content_settings.h"
-
-class Profile;
-
-// A series of common operations to interact with the profile's Desktop
-// Notification settings.
-class DesktopNotificationProfileUtil {
- public:
-  // NOTE: This should only be called on the UI thread.
-  static void ResetToDefaultContentSetting(Profile* profile);
-
-  // Clears the notifications setting for the given url.
-  static void ClearSetting(Profile* profile, const GURL& origin);
-
-  // Methods to setup and modify permission preferences.
-  static void GrantPermission(Profile* profile, const GURL& origin);
-  static void DenyPermission(Profile* profile, const GURL& origin);
-  static void GetNotificationsSettings(
-      Profile* profile, ContentSettingsForOneType* settings);
-
- private:
-  DISALLOW_IMPLICIT_CONSTRUCTORS(DesktopNotificationProfileUtil);
-};
-
-#endif  // CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATION_PROFILE_UTIL_H_
diff --git a/chrome/browser/notifications/desktop_notification_profile_util_unittest.cc b/chrome/browser/notifications/desktop_notification_profile_util_unittest.cc
deleted file mode 100644
index 53024dec..0000000
--- a/chrome/browser/notifications/desktop_notification_profile_util_unittest.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
-
-#include "base/bind.h"
-#include "chrome/test/base/chrome_render_view_host_test_harness.h"
-#include "chrome/test/base/testing_profile.h"
-#include "components/content_settings/core/common/content_settings.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-class DesktopNotificationServiceTest : public ChromeRenderViewHostTestHarness {
- protected:
-  void SetUp() override { ChromeRenderViewHostTestHarness::SetUp(); }
-};
-
-
-TEST_F(DesktopNotificationServiceTest, GetNotificationsSettings) {
-  DesktopNotificationProfileUtil::GrantPermission(profile(),
-                                                  GURL("http://allowed2.com"));
-  DesktopNotificationProfileUtil::GrantPermission(profile(),
-                                                  GURL("http://allowed.com"));
-  DesktopNotificationProfileUtil::DenyPermission(profile(),
-                                                 GURL("http://denied2.com"));
-  DesktopNotificationProfileUtil::DenyPermission(profile(),
-                                                 GURL("http://denied.com"));
-
-  ContentSettingsForOneType settings;
-  DesktopNotificationProfileUtil::GetNotificationsSettings(
-      profile(), &settings);
-  // |settings| contains the default setting and 4 exceptions.
-  ASSERT_EQ(5u, settings.size());
-
-  EXPECT_EQ(ContentSettingsPattern::FromURLNoWildcard(
-                GURL("http://allowed.com")),
-            settings[0].primary_pattern);
-  EXPECT_EQ(CONTENT_SETTING_ALLOW, settings[0].GetContentSetting());
-  EXPECT_EQ(ContentSettingsPattern::FromURLNoWildcard(
-                GURL("http://allowed2.com")),
-            settings[1].primary_pattern);
-  EXPECT_EQ(CONTENT_SETTING_ALLOW, settings[1].GetContentSetting());
-  EXPECT_EQ(ContentSettingsPattern::FromURLNoWildcard(
-                GURL("http://denied.com")),
-            settings[2].primary_pattern);
-  EXPECT_EQ(CONTENT_SETTING_BLOCK, settings[2].GetContentSetting());
-  EXPECT_EQ(ContentSettingsPattern::FromURLNoWildcard(
-                GURL("http://denied2.com")),
-            settings[3].primary_pattern);
-  EXPECT_EQ(CONTENT_SETTING_BLOCK, settings[3].GetContentSetting());
-  EXPECT_EQ(ContentSettingsPattern::Wildcard(),
-            settings[4].primary_pattern);
-  EXPECT_EQ(CONTENT_SETTING_ASK, settings[4].GetContentSetting());
-}
diff --git a/chrome/browser/notifications/message_center_notification_manager_interactive_uitest.cc b/chrome/browser/notifications/message_center_notification_manager_interactive_uitest.cc
index 974b07e3..a29b061 100644
--- a/chrome/browser/notifications/message_center_notification_manager_interactive_uitest.cc
+++ b/chrome/browser/notifications/message_center_notification_manager_interactive_uitest.cc
@@ -8,8 +8,8 @@
 #include "base/path_service.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
 #include "chrome/browser/notifications/notification_common.h"
+#include "chrome/browser/notifications/notification_permission_context.h"
 #include "chrome/browser/notifications/notification_ui_manager.h"
 #include "chrome/browser/permissions/permission_manager.h"
 #include "chrome/browser/permissions/permission_result.h"
@@ -54,15 +54,8 @@
   // Grants permission to display Web Notifications for origin of the test
   // page that's being used in this browser test.
   void GrantNotificationPermissionForTest() const {
-    GURL origin = TestPageUrl().GetOrigin();
-
-    DesktopNotificationProfileUtil::GrantPermission(browser()->profile(),
-                                                    origin);
-    ASSERT_EQ(CONTENT_SETTING_ALLOW,
-              PermissionManager::Get(browser()->profile())
-                  ->GetPermissionStatus(CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
-                                        origin, origin)
-                  .content_setting);
+    NotificationPermissionContext::UpdatePermission(
+        browser()->profile(), TestPageUrl().GetOrigin(), CONTENT_SETTING_ALLOW);
   }
 
   // Executes |script| and stores the result as a string in |result|. A boolean
@@ -96,7 +89,7 @@
 // crbug.com/767868
 IN_PROC_BROWSER_TEST_F(MessageCenterNotificationManagerBrowserTest,
                        CloseDisplayedPersistentNotification) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   std::string script_result;
   ASSERT_TRUE(RunScript("DisplayPersistentNotification('action_close')",
diff --git a/chrome/browser/notifications/non_persistent_notification_handler.cc b/chrome/browser/notifications/non_persistent_notification_handler.cc
index 23f571b..6b8925d 100644
--- a/chrome/browser/notifications/non_persistent_notification_handler.cc
+++ b/chrome/browser/notifications/non_persistent_notification_handler.cc
@@ -8,8 +8,8 @@
 #include "base/callback.h"
 #include "base/strings/nullable_string16.h"
 #include "build/build_config.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
 #include "chrome/browser/notifications/notification_common.h"
+#include "chrome/browser/notifications/notification_permission_context.h"
 #include "content/public/browser/notification_event_dispatcher.h"
 
 #if !defined(OS_ANDROID)
@@ -92,7 +92,8 @@
 void NonPersistentNotificationHandler::DisableNotifications(
     Profile* profile,
     const GURL& origin) {
-  DesktopNotificationProfileUtil::DenyPermission(profile, origin);
+  NotificationPermissionContext::UpdatePermission(profile, origin,
+                                                  CONTENT_SETTING_BLOCK);
 }
 
 void NonPersistentNotificationHandler::OpenSettings(Profile* profile,
diff --git a/chrome/browser/notifications/notification_interactive_uitest.cc b/chrome/browser/notifications/notification_interactive_uitest.cc
index a663a0c..06dafe19 100644
--- a/chrome/browser/notifications/notification_interactive_uitest.cc
+++ b/chrome/browser/notifications/notification_interactive_uitest.cc
@@ -215,7 +215,7 @@
   CreateSimpleNotification(browser(), false);
   ASSERT_EQ(0, GetNotificationCount());
   ContentSettingsForOneType settings;
-  GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings);
+  GetDisabledContentSettings(&settings);
   EXPECT_TRUE(CheckOriginInSetting(settings, GetTestPageURL()));
 }
 
@@ -228,13 +228,11 @@
   CreateSimpleNotification(browser(), false);
   ASSERT_EQ(0, GetNotificationCount());
   ContentSettingsForOneType settings;
-  GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings);
+  GetDisabledContentSettings(&settings);
   EXPECT_EQ(0U, settings.size());
 }
 
 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestPermissionAPI) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  EnablePermissionsEmbargo(&scoped_feature_list);
   ASSERT_TRUE(embedded_test_server()->Start());
 
   // Test that Notification.permission returns the right thing.
@@ -246,8 +244,14 @@
 
   DenyOrigin(GetTestPageURL().GetOrigin());
   EXPECT_EQ("denied", QueryPermissionStatus(browser()));
+}
 
-  DropOriginPreference(GetTestPageURL().GetOrigin());
+IN_PROC_BROWSER_TEST_F(NotificationsTest, TestPermissionEmbargo) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  EnablePermissionsEmbargo(&scoped_feature_list);
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
 
   // Verify embargo behaviour - automatically blocked after 3 dismisses.
   ASSERT_TRUE(RequestAndDismissPermission(browser()));
@@ -349,7 +353,7 @@
 
   DenyOrigin(GetTestPageURL().GetOrigin());
   ContentSettingsForOneType settings;
-  GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings);
+  GetDisabledContentSettings(&settings);
   ASSERT_TRUE(CheckOriginInSetting(settings, GetTestPageURL().GetOrigin()));
 
   EXPECT_EQ(1, GetNotificationCount());
diff --git a/chrome/browser/notifications/notification_interactive_uitest_support.cc b/chrome/browser/notifications/notification_interactive_uitest_support.cc
index e857714..1df4dca 100644
--- a/chrome/browser/notifications/notification_interactive_uitest_support.cc
+++ b/chrome/browser/notifications/notification_interactive_uitest_support.cc
@@ -6,7 +6,7 @@
 
 #include "base/run_loop.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
+#include "chrome/browser/notifications/notification_permission_context.h"
 #include "chrome/browser/permissions/permission_request_manager.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
@@ -142,13 +142,13 @@
 }
 
 void NotificationsTest::DenyOrigin(const GURL& origin) {
-  DropOriginPreference(origin);
-  DesktopNotificationProfileUtil::DenyPermission(browser()->profile(), origin);
+  NotificationPermissionContext::UpdatePermission(browser()->profile(), origin,
+                                                  CONTENT_SETTING_BLOCK);
 }
 
 void NotificationsTest::AllowOrigin(const GURL& origin) {
-  DropOriginPreference(origin);
-  DesktopNotificationProfileUtil::GrantPermission(browser()->profile(), origin);
+  NotificationPermissionContext::UpdatePermission(browser()->profile(), origin,
+                                                  CONTENT_SETTING_ALLOW);
 }
 
 void NotificationsTest::AllowAllOrigins() {
@@ -256,14 +256,14 @@
   return observer.Wait();
 }
 
-void NotificationsTest::GetPrefsByContentSetting(
-    ContentSetting setting,
+void NotificationsTest::GetDisabledContentSettings(
     ContentSettingsForOneType* settings) {
-  DesktopNotificationProfileUtil::GetNotificationsSettings(browser()->profile(),
-                                                           settings);
-  for (ContentSettingsForOneType::iterator it = settings->begin();
-       it != settings->end();) {
-    if (it->GetContentSetting() != setting ||
+  HostContentSettingsMapFactory::GetForProfile(browser()->profile())
+      ->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
+                              content_settings::ResourceIdentifier(), settings);
+
+  for (auto it = settings->begin(); it != settings->end();) {
+    if (it->GetContentSetting() != CONTENT_SETTING_BLOCK ||
         it->source.compare("preference") != 0) {
       it = settings->erase(it);
     } else {
@@ -311,7 +311,3 @@
       {});
 #endif  //  BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS)
 }
-
-void NotificationsTest::DropOriginPreference(const GURL& origin) {
-  DesktopNotificationProfileUtil::ClearSetting(browser()->profile(), origin);
-}
diff --git a/chrome/browser/notifications/notification_interactive_uitest_support.h b/chrome/browser/notifications/notification_interactive_uitest_support.h
index 0fadada..a71e8e7 100644
--- a/chrome/browser/notifications/notification_interactive_uitest_support.h
+++ b/chrome/browser/notifications/notification_interactive_uitest_support.h
@@ -60,8 +60,7 @@
   bool RequestPermissionAndWait(Browser* browser);
   std::string QueryPermissionStatus(Browser* browser);
   bool CancelNotification(const char* notification_id, Browser* browser);
-  void GetPrefsByContentSetting(ContentSetting setting,
-                                ContentSettingsForOneType* settings);
+  void GetDisabledContentSettings(ContentSettingsForOneType* settings);
   bool CheckOriginInSetting(const ContentSettingsForOneType& settings,
                             const GURL& origin);
 
diff --git a/chrome/browser/notifications/notification_permission_context.cc b/chrome/browser/notifications/notification_permission_context.cc
index 8d551c4..3b0e0d2aa 100644
--- a/chrome/browser/notifications/notification_permission_context.cc
+++ b/chrome/browser/notifications/notification_permission_context.cc
@@ -12,9 +12,10 @@
 #include "base/stl_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/timer/timer.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
+#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/permissions/permission_request_id.h"
 #include "chrome/browser/profiles/profile.h"
+#include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/common/content_settings_pattern.h"
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "content/public/browser/browser_thread.h"
@@ -168,6 +169,25 @@
 
 DEFINE_WEB_CONTENTS_USER_DATA_KEY(VisibilityTimerTabHelper);
 
+// static
+void NotificationPermissionContext::UpdatePermission(Profile* profile,
+                                                     const GURL& origin,
+                                                     ContentSetting setting) {
+  switch (setting) {
+    case CONTENT_SETTING_ALLOW:
+    case CONTENT_SETTING_BLOCK:
+    case CONTENT_SETTING_DEFAULT:
+      HostContentSettingsMapFactory::GetForProfile(profile)
+          ->SetContentSettingDefaultScope(
+              origin, GURL(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
+              content_settings::ResourceIdentifier(), setting);
+      break;
+
+    default:
+      NOTREACHED();
+  }
+}
+
 NotificationPermissionContext::NotificationPermissionContext(Profile* profile)
     : PermissionContextBase(profile,
                             CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
@@ -232,7 +252,7 @@
 void NotificationPermissionContext::ResetPermission(
     const GURL& requesting_origin,
     const GURL& embedder_origin) {
-  DesktopNotificationProfileUtil::ClearSetting(profile(), requesting_origin);
+  UpdatePermission(profile(), requesting_origin, CONTENT_SETTING_DEFAULT);
 }
 
 void NotificationPermissionContext::DecidePermission(
@@ -292,14 +312,7 @@
     ContentSetting content_setting) {
   DCHECK(content_setting == CONTENT_SETTING_ALLOW ||
          content_setting == CONTENT_SETTING_BLOCK);
-
-  if (content_setting == CONTENT_SETTING_ALLOW) {
-    DesktopNotificationProfileUtil::GrantPermission(profile(),
-                                                    requesting_origin);
-  } else {
-    DesktopNotificationProfileUtil::DenyPermission(profile(),
-                                                   requesting_origin);
-  }
+  UpdatePermission(profile(), requesting_origin, content_setting);
 }
 
 bool NotificationPermissionContext::IsRestrictedToSecureOrigins() const {
diff --git a/chrome/browser/notifications/notification_permission_context.h b/chrome/browser/notifications/notification_permission_context.h
index 56bec56..843ca79 100644
--- a/chrome/browser/notifications/notification_permission_context.h
+++ b/chrome/browser/notifications/notification_permission_context.h
@@ -15,6 +15,11 @@
 
 class NotificationPermissionContext : public PermissionContextBase {
  public:
+  // Helper method for updating the permission state of |origin| to |setting|.
+  static void UpdatePermission(Profile* profile,
+                               const GURL& origin,
+                               ContentSetting setting);
+
   explicit NotificationPermissionContext(Profile* profile);
   ~NotificationPermissionContext() override;
 
diff --git a/chrome/browser/notifications/notification_permission_context_unittest.cc b/chrome/browser/notifications/notification_permission_context_unittest.cc
index f97dc0e7..8058b48 100644
--- a/chrome/browser/notifications/notification_permission_context_unittest.cc
+++ b/chrome/browser/notifications/notification_permission_context_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
 #include "chrome/browser/permissions/permission_manager.h"
 #include "chrome/browser/permissions/permission_manager_factory.h"
 #include "chrome/browser/permissions/permission_request_id.h"
@@ -449,6 +448,49 @@
             permission_context.GetContentSettingFromMap(url, url));
 }
 
+TEST_F(NotificationPermissionContextTest, GetNotificationsSettings) {
+  // Verifies that notification permissions, which don't store a secondary URL,
+  // are stored appropriately in the HostContentSettingsMap.
+
+  NotificationPermissionContext::UpdatePermission(
+      profile(), GURL("https://allowed.com"), CONTENT_SETTING_ALLOW);
+  NotificationPermissionContext::UpdatePermission(
+      profile(), GURL("https://allowed2.com"), CONTENT_SETTING_ALLOW);
+
+  NotificationPermissionContext::UpdatePermission(
+      profile(), GURL("https://denied.com"), CONTENT_SETTING_BLOCK);
+  NotificationPermissionContext::UpdatePermission(
+      profile(), GURL("https://denied2.com"), CONTENT_SETTING_BLOCK);
+
+  ContentSettingsForOneType settings;
+  HostContentSettingsMapFactory::GetForProfile(profile())
+      ->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
+                              content_settings::ResourceIdentifier(),
+                              &settings);
+
+  // |settings| contains the default setting and 4 exceptions.
+  ASSERT_EQ(5u, settings.size());
+
+  EXPECT_EQ(
+      ContentSettingsPattern::FromURLNoWildcard(GURL("https://allowed.com")),
+      settings[0].primary_pattern);
+  EXPECT_EQ(CONTENT_SETTING_ALLOW, settings[0].GetContentSetting());
+  EXPECT_EQ(
+      ContentSettingsPattern::FromURLNoWildcard(GURL("https://allowed2.com")),
+      settings[1].primary_pattern);
+  EXPECT_EQ(CONTENT_SETTING_ALLOW, settings[1].GetContentSetting());
+  EXPECT_EQ(
+      ContentSettingsPattern::FromURLNoWildcard(GURL("https://denied.com")),
+      settings[2].primary_pattern);
+  EXPECT_EQ(CONTENT_SETTING_BLOCK, settings[2].GetContentSetting());
+  EXPECT_EQ(
+      ContentSettingsPattern::FromURLNoWildcard(GURL("https://denied2.com")),
+      settings[3].primary_pattern);
+  EXPECT_EQ(CONTENT_SETTING_BLOCK, settings[3].GetContentSetting());
+  EXPECT_EQ(ContentSettingsPattern::Wildcard(), settings[4].primary_pattern);
+  EXPECT_EQ(CONTENT_SETTING_ASK, settings[4].GetContentSetting());
+}
+
 #if BUILDFLAG(ENABLE_EXTENSIONS)
 TEST_F(NotificationPermissionContextTest, ExtensionPermissionAskByDefault) {
   // Verifies that notification permission is not granted to extensions by
diff --git a/chrome/browser/notifications/persistent_notification_handler.cc b/chrome/browser/notifications/persistent_notification_handler.cc
index a20dfd0..7446610 100644
--- a/chrome/browser/notifications/persistent_notification_handler.cc
+++ b/chrome/browser/notifications/persistent_notification_handler.cc
@@ -6,7 +6,7 @@
 
 #include "base/callback.h"
 #include "base/logging.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
+#include "chrome/browser/notifications/notification_permission_context.h"
 #include "chrome/browser/notifications/platform_notification_service_impl.h"
 #include "chrome/browser/profiles/profile.h"
 
@@ -46,7 +46,8 @@
 
 void PersistentNotificationHandler::DisableNotifications(Profile* profile,
                                                          const GURL& origin) {
-  DesktopNotificationProfileUtil::DenyPermission(profile, origin);
+  NotificationPermissionContext::UpdatePermission(profile, origin,
+                                                  CONTENT_SETTING_BLOCK);
 }
 
 void PersistentNotificationHandler::OpenSettings(Profile* profile,
diff --git a/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc b/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc
index b84c393..6fded5f 100644
--- a/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc
+++ b/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc
@@ -20,11 +20,11 @@
 #include "build/build_config.h"
 #include "chrome/browser/engagement/site_engagement_score.h"
 #include "chrome/browser/engagement/site_engagement_service.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
 #include "chrome/browser/notifications/notification_common.h"
 #include "chrome/browser/notifications/notification_display_service_impl.h"
 #include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/browser/notifications/notification_handler.h"
+#include "chrome/browser/notifications/notification_permission_context.h"
 #include "chrome/browser/notifications/notification_test_util.h"
 #include "chrome/browser/notifications/platform_notification_service_impl.h"
 #include "chrome/browser/permissions/permission_manager.h"
@@ -125,15 +125,8 @@
   // Grants permission to display Web Notifications for origin of the test
   // page that's being used in this browser test.
   void GrantNotificationPermissionForTest() const {
-    GURL origin = TestPageUrl().GetOrigin();
-
-    DesktopNotificationProfileUtil::GrantPermission(browser()->profile(),
-                                                    origin);
-    ASSERT_EQ(CONTENT_SETTING_ALLOW,
-              PermissionManager::Get(browser()->profile())
-                  ->GetPermissionStatus(CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
-                                        origin, origin)
-                  .content_setting);
+    NotificationPermissionContext::UpdatePermission(
+        browser()->profile(), TestPageUrl().GetOrigin(), CONTENT_SETTING_ALLOW);
   }
 
   bool RequestAndAcceptPermission() {
@@ -246,7 +239,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        NonPersistentWebNotificationOptionsReflection) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   // First, test the default values.
 
@@ -350,7 +343,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        DisplayAndCloseNonPersistentNotification) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   std::string script_result;
   ASSERT_TRUE(
@@ -370,7 +363,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        WebNotificationOptionsReflection) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   // First, test the default values.
 
@@ -446,7 +439,7 @@
 #if !defined(OS_CHROMEOS)
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        WebNotificationSiteSettingsButton) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   // Expect 0.5 engagement for the navigation.
   content::WebContents* web_contents =
@@ -484,7 +477,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        WebNotificationOptionsVibrationPattern) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   std::string script_result;
   ASSERT_TRUE(RunScript("DisplayPersistentNotificationVibrate()",
@@ -505,7 +498,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        CloseDisplayedPersistentNotification) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   // Expect 0.5 engagement for the navigation.
   EXPECT_DOUBLE_EQ(0.5, GetEngagementScore(GetLastCommittedURL()));
@@ -535,7 +528,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        UserClosesPersistentNotification) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   // Expect 0.5 engagement for the navigation.
   EXPECT_DOUBLE_EQ(0.5, GetEngagementScore(GetLastCommittedURL()));
@@ -652,7 +645,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        DataUrlAsNotificationImage) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   std::string script_result;
   ASSERT_TRUE(RunScript("DisplayPersistentNotificationDataUrlImage()",
@@ -673,7 +666,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        BlobAsNotificationImage) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   std::string script_result;
   ASSERT_TRUE(RunScript("DisplayPersistentNotificationBlobImage()",
@@ -694,7 +687,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        DisplayPersistentNotificationWithActionButtons) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   // Expect 0.5 engagement for the navigation.
   EXPECT_DOUBLE_EQ(0.5, GetEngagementScore(GetLastCommittedURL()));
@@ -744,7 +737,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        DisplayPersistentNotificationWithReplyButton) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   // Expect 0.5 engagement for the navigation.
   EXPECT_DOUBLE_EQ(0.5, GetEngagementScore(GetLastCommittedURL()));
@@ -882,7 +875,7 @@
 
 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
                        TestShouldDisplayFullscreen) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   // Set the page fullscreen
   browser()->exclusive_access_manager()->fullscreen_controller()->
@@ -1014,7 +1007,7 @@
 IN_PROC_BROWSER_TEST_F(
     PlatformNotificationServiceWithoutContentImageBrowserTest,
     KillSwitch) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   std::string script_result;
   ASSERT_TRUE(
@@ -1033,7 +1026,7 @@
 IN_PROC_BROWSER_TEST_F(
     PlatformNotificationServiceWithoutContentImageBrowserTest,
     KillSwitch_NonPersistentNotifications) {
-  ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest());
+  GrantNotificationPermissionForTest();
 
   std::string script_result;
   ASSERT_TRUE(RunScript(
diff --git a/chrome/browser/notifications/web_page_notifier_controller.cc b/chrome/browser/notifications/web_page_notifier_controller.cc
index 36ff5b3..bcf620d 100644
--- a/chrome/browser/notifications/web_page_notifier_controller.cc
+++ b/chrome/browser/notifications/web_page_notifier_controller.cc
@@ -8,7 +8,7 @@
 #include "base/task/cancelable_task_tracker.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
-#include "chrome/browser/notifications/desktop_notification_profile_util.h"
+#include "chrome/browser/notifications/notification_permission_context.h"
 #include "chrome/browser/notifications/notifier_state_tracker.h"
 #include "chrome/browser/notifications/notifier_state_tracker_factory.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
@@ -25,7 +25,9 @@
   std::vector<ash::mojom::NotifierUiDataPtr> notifiers;
 
   ContentSettingsForOneType settings;
-  DesktopNotificationProfileUtil::GetNotificationsSettings(profile, &settings);
+  HostContentSettingsMapFactory::GetForProfile(profile)->GetSettingsForOneType(
+      CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
+      content_settings::ResourceIdentifier(), &settings);
 
   favicon::FaviconService* const favicon_service =
       FaviconServiceFactory::GetForProfile(profile,
@@ -92,13 +94,9 @@
 
   if (differs_from_default_value) {
     if (notifier_id.url.is_valid()) {
-      if (enabled) {
-        DesktopNotificationProfileUtil::GrantPermission(profile,
-                                                        notifier_id.url);
-      } else {
-        DesktopNotificationProfileUtil::DenyPermission(profile,
-                                                       notifier_id.url);
-      }
+      NotificationPermissionContext::UpdatePermission(
+          profile, notifier_id.url,
+          enabled ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK);
     } else {
       LOG(ERROR) << "Invalid url pattern: "
                  << notifier_id.url.possibly_invalid_spec();
@@ -118,7 +116,7 @@
 
     if (pattern.IsValid()) {
       // Note that we don't use
-      // DesktopNotificationProfileUtil::ClearSetting()
+      // NotificationPermissionContext::UpdatePermission()
       // here because pattern might be from user manual input and not match
       // the default one used by ClearSetting().
       HostContentSettingsMapFactory::GetForProfile(profile)
diff --git a/chrome/browser/prefs/pref_service_syncable_util.cc b/chrome/browser/prefs/pref_service_syncable_util.cc
index 9ec37af..ecd3151f 100644
--- a/chrome/browser/prefs/pref_service_syncable_util.cc
+++ b/chrome/browser/prefs/pref_service_syncable_util.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
 #include "components/sync_preferences/pref_service_syncable.h"
+#include "components/translate/core/browser/translate_prefs.h"
 
 #if defined(OS_ANDROID)
 #include "components/proxy_config/proxy_config_pref_names.h"
@@ -40,6 +41,8 @@
   overlay_pref_names.push_back(prefs::kBrowserWindowPlacement);
   overlay_pref_names.push_back(prefs::kMediaRouterTabMirroringSources);
   overlay_pref_names.push_back(prefs::kSaveFileDefaultDirectory);
+  overlay_pref_names.push_back(
+      translate::TranslatePrefs::kPrefTranslateSiteBlacklist);
 #if defined(OS_ANDROID)
   overlay_pref_names.push_back(proxy_config::prefs::kProxy);
 #endif
diff --git a/chrome/browser/previews/previews_infobar_delegate.cc b/chrome/browser/previews/previews_infobar_delegate.cc
index 57360b0d3..4acd9537 100644
--- a/chrome/browser/previews/previews_infobar_delegate.cc
+++ b/chrome/browser/previews/previews_infobar_delegate.cc
@@ -70,6 +70,7 @@
     case previews::PreviewsType::OFFLINE:
     case previews::PreviewsType::AMP_REDIRECTION:
     case previews::PreviewsType::NOSCRIPT:
+    case previews::PreviewsType::RESOURCE_LOADING_HINTS:
       // Prevent previews and lite page modes from showing after reload.
       web_contents->GetController().Reload(
           content::ReloadType::DISABLE_PREVIEWS, true);
diff --git a/chrome/browser/previews/previews_service.cc b/chrome/browser/previews/previews_service.cc
index 0e679d6..37f45e2 100644
--- a/chrome/browser/previews/previews_service.cc
+++ b/chrome/browser/previews/previews_service.cc
@@ -44,6 +44,8 @@
     case previews::PreviewsType::UNSPECIFIED:
       // Not a real previews type so treat as false.
       return false;
+    case previews::PreviewsType::RESOURCE_LOADING_HINTS:
+      return previews::params::IsResourceLoadingHintsEnabled();
     case previews::PreviewsType::NONE:
     case previews::PreviewsType::LAST:
       break;
@@ -66,6 +68,8 @@
       return previews::params::AMPRedirectionPreviewsVersion();
     case previews::PreviewsType::NOSCRIPT:
       return previews::params::NoScriptPreviewsVersion();
+    case previews::PreviewsType::RESOURCE_LOADING_HINTS:
+      return previews::params::ResourceLoadingHintsVersion();
     case previews::PreviewsType::NONE:
     case previews::PreviewsType::UNSPECIFIED:
     case previews::PreviewsType::LAST:
diff --git a/chrome/browser/resources/local_ntp/custom_backgrounds.css b/chrome/browser/resources/local_ntp/custom_backgrounds.css
index 7c808a1..bb34ad8 100644
--- a/chrome/browser/resources/local_ntp/custom_backgrounds.css
+++ b/chrome/browser/resources/local_ntp/custom_backgrounds.css
@@ -15,6 +15,10 @@
   background-color: rgb(241, 243, 244);
 }
 
+.non-white-bg #edit-bg:hover {
+  background-color: rgba(255, 255, 255, .1);
+}
+
 #edit-bg-gear:focus {
   outline: 0;
 }
diff --git a/chrome/browser/resources/settings/a11y_page/tts_subpage.html b/chrome/browser/resources/settings/a11y_page/tts_subpage.html
index d51e8fae..4c1dca4 100644
--- a/chrome/browser/resources/settings/a11y_page/tts_subpage.html
+++ b/chrome/browser/resources/settings/a11y_page/tts_subpage.html
@@ -38,30 +38,33 @@
 
     <h2>$i18n{textToSpeechProperties}</h2>
     <div class="settings-box first">
-      <div class="start">$i18n{textToSpeechRate}</div>
+      <div class="start" id="rate">$i18n{textToSpeechRate}</div>
       <display-size-slider
           pref="{{prefs.settings.tts.speech_rate}}"
           ticks="[[speechRateTicks_()]]"
           min-label="$i18n{textToSpeechRateMinimumLabel}"
-          max-label="$i18n{textToSpeechRateMaximumLabel}">
+          max-label="$i18n{textToSpeechRateMaximumLabel}"
+          aria-describedby="rate">
       </display-size-slider>
     </div>
     <div class="settings-box continuation">
-      <div class="start">$i18n{textToSpeechPitch}</div>
+      <div class="start" id="pitch">$i18n{textToSpeechPitch}</div>
       <display-size-slider
           pref="{{prefs.settings.tts.speech_pitch}}"
           ticks="[[speechPitchTicks_()]]"
           min-label="$i18n{textToSpeechPitchMinimumLabel}"
-          max-label="$i18n{textToSpeechPitchMaximumLabel}">
+          max-label="$i18n{textToSpeechPitchMaximumLabel}"
+          aria-describeby="pitch">
       </display-size-slider>
     </div>
     <div class="settings-box continuation">
-      <div class="start">$i18n{textToSpeechVolume}</div>
+      <div class="start" id="volume">$i18n{textToSpeechVolume}</div>
       <display-size-slider
           pref="{{prefs.settings.tts.speech_volume}}"
           ticks="[[speechVolumeTicks_()]]"
           min-label="$i18n{textToSpeechVolumeMinimumLabel}"
-          max-label="$i18n{textToSpeechVolumeMaximumLabel}">
+          max-label="$i18n{textToSpeechVolumeMaximumLabel}"
+          aria-describedby="volume">
       </display-size-slider>
     </div>
 
@@ -114,7 +117,7 @@
          hidden="[[!hasVoices]]">
       <div class="start">$i18n{textToSpeechMoreLanguages}</div>
       <cr-expand-button expanded="{{languagesOpened}}"
-          alt="$18n{textToSpeechMoreLanguages}">
+          alt="$i18n{textToSpeechMoreLanguages}">
       </cr-expand-button>
     </div>
     <iron-collapse id="moreLanguages" opened="[[languagesOpened]]">
@@ -147,8 +150,9 @@
         <a href="[[extension.optionsPage]]"
             tabindex=-1
             target="_blank"
+            aria-describedby$="extension_name_[[index]]"
             hidden$="[[!extension.optionsPage]]">
-          <paper-button aria-describedby="extension_name_[[index]]">
+          <paper-button>
             $i18n{settings}
           </paper-button>
         </a>
diff --git a/chrome/browser/resources/settings/device_page/display_size_slider.js b/chrome/browser/resources/settings/device_page/display_size_slider.js
index 98dfc9f6..1fcc83b 100644
--- a/chrome/browser/resources/settings/device_page/display_size_slider.js
+++ b/chrome/browser/resources/settings/device_page/display_size_slider.js
@@ -436,12 +436,14 @@
       return;
     if (!this.pref)
       return;
-    for (let i = 0; i < this.ticks.length; i++)
-      if (this.ticks[i].value == this.pref.value)
+    for (let i = 0; i < this.ticks.length; i++) {
+      if (this.ticks[i].value == this.pref.value) {
         this._setIndex(i);
-    this.setAttribute('aria-valuenow', this.ticks[this.index].value);
-    this.setAttribute(
-        'aria-valuetext', this.getLabelForIndex_(this.ticks, this.index));
+        this.setAttribute('aria-valuenow', this.ticks[this.index].value);
+        this.setAttribute(
+            'aria-valuetext', this.getLabelForIndex_(this.ticks, this.index));
+      }
+    }
   },
 
   /**
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
index fd8ebb751..92f38f7 100644
--- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc
+++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -190,6 +190,16 @@
       base::BindRepeating(
           &ChromePasswordProtectionService::OnWarningTriggerChanged,
           base::Unretained(this)));
+  pref_change_registrar_->Add(
+      prefs::kPasswordProtectionLoginURLs,
+      base::BindRepeating(
+          &ChromePasswordProtectionService::OnEnterprisePasswordUrlChanged,
+          base::Unretained(this)));
+  pref_change_registrar_->Add(
+      prefs::kPasswordProtectionChangePasswordURL,
+      base::BindRepeating(
+          &ChromePasswordProtectionService::OnEnterprisePasswordUrlChanged,
+          base::Unretained(this)));
   password_manager::HashPasswordManager hash_password_manager;
   hash_password_manager.set_prefs(profile->GetPrefs());
   base::Optional<password_manager::PasswordHashData> sync_hash_data =
@@ -1190,4 +1200,10 @@
       ->SchedulePasswordHashUpdate(/*should_log_metrics*/ false);
 }
 
+void ChromePasswordProtectionService::OnEnterprisePasswordUrlChanged() {
+  PasswordStoreFactory::GetForProfile(profile_,
+                                      ServiceAccessType::EXPLICIT_ACCESS)
+      ->ScheduleEnterprisePasswordURLUpdate();
+}
+
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.h b/chrome/browser/safe_browsing/chrome_password_protection_service.h
index aff705b..106ebf4 100644
--- a/chrome/browser/safe_browsing/chrome_password_protection_service.h
+++ b/chrome/browser/safe_browsing/chrome_password_protection_service.h
@@ -339,6 +339,10 @@
   // enterprise password hashes.
   void OnWarningTriggerChanged();
 
+  // Informs PasswordReuseDetector that enterprise password URLs (login URL or
+  // change password URL) have been changed.
+  void OnEnterprisePasswordUrlChanged();
+
   scoped_refptr<SafeBrowsingUIManager> ui_manager_;
   TriggerManager* trigger_manager_;
   // Profile associated with this instance.
diff --git a/chrome/browser/signin/chrome_signin_helper.cc b/chrome/browser/signin/chrome_signin_helper.cc
index 1824129..9c2a51f 100644
--- a/chrome/browser/signin/chrome_signin_helper.cc
+++ b/chrome/browser/signin/chrome_signin_helper.cc
@@ -64,8 +64,9 @@
 const char kGoogleSignoutResponseHeader[] = "Google-Accounts-SignOut";
 #endif
 
-// Key for DiceURLRequestUserData.
-const void* const kDiceURLRequestUserDataKey = &kDiceURLRequestUserDataKey;
+// Key for RequestDestructionObserverUserData.
+const void* const kRequestDestructionObserverUserDataKey =
+    &kRequestDestructionObserverUserDataKey;
 
 // TODO(droger): Remove this delay when the Dice implementation is finished on
 // the server side.
@@ -109,75 +110,45 @@
   DISALLOW_COPY_AND_ASSIGN(AccountReconcilorLockWrapper);
 };
 
-// The AccountReconcilor is suspended while a Dice request is in flight. This
-// allows the DiceResponseHandler to see the response before the
-// AccountReconcilor starts.
-class DiceURLRequestUserData : public base::SupportsUserData::Data {
+void DestroyLockWrapperAfterDelay(
+    scoped_refptr<AccountReconcilorLockWrapper> lock_wrapper) {
+  base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+      FROM_HERE,
+      base::BindOnce(
+          base::DoNothing::Once<scoped_refptr<AccountReconcilorLockWrapper>>(),
+          std::move(lock_wrapper)),
+      base::TimeDelta::FromMilliseconds(
+          g_dice_account_reconcilor_blocked_delay_ms));
+}
+
+// Returns true if the account reconcilor needs be be blocked while a Gaia
+// sign-in request is in progress.
+//
+// The account reconcilor must be blocked on all request that may change the
+// Gaia authentication cookies. This includes:
+// * Main frame  requests.
+// * XHR requests having Gaia URL as referrer.
+bool ShouldBlockReconcilorForRequest(ChromeRequestAdapter* request) {
+  content::ResourceType resource_type = request->GetResourceType();
+
+  if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME)
+    return true;
+
+  return (resource_type == content::RESOURCE_TYPE_XHR) &&
+         gaia::IsGaiaSignonRealm(request->GetReferrerOrigin());
+}
+
+class RequestDestructionObserverUserData : public base::SupportsUserData::Data {
  public:
-  // Attaches a DiceURLRequestUserData to the request if it needs to block the
-  // AccountReconcilor.
-  static void AttachToRequest(net::URLRequest* request) {
-    if (ShouldBlockReconcilorForRequest(request) &&
-        !request->GetUserData(kDiceURLRequestUserDataKey)) {
-      const content::ResourceRequestInfo* info =
-          content::ResourceRequestInfo::ForRequest(request);
-      request->SetUserData(kDiceURLRequestUserDataKey,
-                           std::make_unique<DiceURLRequestUserData>(
-                               info->GetWebContentsGetterForRequest()));
-    }
-  }
+  explicit RequestDestructionObserverUserData(base::OnceClosure closure)
+      : closure_(std::move(closure)) {}
 
-  explicit DiceURLRequestUserData(
-      const content::ResourceRequestInfo::WebContentsGetter&
-          web_contents_getter)
-      : account_reconcilor_lock_wrapper_(new AccountReconcilorLockWrapper) {
-    // The task takes a reference on the wrapper, because DiceRequestUserData
-    // may be deleted before the task is run.
-    content::BrowserThread::PostTask(
-        content::BrowserThread::UI, FROM_HERE,
-        base::BindOnce(&AccountReconcilorLockWrapper::CreateLockOnUI,
-                       account_reconcilor_lock_wrapper_, web_contents_getter));
-  }
-
-  // The Gaia cookie is received in one request, and the Dice response in
-  // another request that is immediately following.
-  // Start locking the reconcilor on the first request, and keep it locked for a
-  // short time afterwards, to give the second request some time to start and
-  // lock the reconcilor from there.
-  ~DiceURLRequestUserData() override {
-    base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
-        FROM_HERE,
-        base::BindOnce(&DiceURLRequestUserData::DoNothing,
-                       account_reconcilor_lock_wrapper_),
-        base::TimeDelta::FromMilliseconds(
-            g_dice_account_reconcilor_blocked_delay_ms));
-  }
+  ~RequestDestructionObserverUserData() override { std::move(closure_).Run(); }
 
  private:
-  // Returns true if the account reconcilor needs be be blocked while a Gaia
-  // sign-in request is in progress.
-  //
-  // The account reconcilor must be blocked on all request that may change the
-  // Gaia authentication cookies. This includes:
-  // * Main frame  requests.
-  // * XHR requests having Gaia URL as referrer.
-  static bool ShouldBlockReconcilorForRequest(net::URLRequest* request) {
-    const content::ResourceRequestInfo* info =
-        content::ResourceRequestInfo::ForRequest(request);
-    content::ResourceType resource_type = info->GetResourceType();
+  base::OnceClosure closure_;
 
-    if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME)
-      return true;
-
-    return (resource_type == content::RESOURCE_TYPE_XHR) &&
-           gaia::IsGaiaSignonRealm(GURL(request->referrer()).GetOrigin());
-  }
-  // Dummy function used to extend the lifetime of the wrapper by keeping a
-  // reference on it.
-  static void DoNothing(scoped_refptr<AccountReconcilorLockWrapper> wrapper) {}
-
-  scoped_refptr<AccountReconcilorLockWrapper> account_reconcilor_lock_wrapper_;
-  DISALLOW_COPY_AND_ASSIGN(DiceURLRequestUserData);
+  DISALLOW_COPY_AND_ASSIGN(RequestDestructionObserverUserData);
 };
 
 // Processes the mirror response header on the UI thread. Currently depending
@@ -340,19 +311,17 @@
 // Looks for the X-Chrome-Manage-Accounts response header, and if found,
 // tries to show the avatar bubble in the browser identified by the
 // child/route id. Must be called on IO thread.
-void ProcessMirrorResponseHeaderIfExists(net::URLRequest* request,
+void ProcessMirrorResponseHeaderIfExists(ResponseAdapter* response,
                                          bool is_off_the_record) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
 
-  const content::ResourceRequestInfo* info =
-      content::ResourceRequestInfo::ForRequest(request);
-  if (!info || (info->GetResourceType() != content::RESOURCE_TYPE_MAIN_FRAME))
+  if (!response->IsMainFrame())
     return;
 
-  if (!gaia::IsGaiaSignonRealm(request->url().GetOrigin()))
+  if (!gaia::IsGaiaSignonRealm(response->GetOrigin()))
     return;
 
-  net::HttpResponseHeaders* response_headers = request->response_headers();
+  const net::HttpResponseHeaders* response_headers = response->GetHeaders();
   if (!response_headers)
     return;
 
@@ -377,21 +346,21 @@
   content::BrowserThread::PostTask(
       content::BrowserThread::UI, FROM_HERE,
       base::BindOnce(ProcessMirrorHeaderUIThread, params,
-                     info->GetWebContentsGetterForRequest()));
+                     response->GetWebContentsGetter()));
 }
 
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
-void ProcessDiceResponseHeaderIfExists(net::URLRequest* request,
+void ProcessDiceResponseHeaderIfExists(ResponseAdapter* response,
                                        bool is_off_the_record) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
 
   if (is_off_the_record)
     return;
 
-  if (!gaia::IsGaiaSignonRealm(request->url().GetOrigin()))
+  if (!gaia::IsGaiaSignonRealm(response->GetOrigin()))
     return;
 
-  net::HttpResponseHeaders* response_headers = request->response_headers();
+  const net::HttpResponseHeaders* response_headers = response->GetHeaders();
   if (!response_headers)
     return;
 
@@ -402,7 +371,7 @@
     params = BuildDiceSigninResponseParams(header_value);
     // The header must be removed for privacy reasons, so that renderers never
     // have access to the authorization code.
-    response_headers->RemoveHeader(kDiceResponseHeader);
+    response->RemoveHeader(kDiceResponseHeader);
   } else if (response_headers->GetNormalizedHeader(kGoogleSignoutResponseHeader,
                                                    &header_value)) {
     params = BuildDiceSignoutResponseParams(header_value);
@@ -413,22 +382,81 @@
   if (params.user_intention == DiceAction::NONE)
     return;
 
-  const content::ResourceRequestInfo* info =
-      content::ResourceRequestInfo::ForRequest(request);
   content::BrowserThread::PostTask(
       content::BrowserThread::UI, FROM_HERE,
       base::Bind(ProcessDiceHeaderUIThread, base::Passed(std::move(params)),
-                 info->GetWebContentsGetterForRequest()));
+                 response->GetWebContentsGetter()));
 }
 #endif  // BUILDFLAG(ENABLE_DICE_SUPPORT)
 
 }  // namespace
 
+ChromeRequestAdapter::ChromeRequestAdapter(net::URLRequest* request)
+    : RequestAdapter(request) {}
+
+ChromeRequestAdapter::~ChromeRequestAdapter() = default;
+
+bool ChromeRequestAdapter::IsMainRequestContext(ProfileIOData* io_data) {
+  return request_->context() == io_data->GetMainRequestContext();
+}
+
+content::ResourceRequestInfo::WebContentsGetter
+ChromeRequestAdapter::GetWebContentsGetter() const {
+  const auto* info = content::ResourceRequestInfo::ForRequest(request_);
+  return info->GetWebContentsGetterForRequest();
+}
+
+content::ResourceType ChromeRequestAdapter::GetResourceType() const {
+  const auto* info = content::ResourceRequestInfo::ForRequest(request_);
+  return info->GetResourceType();
+}
+
+GURL ChromeRequestAdapter::GetReferrerOrigin() const {
+  return GURL(request_->referrer()).GetOrigin();
+}
+
+void ChromeRequestAdapter::SetDestructionCallback(base::OnceClosure closure) {
+  if (request_->GetUserData(kRequestDestructionObserverUserDataKey))
+    return;
+
+  request_->SetUserData(
+      kRequestDestructionObserverUserDataKey,
+      std::make_unique<RequestDestructionObserverUserData>(std::move(closure)));
+}
+
+ResponseAdapter::ResponseAdapter(const net::URLRequest* request)
+    : request_(request) {}
+
+ResponseAdapter::~ResponseAdapter() = default;
+
+content::ResourceRequestInfo::WebContentsGetter
+ResponseAdapter::GetWebContentsGetter() const {
+  const auto* info = content::ResourceRequestInfo::ForRequest(request_);
+  return info->GetWebContentsGetterForRequest();
+}
+
+bool ResponseAdapter::IsMainFrame() const {
+  const auto* info = content::ResourceRequestInfo::ForRequest(request_);
+  return info && (info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME);
+}
+
+GURL ResponseAdapter::GetOrigin() const {
+  return request_->url().GetOrigin();
+}
+
+const net::HttpResponseHeaders* ResponseAdapter::GetHeaders() const {
+  return request_->response_headers();
+}
+
+void ResponseAdapter::RemoveHeader(const std::string& name) {
+  request_->response_headers()->RemoveHeader(name);
+}
+
 void SetDiceAccountReconcilorBlockDelayForTesting(int delay_ms) {
   g_dice_account_reconcilor_blocked_delay_ms = delay_ms;
 }
 
-void FixAccountConsistencyRequestHeader(net::URLRequest* request,
+void FixAccountConsistencyRequestHeader(ChromeRequestAdapter* request,
                                         const GURL& redirect_url,
                                         ProfileIOData* io_data) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
@@ -436,7 +464,7 @@
   if (io_data->IsOffTheRecord())
     return;  // Account consistency is disabled in incognito.
 
-  if (io_data->GetMainRequestContext() != request->context()) {
+  if (!request->IsMainRequestContext(io_data)) {
     // Account consistency requires the AccountReconcilor, which is only
     // attached to the main request context.
     // Note: InlineLoginUI uses an isolated request context and thus bypasses
@@ -475,8 +503,17 @@
   // Block the AccountReconcilor while the Dice requests are in flight. This
   // allows the DiceReponseHandler to process the response before the reconcilor
   // starts.
-  if (dice_header_added)
-    DiceURLRequestUserData::AttachToRequest(request);
+  if (dice_header_added && ShouldBlockReconcilorForRequest(request)) {
+    auto lock_wrapper = base::MakeRefCounted<AccountReconcilorLockWrapper>();
+    content::BrowserThread::PostTask(
+        content::BrowserThread::UI, FROM_HERE,
+        base::BindOnce(&AccountReconcilorLockWrapper::CreateLockOnUI,
+                       lock_wrapper, request->GetWebContentsGetter()));
+
+    // On destruction of the request |lock_wrapper| will be released.
+    request->SetDestructionCallback(
+        base::BindOnce(&DestroyLockWrapperAfterDelay, std::move(lock_wrapper)));
+  }
 
   // Mirror header:
   AppendOrRemoveMirrorRequestHeader(
@@ -484,7 +521,7 @@
       io_data->GetCookieSettings(), profile_mode_mask);
 }
 
-void ProcessAccountConsistencyResponseHeaders(net::URLRequest* request,
+void ProcessAccountConsistencyResponseHeaders(ResponseAdapter* response,
                                               const GURL& redirect_url,
                                               bool is_off_the_record) {
   if (redirect_url.is_empty()) {
@@ -493,13 +530,13 @@
     // See if the response contains the X-Chrome-Manage-Accounts header. If so
     // show the profile avatar bubble so that user can complete signin/out
     // action the native UI.
-    ProcessMirrorResponseHeaderIfExists(request, is_off_the_record);
+    ProcessMirrorResponseHeaderIfExists(response, is_off_the_record);
   }
 
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
   // Process the Dice header: on sign-in, exchange the authorization code for a
   // refresh token, on sign-out just follow the sign-out URL.
-  ProcessDiceResponseHeaderIfExists(request, is_off_the_record);
+  ProcessDiceResponseHeaderIfExists(response, is_off_the_record);
 #endif  // BUILDFLAG(ENABLE_DICE_SUPPORT)
 }
 
diff --git a/chrome/browser/signin/chrome_signin_helper.h b/chrome/browser/signin/chrome_signin_helper.h
index a699705..63471d2 100644
--- a/chrome/browser/signin/chrome_signin_helper.h
+++ b/chrome/browser/signin/chrome_signin_helper.h
@@ -7,11 +7,15 @@
 
 #include <string>
 
+#include "base/macros.h"
+#include "components/signin/core/browser/signin_header_helper.h"
 #include "content/public/browser/resource_request_info.h"
 
 namespace net {
+class HttpResponseHeaders;
 class URLRequest;
 }
+
 class GURL;
 class ProfileIOData;
 
@@ -22,6 +26,44 @@
 // handle signin accordingly.
 namespace signin {
 
+class ChromeRequestAdapter : public RequestAdapter {
+ public:
+  explicit ChromeRequestAdapter(net::URLRequest* request);
+  ~ChromeRequestAdapter() override;
+
+  virtual bool IsMainRequestContext(ProfileIOData* io_data);
+  virtual content::ResourceRequestInfo::WebContentsGetter GetWebContentsGetter()
+      const;
+  virtual content::ResourceType GetResourceType() const;
+  virtual GURL GetReferrerOrigin() const;
+
+  // Associate a callback with this request which will be executed when the
+  // request is complete (including any redirects). If a callback was already
+  // registered this function does nothing.
+  virtual void SetDestructionCallback(base::OnceClosure closure);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ChromeRequestAdapter);
+};
+
+class ResponseAdapter {
+ public:
+  explicit ResponseAdapter(const net::URLRequest* request);
+  virtual ~ResponseAdapter();
+
+  virtual content::ResourceRequestInfo::WebContentsGetter GetWebContentsGetter()
+      const;
+  virtual bool IsMainFrame() const;
+  virtual GURL GetOrigin() const;
+  virtual const net::HttpResponseHeaders* GetHeaders() const;
+  virtual void RemoveHeader(const std::string& name);
+
+ private:
+  const net::URLRequest* const request_;
+
+  DISALLOW_COPY_AND_ASSIGN(ResponseAdapter);
+};
+
 // When Dice is enabled, the AccountReconcilor is blocked for a short delay
 // after sending requests to Gaia. Exposed for testing.
 void SetDiceAccountReconcilorBlockDelayForTesting(int delay_ms);
@@ -31,13 +73,13 @@
 // thread.
 // Returns true if the account consistency header was added to the request.
 // Removes the header if it is already in the headers but should not be there.
-void FixAccountConsistencyRequestHeader(net::URLRequest* request,
+void FixAccountConsistencyRequestHeader(ChromeRequestAdapter* request,
                                         const GURL& redirect_url,
                                         ProfileIOData* io_data);
 
 // Processes account consistency response headers (X-Chrome-Manage-Accounts and
 // Dice). |redirect_url| is empty if the request is not a redirect.
-void ProcessAccountConsistencyResponseHeaders(net::URLRequest* request,
+void ProcessAccountConsistencyResponseHeaders(ResponseAdapter* response,
                                               const GURL& redirect_url,
                                               bool is_off_the_record);
 
diff --git a/chrome/browser/signin/chrome_signin_helper_unittest.cc b/chrome/browser/signin/chrome_signin_helper_unittest.cc
index 9963aab0..7660833 100644
--- a/chrome/browser/signin/chrome_signin_helper_unittest.cc
+++ b/chrome/browser/signin/chrome_signin_helper_unittest.cc
@@ -90,7 +90,8 @@
   ASSERT_TRUE(request_->response_headers()->HasHeader(kDiceResponseHeader));
 
   // Process the header.
-  signin::ProcessAccountConsistencyResponseHeaders(request_.get(), GURL(),
+  signin::ResponseAdapter response_adapter(request_.get());
+  signin::ProcessAccountConsistencyResponseHeaders(&response_adapter, GURL(),
                                                    false /* is_incognito */);
 
   // Check that the header has been removed.
diff --git a/chrome/browser/signin/chromeos_mirror_account_consistency_browsertest.cc b/chrome/browser/signin/chromeos_mirror_account_consistency_browsertest.cc
index a7a0d0d..4899f90 100644
--- a/chrome/browser/signin/chromeos_mirror_account_consistency_browsertest.cc
+++ b/chrome/browser/signin/chromeos_mirror_account_consistency_browsertest.cc
@@ -63,7 +63,9 @@
       profile_io->GetMainRequestContext()->CreateRequest(
           GURL(kGaiaUrl), net::DEFAULT_PRIORITY, nullptr,
           TRAFFIC_ANNOTATION_FOR_TESTS);
-  signin::FixAccountConsistencyRequestHeader(request.get(), GURL(), profile_io);
+  signin::ChromeRequestAdapter signin_request_adapter(request.get());
+  signin::FixAccountConsistencyRequestHeader(&signin_request_adapter, GURL(),
+                                             profile_io);
 
   CheckRequestHeader(request.get(), kChromeConnectedHeader,
                      expected_header_value);
diff --git a/chrome/browser/sync/test/integration/enable_disable_test.cc b/chrome/browser/sync/test/integration/enable_disable_test.cc
index 5cd83fb..435c82e 100644
--- a/chrome/browser/sync/test/integration/enable_disable_test.cc
+++ b/chrome/browser/sync/test/integration/enable_disable_test.cc
@@ -2,68 +2,30 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "base/macros.h"
+#include "base/run_loop.h"
+#include "base/test/bind_test_util.h"
+#include "base/values.h"
 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "components/browser_sync/profile_sync_service.h"
 #include "components/sync/base/model_type.h"
 #include "components/sync/base/sync_prefs.h"
 #include "components/sync/driver/sync_driver_switches.h"
-#include "components/sync/syncable/read_node.h"
-#include "components/sync/syncable/read_transaction.h"
 
 using base::FeatureList;
 using syncer::ModelType;
 using syncer::ModelTypeSet;
+using syncer::ModelTypeFromString;
 using syncer::ModelTypeToString;
 using syncer::ProxyTypes;
 using syncer::SyncPrefs;
 using syncer::UserSelectableTypes;
-using syncer::UserShare;
 
 namespace {
 
-bool DoesTopLevelNodeExist(UserShare* user_share, ModelType type) {
-  syncer::ReadTransaction trans(FROM_HERE, user_share);
-  syncer::ReadNode node(&trans);
-  return node.InitTypeRoot(type) == syncer::BaseNode::INIT_OK;
-}
-
-void VerifyExistence(UserShare* user_share,
-                     bool should_root_node_exist,
-                     ModelType type) {
-  EXPECT_EQ(should_root_node_exist, DoesTopLevelNodeExist(user_share, type))
-      << ModelTypeToString(type);
-}
-
-void VerifyExistence(UserShare* user_share,
-                     bool should_root_node_exist,
-                     ModelType grouped,
-                     ModelType selectable) {
-  EXPECT_EQ(should_root_node_exist, DoesTopLevelNodeExist(user_share, grouped))
-      << ModelTypeToString(selectable) << "->" << ModelTypeToString(grouped);
-}
-
-// The current approach this test class takes is to examine the Directory and
-// check for root nodes to see if a type is currently enabled. While this works
-// for things in the directory, it does not work for USS types. USS does not
-// have any general data access mechanism, at least yet. Until that exists,
-// simply omit types that may be USS from these cases.
-ModelTypeSet UnifiedSyncServiceTypes() {
-  ModelTypeSet set;
-  set.Put(syncer::AUTOFILL);
-  set.Put(syncer::DEVICE_INFO);
-  set.Put(syncer::SESSIONS);
-  set.Put(syncer::TYPED_URLS);
-  // PRINTERS was the first USS type, and should precede all other USS types.
-  // All new types should be USS. This logic is fragile to reordering ModelType.
-  for (int typeInt = syncer::PRINTERS; typeInt < syncer::FIRST_PROXY_TYPE;
-       typeInt++) {
-    set.Put(static_cast<ModelType>(typeInt));
-  }
-  return set;
-}
-
 // Some types show up in multiple groups. This means that there are at least two
 // user selectable groups that will cause these types to become enabled. This
 // affects our tests because we cannot assume that before enabling a multi type
@@ -100,6 +62,35 @@
   // Don't use self-notifications as they can trigger additional sync cycles.
   bool TestUsesSelfNotifications() override { return false; }
 
+  bool ModelTypeExists(ModelType type) {
+    base::RunLoop loop;
+    std::unique_ptr<base::ListValue> all_nodes;
+    GetSyncService(0)->GetAllNodes(
+        base::BindLambdaForTesting([&](std::unique_ptr<base::ListValue> nodes) {
+          all_nodes = std::move(nodes);
+          loop.Quit();
+        }));
+    loop.Run();
+    // Look for the root node corresponding to |type|.
+    for (const base::Value& value : all_nodes->GetList()) {
+      DCHECK(value.is_dict());
+      const base::Value* nodes = value.FindKey("nodes");
+      DCHECK(nodes);
+      DCHECK(nodes->is_list());
+      // Ignore types that are empty, because we expect the root node.
+      if (nodes->GetList().empty()) {
+        continue;
+      }
+      const base::Value* model_type = value.FindKey("type");
+      DCHECK(model_type);
+      DCHECK(model_type->is_string());
+      if (type == ModelTypeFromString(model_type->GetString())) {
+        return true;
+      }
+    }
+    return false;
+  }
+
  protected:
   void SetupTest(bool all_types_enabled) {
     ASSERT_TRUE(SetupClients());
@@ -109,22 +100,16 @@
     } else {
       ASSERT_TRUE(GetClient(0)->SetupSync(ModelTypeSet()));
     }
-    user_share_ = GetSyncService(0)->GetUserShare();
 
     registered_types_ = GetSyncService(0)->GetRegisteredDataTypes();
     selectable_types_ = UserSelectableTypes();
     multi_grouped_types_ = MultiGroupTypes(*sync_prefs_, registered_types_);
-    registered_directory_types_ = Difference(
-        Difference(registered_types_, UnifiedSyncServiceTypes()), ProxyTypes());
-    registered_selectable_types_ =
-        Intersection(registered_types_, UserSelectableTypes());
   }
 
   ModelTypeSet ResolveGroup(ModelType type) {
-    return Difference(Difference(sync_prefs_->ResolvePrefGroups(
-                                     registered_types_, ModelTypeSet(type)),
-                                 ProxyTypes()),
-                      UnifiedSyncServiceTypes());
+    return Difference(
+        sync_prefs_->ResolvePrefGroups(registered_types_, ModelTypeSet(type)),
+        ProxyTypes());
   }
 
   ModelTypeSet WithoutMultiTypes(const ModelTypeSet& input) {
@@ -138,12 +123,9 @@
   }
 
   std::unique_ptr<SyncPrefs> sync_prefs_;
-  UserShare* user_share_;
   ModelTypeSet registered_types_;
   ModelTypeSet selectable_types_;
   ModelTypeSet multi_grouped_types_;
-  ModelTypeSet registered_directory_types_;
-  ModelTypeSet registered_selectable_types_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(EnableDisableSingleClientTest);
@@ -151,7 +133,7 @@
 
 IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, EnableOneAtATime) {
   // Setup sync with no enabled types.
-  SetupTest(false);
+  SetupTest(/*all_types_enabled=*/false);
 
   for (ModelTypeSet::Iterator si = selectable_types_.First(); si.Good();
        si.Inc()) {
@@ -159,28 +141,31 @@
     const ModelTypeSet single_grouped_types = WithoutMultiTypes(grouped_types);
     for (ModelTypeSet::Iterator sgi = single_grouped_types.First(); sgi.Good();
          sgi.Inc()) {
-      VerifyExistence(user_share_, false, sgi.Get(), si.Get());
+      ASSERT_FALSE(ModelTypeExists(sgi.Get()))
+          << " for " << ModelTypeToString(si.Get());
     }
 
     EXPECT_TRUE(GetClient(0)->EnableSyncForDatatype(si.Get()));
 
     for (ModelTypeSet::Iterator gi = grouped_types.First(); gi.Good();
          gi.Inc()) {
-      VerifyExistence(user_share_, true, gi.Get(), si.Get());
+      EXPECT_TRUE(ModelTypeExists(gi.Get()))
+          << " for " << ModelTypeToString(si.Get());
     }
   }
 }
 
 IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, DisableOneAtATime) {
   // Setup sync with no disabled types.
-  SetupTest(true);
+  SetupTest(/*all_types_enabled=*/true);
 
   for (ModelTypeSet::Iterator si = selectable_types_.First(); si.Good();
        si.Inc()) {
     const ModelTypeSet grouped_types = ResolveGroup(si.Get());
     for (ModelTypeSet::Iterator gi = grouped_types.First(); gi.Good();
          gi.Inc()) {
-      VerifyExistence(user_share_, true, gi.Get(), si.Get());
+      ASSERT_TRUE(ModelTypeExists(gi.Get()))
+          << " for " << ModelTypeToString(si.Get());
     }
 
     EXPECT_TRUE(GetClient(0)->DisableSyncForDatatype(si.Get()));
@@ -188,7 +173,8 @@
     const ModelTypeSet single_grouped_types = WithoutMultiTypes(grouped_types);
     for (ModelTypeSet::Iterator sgi = single_grouped_types.First(); sgi.Good();
          sgi.Inc()) {
-      VerifyExistence(user_share_, false, sgi.Get(), si.Get());
+      EXPECT_FALSE(ModelTypeExists(sgi.Get()))
+          << " for " << ModelTypeToString(si.Get());
     }
   }
 
@@ -196,7 +182,136 @@
   // did not check these after disabling inside the above loop.
   for (ModelTypeSet::Iterator mgi = multi_grouped_types_.First(); mgi.Good();
        mgi.Inc()) {
-    VerifyExistence(user_share_, false, mgi.Get());
+    EXPECT_FALSE(ModelTypeExists(mgi.Get()))
+        << " for " << ModelTypeToString(mgi.Get());
+  }
+}
+
+IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest,
+                       FastEnableDisableOneAtATime) {
+  // Setup sync with no enabled types.
+  SetupTest(/*all_types_enabled=*/false);
+
+  for (ModelTypeSet::Iterator si = selectable_types_.First(); si.Good();
+       si.Inc()) {
+    const ModelTypeSet grouped_types = ResolveGroup(si.Get());
+    const ModelTypeSet single_grouped_types = WithoutMultiTypes(grouped_types);
+    for (ModelTypeSet::Iterator sgi = single_grouped_types.First(); sgi.Good();
+         sgi.Inc()) {
+      ASSERT_FALSE(ModelTypeExists(sgi.Get()))
+          << " for " << ModelTypeToString(si.Get());
+    }
+
+    // Enable and then disable immediately afterwards, before the datatype has
+    // had the chance to finish startup (which usually involves task posting).
+    EXPECT_TRUE(GetClient(0)->EnableSyncForDatatype(si.Get()));
+    EXPECT_TRUE(GetClient(0)->DisableSyncForDatatype(si.Get()));
+
+    for (ModelTypeSet::Iterator sgi = single_grouped_types.First(); sgi.Good();
+         sgi.Inc()) {
+      EXPECT_FALSE(ModelTypeExists(sgi.Get()))
+          << " for " << ModelTypeToString(si.Get());
+    }
+  }
+
+  // Lastly make sure that all the multi grouped times are all gone, since we
+  // did not check these after disabling inside the above loop.
+  for (ModelTypeSet::Iterator mgi = multi_grouped_types_.First(); mgi.Good();
+       mgi.Inc()) {
+    EXPECT_FALSE(ModelTypeExists(mgi.Get()))
+        << " for " << ModelTypeToString(mgi.Get());
+  }
+}
+
+IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest,
+                       FastDisableEnableOneAtATime) {
+  // Setup sync with no disabled types.
+  SetupTest(/*all_types_enabled=*/true);
+
+  for (ModelTypeSet::Iterator si = selectable_types_.First(); si.Good();
+       si.Inc()) {
+    const ModelTypeSet grouped_types = ResolveGroup(si.Get());
+    for (ModelTypeSet::Iterator gi = grouped_types.First(); gi.Good();
+         gi.Inc()) {
+      ASSERT_TRUE(ModelTypeExists(gi.Get()))
+          << " for " << ModelTypeToString(si.Get());
+    }
+
+    // Disable and then reenable immediately afterwards, before the datatype has
+    // had the chance to stop fully (which usually involves task posting).
+    EXPECT_TRUE(GetClient(0)->DisableSyncForDatatype(si.Get()));
+    EXPECT_TRUE(GetClient(0)->EnableSyncForDatatype(si.Get()));
+
+    for (ModelTypeSet::Iterator gi = grouped_types.First(); gi.Good();
+         gi.Inc()) {
+      EXPECT_TRUE(ModelTypeExists(gi.Get()))
+          << " for " << ModelTypeToString(si.Get());
+    }
+  }
+}
+
+// Disabled as per crbug.com/854446.
+IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest,
+                       DISABLED_FastEnableDisableEnableOneAtATime) {
+  // Setup sync with no enabled types.
+  SetupTest(/*all_types_enabled=*/false);
+
+  for (ModelTypeSet::Iterator si = selectable_types_.First(); si.Good();
+       si.Inc()) {
+    const ModelTypeSet grouped_types = ResolveGroup(si.Get());
+    const ModelTypeSet single_grouped_types = WithoutMultiTypes(grouped_types);
+    for (ModelTypeSet::Iterator sgi = single_grouped_types.First(); sgi.Good();
+         sgi.Inc()) {
+      ASSERT_FALSE(ModelTypeExists(sgi.Get()))
+          << " for " << ModelTypeToString(si.Get());
+    }
+
+    // Fast enable-disable-enable sequence, before the datatype has had the
+    // chance to transition fully across states (usually involves task posting).
+    EXPECT_TRUE(GetClient(0)->EnableSyncForDatatype(si.Get()));
+    EXPECT_TRUE(GetClient(0)->DisableSyncForDatatype(si.Get()));
+    EXPECT_TRUE(GetClient(0)->EnableSyncForDatatype(si.Get()));
+
+    for (ModelTypeSet::Iterator sgi = single_grouped_types.First(); sgi.Good();
+         sgi.Inc()) {
+      EXPECT_TRUE(ModelTypeExists(sgi.Get()))
+          << " for " << ModelTypeToString(si.Get());
+    }
+  }
+}
+
+IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, EnableDisable) {
+  SetupTest(/*all_types_enabled=*/false);
+
+  // Enable all, and then disable immediately afterwards, before datatypes
+  // have had the chance to finish startup (which usually involves task
+  // posting).
+  GetClient(0)->EnableSyncForAllDatatypes();
+  GetClient(0)->DisableSyncForAllDatatypes();
+
+  for (ModelTypeSet::Iterator si = selectable_types_.First(); si.Good();
+       si.Inc()) {
+    EXPECT_FALSE(ModelTypeExists(si.Get()))
+        << " for " << ModelTypeToString(si.Get());
+  }
+}
+
+// Disabled as per crbug.com/854446.
+IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest,
+                       DISABLED_FastEnableDisableEnable) {
+  SetupTest(/*all_types_enabled=*/false);
+
+  // Enable all, and then disable+reenable immediately afterwards, before
+  // datatypes have had the chance to finish startup (which usually involves
+  // task posting).
+  GetClient(0)->EnableSyncForAllDatatypes();
+  GetClient(0)->DisableSyncForAllDatatypes();
+  GetClient(0)->EnableSyncForAllDatatypes();
+
+  for (ModelTypeSet::Iterator si = selectable_types_.First(); si.Good();
+       si.Inc()) {
+    EXPECT_TRUE(ModelTypeExists(si.Get()))
+        << " for " << ModelTypeToString(si.Get());
   }
 }
 
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task.cc b/chrome/browser/task_manager/providers/arc/arc_process_task.cc
index e3c3c37..a03d723b 100644
--- a/chrome/browser/task_manager/providers/arc/arc_process_task.cc
+++ b/chrome/browser/task_manager/providers/arc/arc_process_task.cc
@@ -39,14 +39,14 @@
   switch (arc_process.process_state()) {
     case arc::mojom::ProcessState::PERSISTENT:
     case arc::mojom::ProcessState::PERSISTENT_UI:
-    case arc::mojom::ProcessState::TOP:
       name_template = IDS_TASK_MANAGER_ARC_SYSTEM;
       break;
-    case arc::mojom::ProcessState::BOUND_FOREGROUND_SERVICE:
     case arc::mojom::ProcessState::FOREGROUND_SERVICE:
-    case arc::mojom::ProcessState::SERVICE:
+    case arc::mojom::ProcessState::BOUND_FOREGROUND_SERVICE:
     case arc::mojom::ProcessState::IMPORTANT_FOREGROUND:
     case arc::mojom::ProcessState::IMPORTANT_BACKGROUND:
+    case arc::mojom::ProcessState::TRANSIENT_BACKGROUND:
+    case arc::mojom::ProcessState::SERVICE:
       name_template = IDS_TASK_MANAGER_ARC_PREFIX_BACKGROUND_SERVICE;
       break;
     case arc::mojom::ProcessState::RECEIVER:
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
index efa648da..1375212 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
@@ -769,8 +769,8 @@
   for (int index = 0; index < model_->item_count(); ++index) {
     ash::ShelfItem item = model_->items()[index];
     ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(item.id);
-    if (item.type == ash::TYPE_APP_PANEL || !delegate ||
-        delegate->image_set_by_controller() || item.id.app_id != app_id) {
+    if (!delegate || delegate->image_set_by_controller() ||
+        item.id.app_id != app_id) {
       continue;
     }
     item.image = image;
@@ -1038,8 +1038,6 @@
     const base::string16& title) {
   CHECK(item_delegate);
   CHECK(!GetItem(item_delegate->shelf_id()));
-  // Ash's ShelfWindowWatcher handles app panel windows separately.
-  DCHECK_NE(ash::TYPE_APP_PANEL, shelf_item_type);
   ash::ShelfItem item;
   item.status = status;
   item.type = shelf_item_type;
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
index 3adfc3b3..343fe3d 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
@@ -1108,7 +1108,7 @@
 };
 
 // A V2 application window created with an |extension| and for a |profile|.
-// Upon destruction it will properly close the application; supports panels too.
+// Upon destruction it will properly close the application.
 class V2App {
  public:
   V2App(Profile* profile,
@@ -2640,36 +2640,6 @@
   EXPECT_TRUE(manager->IsWindowOnDesktopOfUser(window, current_user));
 }
 
-// Ensure multi-profile panels are properly added / removed from the shelf.
-TEST_F(MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerTest,
-       PanelUpdateOnUserSwitch) {
-  InitLauncherController();
-
-  // Check the shelf model used by ShelfWindowWatcher.
-  ash::ShelfModel* shelf_model = ash::Shell::Get()->shelf_model();
-  ASSERT_EQ(2, shelf_model->item_count());
-  EXPECT_EQ(ash::TYPE_BACK_BUTTON, shelf_model->items()[0].type);
-  EXPECT_EQ(ash::TYPE_APP_LIST, shelf_model->items()[1].type);
-
-  // Add an app panel window; ShelfWindowWatcher will add a shelf item.
-  V2App panel(profile(), extension_platform_app_.get(),
-              extensions::AppWindow::WINDOW_TYPE_PANEL);
-  ASSERT_EQ(3, shelf_model->item_count());
-  EXPECT_EQ(ash::TYPE_APP_PANEL, shelf_model->items()[2].type);
-
-  // After switching users the item should go away.
-  TestingProfile* profile2 = CreateMultiUserProfile("user2");
-  SwitchActiveUser(multi_user_util::GetAccountIdFromProfile(profile2));
-  ASSERT_EQ(2, shelf_model->item_count());
-  EXPECT_EQ(ash::TYPE_BACK_BUTTON, shelf_model->items()[0].type);
-  EXPECT_EQ(ash::TYPE_APP_LIST, shelf_model->items()[1].type);
-
-  // And it should come back when switching back.
-  SwitchActiveUser(multi_user_util::GetAccountIdFromProfile(profile()));
-  ASSERT_EQ(3, shelf_model->item_count());
-  EXPECT_EQ(ash::TYPE_APP_PANEL, shelf_model->items()[2].type);
-}
-
 // Check that a running windowed V1 application will be properly pinned and
 // unpinned when the order gets changed through a profile / policy change.
 TEST_F(ChromeLauncherControllerTest,
diff --git a/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc
index 0c840429..122bcb8 100644
--- a/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc
@@ -30,11 +30,10 @@
 // Get the ShelfID for a given |app_window|.
 ash::ShelfID GetShelfId(AppWindow* app_window) {
   // Set launch_id default value to an empty string. If showInShelf parameter
-  // is true or the window type is panel and the window key is not empty, its
-  // value is appended to the launch_id. Otherwise, if the window key is
-  // empty, the session_id is used.
+  // is true and the window key is not empty, its value is appended to the
+  // launch_id. Otherwise, if the window key is empty, the session_id is used.
   std::string launch_id;
-  if (app_window->show_in_shelf() || app_window->window_type_is_panel()) {
+  if (app_window->show_in_shelf()) {
     if (!app_window->window_key().empty())
       launch_id = app_window->window_key();
     else
@@ -128,14 +127,11 @@
   window->SetProperty(ash::kShelfIDKey, new std::string(shelf_id.Serialize()));
   // TODO(msw): Set shelf item types earlier to avoid ShelfWindowWatcher races.
   // (maybe use Widget::InitParams::mus_properties in cash too crbug.com/750334)
-  window->SetProperty<int>(
-      ash::kShelfItemTypeKey,
-      app_window->window_type_is_panel() ? ash::TYPE_APP_PANEL : ash::TYPE_APP);
+  window->SetProperty<int>(ash::kShelfItemTypeKey, ash::TYPE_APP);
 
   // Windows created by IME extension should be treated the same way as the
   // virtual keyboard window, which does not register itself in launcher.
-  // Ash's ShelfWindowWatcher handles app panel windows separately.
-  if (app_window->is_ime_window() || app_window->window_type_is_panel())
+  if (app_window->is_ime_window())
     return;
 
   // Get the app's shelf identifier and add an entry to the map.
diff --git a/chrome/browser/ui/ash/launcher/extension_app_window_launcher_item_controller.cc b/chrome/browser/ui/ash/launcher/extension_app_window_launcher_item_controller.cc
index 1954d11..e0ee990 100644
--- a/chrome/browser/ui/ash/launcher/extension_app_window_launcher_item_controller.cc
+++ b/chrome/browser/ui/ash/launcher/extension_app_window_launcher_item_controller.cc
@@ -24,7 +24,6 @@
 
 void ExtensionAppWindowLauncherItemController::AddAppWindow(
     extensions::AppWindow* app_window) {
-  DCHECK(!app_window->window_type_is_panel());
   AddWindow(app_window->GetBaseWindow());
 }
 
diff --git a/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.cc
index a42710d..26a477af 100644
--- a/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.cc
@@ -44,13 +44,8 @@
     Profile* profile =
         Profile::FromBrowserContext(app_window->browser_context());
     if (!multi_user_util::IsProfileFromActiveUser(profile)) {
-      if (IsRegisteredApp(app_window->GetNativeWindow())) {
+      if (IsRegisteredApp(app_window->GetNativeWindow()))
         UnregisterApp(app_window->GetNativeWindow());
-      } else if (app_window->window_type_is_panel()) {
-        // Panels are not registered; hide by clearing the shelf item type.
-        app_window->GetNativeWindow()->SetProperty<int>(ash::kShelfItemTypeKey,
-                                                        ash::TYPE_UNDEFINED);
-      }
     }
   }
   for (extensions::AppWindow* app_window : app_window_list_) {
@@ -60,11 +55,6 @@
         !IsRegisteredApp(app_window->GetNativeWindow()) &&
         (app_window->GetBaseWindow()->IsMinimized() ||
          app_window->GetNativeWindow()->IsVisible())) {
-      if (app_window->window_type_is_panel()) {
-        // Panels are not registered; show by restoring the shelf item type.
-        app_window->GetNativeWindow()->SetProperty<int>(ash::kShelfItemTypeKey,
-                                                        ash::TYPE_APP_PANEL);
-      }
       RegisterApp(app_window);
     }
   }
@@ -110,16 +100,6 @@
     RegisterApp(app_window);
     return;
   }
-
-  // The panel layout manager only manages windows which are anchored.
-  // Since this window did never had an anchor, it would stay hidden. We
-  // therefore make it visible now.
-  if (UserHasAppOnActiveDesktop(app_window) &&
-      app_window->GetNativeWindow()->type() ==
-          aura::client::WINDOW_TYPE_PANEL &&
-      !app_window->GetNativeWindow()->layer()->GetTargetOpacity()) {
-    app_window->GetNativeWindow()->layer()->SetOpacity(1.0f);
-  }
 }
 
 void MultiProfileAppWindowLauncherController::OnAppWindowHidden(
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc
index 6a5a1d7e..bdf79d1 100644
--- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc
+++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc
@@ -62,7 +62,7 @@
   TELEPORT_WINDOW_INCOGNITO_BROWSER,
   TELEPORT_WINDOW_V1_APP,
   TELEPORT_WINDOW_V2_APP,
-  TELEPORT_WINDOW_PANEL,
+  DEPRECATED_TELEPORT_WINDOW_PANEL,
   TELEPORT_WINDOW_POPUP,
   TELEPORT_WINDOW_UNKNOWN,
   NUM_TELEPORT_WINDOW_TYPES
@@ -98,14 +98,8 @@
           extensions::AppWindowRegistry::Get(*it)->GetAppWindowForNativeWindow(
               window);
     }
-    if (app_window) {
-      if (app_window->window_type() ==
-          extensions::AppWindow::WINDOW_TYPE_PANEL) {
-        window_type = TELEPORT_WINDOW_PANEL;
-      } else {
-        window_type = TELEPORT_WINDOW_V2_APP;
-      }
-    }
+    if (app_window)
+      window_type = TELEPORT_WINDOW_V2_APP;
   }
   UMA_HISTOGRAM_ENUMERATION("MultiProfile.TeleportWindowType", window_type,
                             NUM_TELEPORT_WINDOW_TYPES);
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc
index f3ffe9f..618cc203 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.cc
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -20,6 +20,7 @@
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/signin/signin_promo_util.h"
 #include "chrome/browser/ssl/insecure_sensitive_input_driver_factory.h"
+#include "chrome/browser/ssl/security_state_tab_helper.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "chrome/browser/ui/autofill/autofill_popup_controller_impl.h"
 #include "chrome/browser/ui/autofill/create_card_unmask_prompt_view.h"
@@ -149,6 +150,22 @@
   return nullptr;
 }
 
+security_state::SecurityLevel
+ChromeAutofillClient::GetSecurityLevelForUmaHistograms() {
+  SecurityStateTabHelper* helper =
+      ::SecurityStateTabHelper::FromWebContents(web_contents());
+
+  // If there is no helper, it means we are not in a "web" state (for example
+  // the file picker on CrOS). Return SECURITY_LEVEL_COUNT which will not be
+  // logged.
+  if (!helper)
+    return security_state::SecurityLevel::SECURITY_LEVEL_COUNT;
+
+  security_state::SecurityInfo security_info;
+  helper->GetSecurityInfo(&security_info);
+  return security_info.security_level;
+}
+
 void ChromeAutofillClient::ShowAutofillSettings() {
 #if defined(OS_ANDROID)
   chrome::android::PreferencesLauncher::ShowAutofillSettings(web_contents());
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h
index 899c479..accfc9ef 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.h
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.h
@@ -55,6 +55,7 @@
   ukm::UkmRecorder* GetUkmRecorder() override;
   ukm::SourceId GetUkmSourceId() override;
   AddressNormalizer* GetAddressNormalizer() override;
+  security_state::SecurityLevel GetSecurityLevelForUmaHistograms() override;
   void ShowAutofillSettings() override;
   void ShowUnmaskPrompt(const CreditCard& card,
                         UnmaskCardReason reason,
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
index ec5e42f..bf6cc9e 100644
--- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
+++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/account_tracker_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/ssl/security_state_tab_helper.h"
 #include "chrome/browser/ui/autofill/save_card_bubble_view.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -44,7 +45,12 @@
       web_contents_(web_contents),
       save_card_bubble_view_(nullptr),
       pref_service_(
-          user_prefs::UserPrefs::Get(web_contents->GetBrowserContext())) {}
+          user_prefs::UserPrefs::Get(web_contents->GetBrowserContext())) {
+  security_state::SecurityInfo security_info;
+  SecurityStateTabHelper::FromWebContents(web_contents)
+      ->GetSecurityInfo(&security_info);
+  security_level_ = security_info.security_level;
+}
 
 SaveCardBubbleControllerImpl::~SaveCardBubbleControllerImpl() {
   if (save_card_bubble_view_)
@@ -67,7 +73,8 @@
       AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, is_uploading_,
       is_reshow_,
       pref_service_->GetInteger(
-          prefs::kAutofillAcceptSaveCreditCardPromptState));
+          prefs::kAutofillAcceptSaveCreditCardPromptState),
+      GetSecurityLevel());
 
   card_ = card;
   local_save_card_callback_ = save_card_callback;
@@ -94,7 +101,8 @@
       AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, is_uploading_,
       is_reshow_,
       pref_service_->GetInteger(
-          prefs::kAutofillAcceptSaveCreditCardPromptState));
+          prefs::kAutofillAcceptSaveCreditCardPromptState),
+      GetSecurityLevel());
 
   if (!LegalMessageLine::Parse(*legal_message, &legal_message_lines_,
                                /*escape_apostrophes=*/true)) {
@@ -102,7 +110,8 @@
         AutofillMetrics::SAVE_CARD_PROMPT_END_INVALID_LEGAL_MESSAGE,
         is_uploading_, is_reshow_,
         pref_service_->GetInteger(
-            prefs::kAutofillAcceptSaveCreditCardPromptState));
+            prefs::kAutofillAcceptSaveCreditCardPromptState),
+        GetSecurityLevel());
     return;
   }
 
@@ -128,7 +137,8 @@
       AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, is_uploading_,
       is_reshow_,
       pref_service_->GetInteger(
-          prefs::kAutofillAcceptSaveCreditCardPromptState));
+          prefs::kAutofillAcceptSaveCreditCardPromptState),
+      GetSecurityLevel());
 
   ShowBubble();
 }
@@ -194,7 +204,8 @@
   AutofillMetrics::LogSaveCardPromptMetric(
       AutofillMetrics::SAVE_CARD_PROMPT_END_ACCEPTED, is_uploading_, is_reshow_,
       pref_service_->GetInteger(
-          prefs::kAutofillAcceptSaveCreditCardPromptState));
+          prefs::kAutofillAcceptSaveCreditCardPromptState),
+      GetSecurityLevel());
   pref_service_->SetInteger(
       prefs::kAutofillAcceptSaveCreditCardPromptState,
       prefs::PREVIOUS_SAVE_CREDIT_CARD_PROMPT_USER_DECISION_ACCEPTED);
@@ -206,7 +217,8 @@
   AutofillMetrics::LogSaveCardPromptMetric(
       AutofillMetrics::SAVE_CARD_PROMPT_END_DENIED, is_uploading_, is_reshow_,
       pref_service_->GetInteger(
-          prefs::kAutofillAcceptSaveCreditCardPromptState));
+          prefs::kAutofillAcceptSaveCreditCardPromptState),
+      GetSecurityLevel());
   pref_service_->SetInteger(
       prefs::kAutofillAcceptSaveCreditCardPromptState,
       prefs::PREVIOUS_SAVE_CREDIT_CARD_PROMPT_USER_DECISION_DENIED);
@@ -218,7 +230,8 @@
       AutofillMetrics::SAVE_CARD_PROMPT_DISMISS_CLICK_LEGAL_MESSAGE,
       is_uploading_, is_reshow_,
       pref_service_->GetInteger(
-          prefs::kAutofillAcceptSaveCreditCardPromptState));
+          prefs::kAutofillAcceptSaveCreditCardPromptState),
+      GetSecurityLevel());
 }
 
 void SaveCardBubbleControllerImpl::OnBubbleClosed() {
@@ -271,7 +284,8 @@
           : AutofillMetrics::SAVE_CARD_PROMPT_END_NAVIGATION_HIDDEN,
       is_uploading_, is_reshow_,
       pref_service_->GetInteger(
-          prefs::kAutofillAcceptSaveCreditCardPromptState));
+          prefs::kAutofillAcceptSaveCreditCardPromptState),
+      GetSecurityLevel());
 }
 
 void SaveCardBubbleControllerImpl::OnVisibilityChanged(
@@ -322,7 +336,8 @@
   AutofillMetrics::LogSaveCardPromptMetric(
       AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, is_uploading_, is_reshow_,
       pref_service_->GetInteger(
-          prefs::kAutofillAcceptSaveCreditCardPromptState));
+          prefs::kAutofillAcceptSaveCreditCardPromptState),
+      GetSecurityLevel());
 }
 
 void SaveCardBubbleControllerImpl::UpdateIcon() {
@@ -339,4 +354,9 @@
       ui::PAGE_TRANSITION_LINK, false));
 }
 
+security_state::SecurityLevel SaveCardBubbleControllerImpl::GetSecurityLevel()
+    const {
+  return security_level_;
+}
+
 }  // namespace autofill
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h
index f5d362e..880261e 100644
--- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h
+++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h
@@ -11,6 +11,7 @@
 #include "base/timer/elapsed_timer.h"
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/autofill/core/browser/ui/save_card_bubble_controller.h"
+#include "components/security_state/core/security_state.h"
 #include "components/signin/core/browser/account_info.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
@@ -81,6 +82,9 @@
   void OnVisibilityChanged(content::Visibility visibility) override;
   void WebContentsDestroyed() override;
 
+  // Gets the security level of the page.
+  virtual security_state::SecurityLevel GetSecurityLevel() const;
+
  private:
   friend class content::WebContentsUserData<SaveCardBubbleControllerImpl>;
 
@@ -136,6 +140,9 @@
   // reasonable limit, then don't close the bubble upon navigation.
   std::unique_ptr<base::ElapsedTimer> timer_;
 
+  // The security level for the current context.
+  security_state::SecurityLevel security_level_;
+
   DISALLOW_COPY_AND_ASSIGN(SaveCardBubbleControllerImpl);
 };
 
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc b/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc
index fe127dc..a6363dc 100644
--- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc
+++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc
@@ -43,6 +43,10 @@
 
   void set_elapsed(base::TimeDelta elapsed) { elapsed_ = elapsed; }
 
+  void set_security_level(security_state::SecurityLevel security_level) {
+    security_level_ = security_level;
+  }
+
   void SimulateNavigation() {
     content::RenderFrameHost* rfh = web_contents()->GetMainFrame();
     std::unique_ptr<content::NavigationHandle> navigation_handle =
@@ -54,8 +58,13 @@
  protected:
   base::TimeDelta Elapsed() const override { return elapsed_; }
 
+  security_state::SecurityLevel GetSecurityLevel() const override {
+    return security_level_;
+  }
+
  private:
   base::TimeDelta elapsed_;
+  security_state::SecurityLevel security_level_;
 };
 
 class SaveCardBubbleControllerImplTest : public BrowserWithTestWindowTest {
@@ -674,4 +683,35 @@
           .empty());
 }
 
+TEST_F(SaveCardBubbleControllerImplTest,
+       LogSaveCardPromptMetricBySecurityLevel_Local) {
+  base::HistogramTester histogram_tester;
+  controller()->set_security_level(security_state::SecurityLevel::SECURE);
+  ShowLocalBubble();
+  EXPECT_THAT(
+      histogram_tester.GetAllSamples(
+          "Security.SaveCardPromptMetric.Local.SECURE"),
+      ElementsAre(Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, 1),
+                  Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, 1)));
+  EXPECT_TRUE(histogram_tester
+                  .GetAllSamples("Security.SaveCardPromptMetric.Upload.SECURE")
+                  .empty());
+}
+
+TEST_F(SaveCardBubbleControllerImplTest,
+       LogSaveCardPromptMetricBySecurityLevel_Upload) {
+  base::HistogramTester histogram_tester;
+  controller()->set_security_level(security_state::SecurityLevel::EV_SECURE);
+  ShowUploadBubble();
+  EXPECT_THAT(
+      histogram_tester.GetAllSamples(
+          "Security.SaveCardPromptMetric.Upload.EV_SECURE"),
+      ElementsAre(Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, 1),
+                  Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, 1)));
+  EXPECT_TRUE(
+      histogram_tester
+          .GetAllSamples("Security.SaveCardPromptMetric.Local.EV_SECURE")
+          .empty());
+}
+
 }  // namespace autofill
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm
index e06ef00..9766edfb 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller.mm
@@ -1919,7 +1919,9 @@
 
 - (void)updateUIForTabFullscreen:
     (ExclusiveAccessContext::TabFullscreenState)state {
-  DCHECK([self isInAnyFullscreenMode]);
+  // Only need to update and layout toolbar in fullscreen mode.
+  if (![self isInAnyFullscreenMode])
+    return;
   [fullscreenToolbarController_
       layoutToolbarStyleIsExitingTabFullscreen:
           state == ExclusiveAccessContext::STATE_EXIT_TAB_FULLSCREEN];
diff --git a/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.h b/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.h
index 6889ac9..395822f3 100644
--- a/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.h
+++ b/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.h
@@ -13,6 +13,9 @@
 // shortcuts and executing them with chrome::ExecuteCommand.
 @interface ChromeCommandDispatcherDelegate : NSObject<CommandDispatcherDelegate>
 
+// Permanently disabled throttling of repeated commands.
++ (void)disableThrottleForTesting;
+
 @end
 
 #endif  // CHROME_BROWSER_UI_COCOA_CHROME_COMMAND_DISPATCHER_DELEGATE_H_
diff --git a/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.mm b/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.mm
index 8fd5aaf..84b91e83 100644
--- a/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.mm
+++ b/chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.mm
@@ -16,7 +16,56 @@
 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h"
 #include "content/public/browser/native_web_keyboard_event.h"
 
+namespace {
+
+// For commands that bypass the main menu, we need a custom throttle
+// implementation since we don't have main menu's 100ms throttle. If a command
+// is repeated, and less than 50ms has passed, ignore it. 50ms was chosen as a
+// time that feels good - 100ms feels too long.
+constexpr NSTimeInterval kThrottleTimeIntervalSeconds = 0.05;
+
+// Browser tests disable throttling so that they can quickly send key events.
+bool g_throttling_enabled = true;
+
+}  // namespace
+
+@interface ChromeCommandDispatcherDelegate ()
+// We track the last time we let a hotkey bypass the main menu. This allows us
+// to implement a custom throttle. By default, the main menu has a built-in
+// 100ms throttle [also used to highlight the .
+@property(nonatomic, retain) NSDate* lastMainMenuBypassDate;
+@property(nonatomic, assign) int lastMainMenuBypassChromeCommand;
+@end
+
 @implementation ChromeCommandDispatcherDelegate
+@synthesize lastMainMenuBypassDate = lastMainMenuBypassDate_;
+@synthesize lastMainMenuBypassChromeCommand = lastMainMenuBypassChromeCommand_;
+
++ (void)disableThrottleForTesting {
+  g_throttling_enabled = false;
+}
+
+- (void)dealloc {
+  [lastMainMenuBypassDate_ release];
+  [super dealloc];
+}
+
+- (BOOL)shouldThrottleChromeCommand:(int)command {
+  if (!g_throttling_enabled)
+    return NO;
+  return self.lastMainMenuBypassChromeCommand == command &&
+         self.lastMainMenuBypassDate &&
+         fabs([self.lastMainMenuBypassDate timeIntervalSinceNow]) <
+             kThrottleTimeIntervalSeconds;
+}
+
+- (void)executeChromeCommandBypassingMainMenu:(int)command
+                                      browser:(Browser*)browser {
+  self.lastMainMenuBypassDate = [NSDate date];
+  self.lastMainMenuBypassChromeCommand = command;
+
+  chrome::ExecuteCommand(browser, command);
+}
 
 - (BOOL)eventHandledByExtensionCommand:(NSEvent*)event
                               priority:(ui::AcceleratorManager::HandlerPriority)
@@ -76,21 +125,25 @@
   //
   // By not passing the event to AppKit, we do lose out on the brief
   // highlighting of the NSMenu.
-  //
-  // TODO(erikchen): Add a throttle. Otherwise, it's possible for a user holding
-  // down a hotkey [e.g. cmd + w] to accidentally close too many tabs!
-  // https://crbug.com/846893.
   CommandForKeyEventResult result = CommandForKeyEvent(event);
   if (result.found()) {
     Browser* browser = chrome::FindBrowserWithWindow(window);
     if (browser &&
         browser->command_controller()->IsReservedCommandOrKey(
             result.chrome_command, content::NativeWebKeyboardEvent(event))) {
-      if (result.from_main_menu) {
-        return ui::PerformKeyEquivalentResult::kPassToMainMenu;
+      // If a command is reserved, then we also have it bypass the main menu.
+      // This is based on the rough approximation that reserved commands are
+      // also the ones that we want to be quickly repeatable.
+      // https://crbug.com/836947.
+
+      if ([self shouldThrottleChromeCommand:result.chrome_command]) {
+        // Claim to have handled the command to prevent anyone else from
+        // processing it.
+        return ui::PerformKeyEquivalentResult::kHandled;
       }
 
-      chrome::ExecuteCommand(browser, result.chrome_command);
+      [self executeChromeCommandBypassingMainMenu:result.chrome_command
+                                          browser:browser];
       return ui::PerformKeyEquivalentResult::kHandled;
     }
   }
@@ -117,11 +170,22 @@
   if (result.found()) {
     Browser* browser = chrome::FindBrowserWithWindow(window);
     if (browser) {
+      // postPerformKeyEquivalent: is only called on events that are not
+      // reserved. We want to bypass the main menu if and only if the event is
+      // reserved. As such, we let all events with main menu keyEquivalents be
+      // handled by the main menu.
       if (result.from_main_menu) {
         return ui::PerformKeyEquivalentResult::kPassToMainMenu;
       }
 
-      chrome::ExecuteCommand(browser, result.chrome_command);
+      if ([self shouldThrottleChromeCommand:result.chrome_command]) {
+        // Claim to have handled the command to prevent anyone else from
+        // processing it.
+        return ui::PerformKeyEquivalentResult::kHandled;
+      }
+
+      [self executeChromeCommandBypassingMainMenu:result.chrome_command
+                                          browser:browser];
       return ui::PerformKeyEquivalentResult::kHandled;
     }
   }
diff --git a/chrome/browser/ui/exclusive_access/fullscreen_controller.cc b/chrome/browser/ui/exclusive_access/fullscreen_controller.cc
index 56d0245..46daceb7 100644
--- a/chrome/browser/ui/exclusive_access/fullscreen_controller.cc
+++ b/chrome/browser/ui/exclusive_access/fullscreen_controller.cc
@@ -134,6 +134,10 @@
 
   ExclusiveAccessContext* exclusive_access_context =
       exclusive_access_manager()->context();
+  // This is needed on Mac as entering into Tab Fullscreen might change the top
+  // UI style.
+  exclusive_access_context->UpdateUIForTabFullscreen(
+      ExclusiveAccessContext::STATE_ENTER_TAB_FULLSCREEN);
 
   if (!exclusive_access_context->IsFullscreen()) {
     // Normal -> Tab Fullscreen.
@@ -143,11 +147,8 @@
   }
 
   // Browser Fullscreen -> Tab Fullscreen.
-  if (exclusive_access_context->IsFullscreen()) {
-    exclusive_access_context->UpdateUIForTabFullscreen(
-        ExclusiveAccessContext::STATE_ENTER_TAB_FULLSCREEN);
+  if (exclusive_access_context->IsFullscreen())
     state_prior_to_tab_fullscreen_ = STATE_BROWSER_FULLSCREEN;
-  }
 
   // We need to update the fullscreen exit bubble, e.g., going from browser
   // fullscreen to tab fullscreen will need to show different content.
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views.cc b/chrome/browser/ui/views/apps/chrome_native_app_window_views.cc
index 30c657af..aeb2507 100644
--- a/chrome/browser/ui/views/apps/chrome_native_app_window_views.cc
+++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views.cc
@@ -31,11 +31,6 @@
 
 namespace {
 
-const int kMinPanelWidth = 100;
-const int kMinPanelHeight = 100;
-const int kDefaultPanelWidth = 200;
-const int kDefaultPanelHeight = 300;
-
 const AcceleratorMapping kAppWindowAcceleratorMap[] = {
   { ui::VKEY_W, ui::EF_CONTROL_DOWN, IDC_CLOSE_WINDOW },
   { ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_CLOSE_WINDOW },
@@ -110,11 +105,6 @@
     views::Widget* widget) {
 }
 
-void ChromeNativeAppWindowViews::OnBeforePanelWidgetInit(
-    views::Widget::InitParams* init_params,
-    views::Widget* widget) {
-}
-
 void ChromeNativeAppWindowViews::InitializeDefaultWindow(
     const AppWindow::CreateParams& create_params) {
   views::Widget::InitParams init_params(views::Widget::InitParams::TYPE_WINDOW);
@@ -161,7 +151,6 @@
 #endif
 
   // Register accelarators supported by app windows.
-  // TODO(jeremya/stevenjb): should these be registered for panels too?
   views::FocusManager* focus_manager = GetFocusManager();
   const std::map<ui::Accelerator, int>& accelerator_table =
       GetAcceleratorTable();
@@ -194,34 +183,6 @@
   }
 }
 
-void ChromeNativeAppWindowViews::InitializePanelWindow(
-    const AppWindow::CreateParams& create_params) {
-  views::Widget::InitParams params(views::Widget::InitParams::TYPE_PANEL);
-  params.delegate = this;
-
-  gfx::Rect initial_window_bounds =
-      create_params.GetInitialWindowBounds(gfx::Insets());
-  gfx::Size preferred_size =
-      gfx::Size(initial_window_bounds.width(), initial_window_bounds.height());
-  if (preferred_size.width() == 0)
-    preferred_size.set_width(kDefaultPanelWidth);
-  else if (preferred_size.width() < kMinPanelWidth)
-    preferred_size.set_width(kMinPanelWidth);
-
-  if (preferred_size.height() == 0)
-    preferred_size.set_height(kDefaultPanelHeight);
-  else if (preferred_size.height() < kMinPanelHeight)
-    preferred_size.set_height(kMinPanelHeight);
-  SetPreferredSize(preferred_size);
-
-  // A panel will be placed at a default origin in the currently active target
-  // root window.
-  params.bounds = gfx::Rect(preferred_size);
-  OnBeforePanelWidgetInit(&params, widget());
-  widget()->Init(params);
-  widget()->set_focus_on_creation(create_params.focused);
-}
-
 views::NonClientFrameView*
 ChromeNativeAppWindowViews::CreateStandardDesktopAppFrame() {
   return views::WidgetDelegateView::CreateNonClientFrameView(widget());
@@ -247,8 +208,7 @@
 }
 
 bool ChromeNativeAppWindowViews::IsAlwaysOnTop() const {
-  // TODO(jackhou): On Mac, only docked panels are always-on-top.
-  return app_window()->window_type_is_panel() || widget()->IsAlwaysOnTop();
+  return widget()->IsAlwaysOnTop();
 }
 
 // views::WidgetDelegate implementation.
@@ -345,10 +305,6 @@
 // NativeAppWindow implementation.
 
 void ChromeNativeAppWindowViews::SetFullscreen(int fullscreen_types) {
-  // Fullscreen not supported by panels.
-  if (app_window()->window_type_is_panel())
-    return;
-
   widget()->SetFullscreen(fullscreen_types != AppWindow::FULLSCREEN_TYPE_NONE);
 }
 
@@ -394,11 +350,7 @@
   has_frame_color_ = create_params.has_frame_color;
   active_frame_color_ = create_params.active_frame_color;
   inactive_frame_color_ = create_params.inactive_frame_color;
-  if (create_params.window_type == AppWindow::WINDOW_TYPE_PANEL) {
-    InitializePanelWindow(create_params);
-  } else {
-    InitializeDefaultWindow(create_params);
-  }
+  InitializeDefaultWindow(create_params);
   extension_keybinding_registry_.reset(new ExtensionKeybindingRegistryViews(
       Profile::FromBrowserContext(app_window->browser_context()),
       widget()->GetFocusManager(),
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views.h b/chrome/browser/ui/views/apps/chrome_native_app_window_views.h
index 401601f..2bece723 100644
--- a/chrome/browser/ui/views/apps/chrome_native_app_window_views.h
+++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views.h
@@ -30,15 +30,8 @@
       const extensions::AppWindow::CreateParams& create_params,
       views::Widget::InitParams* init_params,
       views::Widget* widget);
-  // Called before views::Widget::Init() in InitializeDefaultWindow() to allow
-  // subclasses to customize the InitParams that would be passed.
-  virtual void OnBeforePanelWidgetInit(views::Widget::InitParams* init_params,
-                                       views::Widget* widget);
-
   virtual void InitializeDefaultWindow(
       const extensions::AppWindow::CreateParams& create_params);
-  virtual void InitializePanelWindow(
-      const extensions::AppWindow::CreateParams& create_params);
   virtual views::NonClientFrameView* CreateStandardDesktopAppFrame();
   virtual views::NonClientFrameView* CreateNonStandardAppFrame() = 0;
   virtual bool ShouldRemoveStandardFrame();
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.cc b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.cc
index 09e4dc1..da5f2bf 100644
--- a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.cc
+++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.cc
@@ -12,15 +12,13 @@
 #include "ash/public/cpp/ash_constants.h"
 #include "ash/public/cpp/ash_switches.h"
 #include "ash/public/cpp/immersive/immersive_fullscreen_controller.h"
+#include "ash/public/cpp/shelf_types.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/public/cpp/window_properties.h"
 #include "ash/public/cpp/window_state_type.h"
-#include "ash/shell.h"
-#include "ash/wm/panels/panel_frame_view.h"
 #include "ash/wm/window_properties.h"
 #include "ash/wm/window_state.h"
 #include "ash/wm/window_state_delegate.h"
-#include "ash/wm/window_state_observer.h"
 #include "base/logging.h"
 #include "chrome/browser/chromeos/note_taking_helper.h"
 #include "chrome/browser/profiles/profile.h"
@@ -40,6 +38,7 @@
 #include "ui/base/hit_test.h"
 #include "ui/base/models/simple_menu_model.h"
 #include "ui/base/ui_base_features.h"
+#include "ui/display/screen.h"
 #include "ui/events/event_constants.h"
 #include "ui/events/keycodes/keyboard_codes.h"
 #include "ui/gfx/skia_util.h"
@@ -147,11 +146,8 @@
     const AppWindow::CreateParams& create_params) {
   ChromeNativeAppWindowViewsAura::InitializeWindow(app_window, create_params);
   aura::Window* window = widget()->GetNativeWindow();
-
-  if (!app_window->window_type_is_panel()) {
-    window->SetProperty(aura::client::kAppType,
-                        static_cast<int>(ash::AppType::CHROME_APP));
-  }
+  window->SetProperty(aura::client::kAppType,
+                      static_cast<int>(ash::AppType::CHROME_APP));
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -170,7 +166,6 @@
                            : ash::kShellWindowId_LockActionHandlerContainer;
     ash_util::SetupWidgetInitParamsForContainer(init_params, container_id);
   }
-  DCHECK_NE(AppWindow::WINDOW_TYPE_PANEL, create_params.window_type);
   init_params->mus_properties
       [ui::mojom::WindowManager::kRemoveStandardFrame_InitProperty] =
       mojo::ConvertTo<std::vector<uint8_t>>(init_params->remove_standard_frame);
@@ -193,24 +188,6 @@
       mojo::ConvertTo<std::vector<uint8_t>>(static_cast<int64_t>(false));
 }
 
-void ChromeNativeAppWindowViewsAuraAsh::OnBeforePanelWidgetInit(
-    views::Widget::InitParams* init_params,
-    views::Widget* widget) {
-  ChromeNativeAppWindowViewsAura::OnBeforePanelWidgetInit(init_params, widget);
-
-  if (features::IsAshInBrowserProcess() && ash::Shell::HasInstance()) {
-    // Open a new panel on the target root.
-    init_params->context = ash::Shell::GetRootWindowForNewWindows();
-    init_params->bounds = gfx::Rect(GetPreferredSize());
-    wm::ConvertRectToScreen(ash::Shell::GetRootWindowForNewWindows(),
-                            &init_params->bounds);
-  }
-  init_params
-      ->mus_properties[ui::mojom::WindowManager::kShelfItemType_Property] =
-      mojo::ConvertTo<std::vector<uint8_t>>(
-          static_cast<int64_t>(ash::TYPE_APP_PANEL));
-}
-
 views::NonClientFrameView*
 ChromeNativeAppWindowViewsAuraAsh::CreateNonStandardAppFrame() {
   apps::AppWindowFrameView* frame = new apps::AppWindowFrameView(widget(), this,
@@ -279,8 +256,6 @@
 }
 
 bool ChromeNativeAppWindowViewsAuraAsh::IsAlwaysOnTop() const {
-  if (app_window()->window_type_is_panel())
-    return widget()->GetNativeWindow()->GetProperty(ash::kPanelAttachedKey);
   return widget()->IsAlwaysOnTop();
 }
 
@@ -331,15 +306,6 @@
   if (!features::IsAshInBrowserProcess())
     return nullptr;
 
-  if (app_window()->window_type_is_panel()) {
-    ash::PanelFrameView* frame_view =
-        new ash::PanelFrameView(widget, ash::PanelFrameView::FRAME_ASH);
-    frame_view->set_context_menu_controller(this);
-    if (HasFrameColor())
-      frame_view->SetFrameColors(ActiveFrameColor(), InactiveFrameColor());
-    return frame_view;
-  }
-
   ash::CustomFrameViewAsh* custom_frame_view =
       new ash::CustomFrameViewAsh(widget);
   // Non-frameless app windows can be put into immersive fullscreen.
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.h b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.h
index 3d34a9e6..607421aa 100644
--- a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.h
+++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.h
@@ -55,8 +55,6 @@
       const extensions::AppWindow::CreateParams& create_params,
       views::Widget::InitParams* init_params,
       views::Widget* widget) override;
-  void OnBeforePanelWidgetInit(views::Widget::InitParams* init_params,
-                               views::Widget* widget) override;
   views::NonClientFrameView* CreateNonStandardAppFrame() override;
   bool ShouldRemoveStandardFrame() override;
 
diff --git a/chrome/browser/ui/views/frame/browser_frame_mac.h b/chrome/browser/ui/views/frame/browser_frame_mac.h
index e12cda27..565b183 100644
--- a/chrome/browser/ui/views/frame/browser_frame_mac.h
+++ b/chrome/browser/ui/views/frame/browser_frame_mac.h
@@ -26,6 +26,7 @@
 
   // Overridden from views::NativeWidgetMac:
   int SheetPositionY() override;
+  void OnWindowFullscreenStateChange() override;
   void InitNativeWidget(const views::Widget::InitParams& params) override;
 
   // Overridden from NativeBrowserFrame:
diff --git a/chrome/browser/ui/views/frame/browser_frame_mac.mm b/chrome/browser/ui/views/frame/browser_frame_mac.mm
index b965f14..2740d99 100644
--- a/chrome/browser/ui/views/frame/browser_frame_mac.mm
+++ b/chrome/browser/ui/views/frame/browser_frame_mac.mm
@@ -62,6 +62,10 @@
   return host_view_y - dialog_host->GetDialogPosition(gfx::Size()).y();
 }
 
+void BrowserFrameMac::OnWindowFullscreenStateChange() {
+  browser_view_->FullscreenStateChanged();
+}
+
 void BrowserFrameMac::InitNativeWidget(
     const views::Widget::InitParams& params) {
   views::NativeWidgetMac::InitNativeWidget(params);
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
index 17fc91b..3b98d1c 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
@@ -81,6 +81,13 @@
   return false;
 }
 
+void BrowserNonClientFrameView::UpdateFullscreenTopUI(
+    bool is_exiting_fullscreen) {}
+
+bool BrowserNonClientFrameView::ShouldHideTopUIForFullscreen() const {
+  return frame()->IsFullscreen();
+}
+
 gfx::ImageSkia BrowserNonClientFrameView::GetIncognitoAvatarIcon() const {
   const SkColor icon_color = color_utils::PickContrastingColor(
       SK_ColorWHITE, gfx::kChromeIconGrey, GetFrameColor());
@@ -97,8 +104,11 @@
 
 SkColor BrowserNonClientFrameView::GetTabSeparatorColor() const {
   DCHECK(MD::IsRefreshUi());
-  constexpr SkAlpha kTabSeparatorAlpha = 0x59;  // 35%
-  return GetContrastingColorAgainstFrame(kTabSeparatorAlpha);
+  constexpr SkAlpha kTabSeparatorAlpha = 0x6E;  // 43%
+  const SkColor frame_color = GetFrameColor();
+  const SkColor base_color =
+      color_utils::BlendTowardOppositeLuma(frame_color, SK_AlphaOPAQUE);
+  return color_utils::AlphaBlend(base_color, frame_color, kTabSeparatorAlpha);
 }
 
 SkColor BrowserNonClientFrameView::GetTabBackgroundColor(TabState state) const {
@@ -111,8 +121,11 @@
 }
 
 SkColor BrowserNonClientFrameView::GetTabForegroundColor(TabState state) const {
-  if (MD::IsRefreshUi() && state == TAB_INACTIVE && ShouldPaintAsThemed())
-    return GetContrastingColorAgainstFrame(gfx::kGoogleGreyAlpha700);
+  if (MD::IsRefreshUi() && state == TAB_INACTIVE && ShouldPaintAsThemed()) {
+    return color_utils::IsDark(GetFrameColor()) ? SK_ColorWHITE
+                                                : gfx::kGoogleGrey800;
+  }
+
   const auto color_id = state == TAB_ACTIVE
                             ? ThemeProperties::COLOR_TAB_TEXT
                             : ThemeProperties::COLOR_BACKGROUND_TAB_TEXT;
@@ -545,11 +558,3 @@
                                : ThemeProperties::GetDefaultColor(
                                      color_id, browser_view_->IsIncognito());
 }
-
-SkColor BrowserNonClientFrameView::GetContrastingColorAgainstFrame(
-    SkAlpha alpha) const {
-  const SkColor frame_color = GetFrameColor();
-  const SkColor base_color =
-      color_utils::BlendTowardOppositeLuma(frame_color, SK_AlphaOPAQUE);
-  return color_utils::AlphaBlend(base_color, frame_color, alpha);
-}
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view.h
index 0f078a94..46c7da1d 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.h
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.h
@@ -65,6 +65,13 @@
   // Returns the amount that the theme background should be inset.
   virtual int GetThemeBackgroundXInset() const = 0;
 
+  // Updates the top UI state to be hidden or shown in fullscreen according to
+  // the preference's state. Currently only used on Mac.
+  virtual void UpdateFullscreenTopUI(bool is_exiting_fullscreen);
+
+  // Returns whether the top UI should hide.
+  virtual bool ShouldHideTopUIForFullscreen() const;
+
   // Retrieves the icon to use in the frame to indicate an incognito window.
   gfx::ImageSkia GetIncognitoAvatarIcon() const;
 
@@ -182,9 +189,6 @@
   // default theme properties.
   SkColor GetThemeOrDefaultColor(int color_id) const;
 
-  // Returns a color that contrasts well with the frame.
-  SkColor GetContrastingColorAgainstFrame(SkAlpha alpha) const;
-
   // The frame that hosts this view.
   BrowserFrame* frame_;
 
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h
index 3c126850..057c05e 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h
@@ -9,6 +9,7 @@
 #include "chrome/browser/ui/views/frame/avatar_button_manager.h"
 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h"
 #include "chrome/browser/ui/views/profiles/profile_indicator_icon.h"
+#include "components/prefs/pref_change_registrar.h"
 
 class BrowserNonClientFrameViewMac : public BrowserNonClientFrameView {
  public:
@@ -21,6 +22,8 @@
   gfx::Rect GetBoundsForTabStrip(views::View* tabstrip) const override;
   int GetTopInset(bool restored) const override;
   int GetThemeBackgroundXInset() const override;
+  void UpdateFullscreenTopUI(bool is_exiting_fullscreen) override;
+  bool ShouldHideTopUIForFullscreen() const override;
   void UpdateThrobber(bool running) override;
   int GetTabStripLeftInset() const override;
 
@@ -47,9 +50,32 @@
   AvatarButtonStyle GetAvatarButtonStyle() const override;
 
  private:
+  // This enum class represents the appearance of the fullscreen toolbar, which
+  // includes the tab strip and omnibox. These values are logged in a histogram
+  // and shouldn't be renumbered or removed.
+  enum class FullscreenToolbarStyle {
+    // The toolbar is present. Moving the cursor to the top
+    // causes the menubar to appear and the toolbar to slide down.
+    kToolbarPresent = 0,
+    // The toolbar is hidden. Moving cursor to top shows the
+    // toolbar and menubar.
+    kToolbarHidden,
+    // Toolbar is hidden. Moving cursor to top causes the menubar
+    // to appear, but not the toolbar.
+    kToolbarNone,
+    // The last enum value. Used for logging in a histogram.
+    kToolbarLast = kToolbarNone
+  };
+
   void PaintThemedFrame(gfx::Canvas* canvas);
   int GetTabStripRightInset() const;
 
+  // Used to keep track of the update of kShowFullscreenToolbar preference.
+  PrefChangeRegistrar pref_registrar_;
+
+  // The style of the fullscreen toolbar.
+  FullscreenToolbarStyle toolbar_style_;
+
   DISALLOW_COPY_AND_ASSIGN(BrowserNonClientFrameViewMac);
 };
 
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
index 74ca3ac..4556e42 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
@@ -4,12 +4,16 @@
 
 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h"
 
+#include "base/metrics/histogram_macros.h"
 #include "chrome/browser/themes/theme_properties.h"
+#include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
 #include "chrome/browser/ui/layout_constants.h"
 #include "chrome/browser/ui/views/frame/browser_frame.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/frame/browser_view_layout.h"
 #include "chrome/browser/ui/views/tabs/tab_strip.h"
+#include "chrome/common/pref_names.h"
+#include "components/prefs/pref_service.h"
 #include "ui/base/hit_test.h"
 #include "ui/base/theme_provider.h"
 #include "ui/gfx/canvas.h"
@@ -26,7 +30,13 @@
 BrowserNonClientFrameViewMac::BrowserNonClientFrameViewMac(
     BrowserFrame* frame,
     BrowserView* browser_view)
-    : BrowserNonClientFrameView(frame, browser_view) {}
+    : BrowserNonClientFrameView(frame, browser_view) {
+  pref_registrar_.Init(browser_view->GetProfile()->GetPrefs());
+  pref_registrar_.Add(
+      prefs::kShowFullscreenToolbar,
+      base::BindRepeating(&BrowserNonClientFrameViewMac::UpdateFullscreenTopUI,
+                          base::Unretained(this), false));
+}
 
 BrowserNonClientFrameViewMac::~BrowserNonClientFrameViewMac() {
 }
@@ -68,6 +78,40 @@
   return 0;
 }
 
+void BrowserNonClientFrameViewMac::UpdateFullscreenTopUI(
+    bool is_exiting_fullscreen) {
+  FullscreenToolbarStyle old_style = toolbar_style_;
+
+  // Update to the new toolbar style if needed.
+  FullscreenController* controller =
+      browser_view()->GetExclusiveAccessManager()->fullscreen_controller();
+  if ((controller->IsWindowFullscreenForTabOrPending() ||
+       controller->IsExtensionFullscreenOrPending()) &&
+      !is_exiting_fullscreen) {
+    toolbar_style_ = FullscreenToolbarStyle::kToolbarNone;
+  } else {
+    PrefService* prefs = browser_view()->GetProfile()->GetPrefs();
+    toolbar_style_ = prefs->GetBoolean(prefs::kShowFullscreenToolbar)
+                         ? FullscreenToolbarStyle::kToolbarPresent
+                         : FullscreenToolbarStyle::kToolbarHidden;
+  }
+
+  if (old_style != toolbar_style_) {
+    // Re-layout if toolbar style changes in fullscreen mode.
+    if (frame()->IsFullscreen())
+      browser_view()->Layout();
+    UMA_HISTOGRAM_ENUMERATION(
+        "OSX.Fullscreen.ToolbarStyle", toolbar_style_,
+        static_cast<int>(FullscreenToolbarStyle::kToolbarLast) + 1);
+  }
+}
+
+bool BrowserNonClientFrameViewMac::ShouldHideTopUIForFullscreen() const {
+  return frame()->IsFullscreen()
+             ? toolbar_style_ != FullscreenToolbarStyle::kToolbarPresent
+             : false;
+}
+
 void BrowserNonClientFrameViewMac::UpdateThrobber(bool running) {
 }
 
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index f77784e..b122aef 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -951,14 +951,7 @@
   if (immersive_mode_controller_->IsEnabled())
     return false;
 
-#if defined(OS_MACOSX)
-  // On Mac, fullscreen mode still has top chrome UI such as Toolbar and
-  // Tabstrip unless the user explicitly turned that off.
-  return IsFullscreen() && !browser_->profile()->GetPrefs()->GetBoolean(
-                               prefs::kShowFullscreenToolbar);
-#else
-  return IsFullscreen();
-#endif
+  return frame_->GetFrameView()->ShouldHideTopUIForFullscreen();
 }
 
 bool BrowserView::IsFullscreen() const {
@@ -976,8 +969,12 @@
 }
 
 void BrowserView::FullscreenStateChanged() {
-  CHECK(!IsFullscreen());
-  ProcessFullscreen(false, GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE);
+  bool fullscreen = IsFullscreen();
+  ProcessFullscreen(
+      fullscreen, GURL(),
+      fullscreen
+          ? GetExclusiveAccessManager()->GetExclusiveAccessExitBubbleType()
+          : EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE);
 }
 
 void BrowserView::SetToolbarButtonProvider(ToolbarButtonProvider* provider) {
@@ -2749,6 +2746,11 @@
   return browser_->profile();
 }
 
+void BrowserView::UpdateUIForTabFullscreen(TabFullscreenState state) {
+  frame()->GetFrameView()->UpdateFullscreenTopUI(
+      state == ExclusiveAccessContext::STATE_EXIT_TAB_FULLSCREEN);
+}
+
 WebContents* BrowserView::GetActiveWebContents() {
   return browser_->tab_strip_model()->GetActiveWebContents();
 }
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index c3455b3..b7b5afa 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -256,7 +256,6 @@
 
   // Called after the widget's fullscreen state is changed without going through
   // FullscreenController. This method does any processing which was skipped.
-  // Only exiting fullscreen in this way is currently supported.
   void FullscreenStateChanged();
 
   // Sets the button provider for this BrowserView. Must be called before
@@ -470,6 +469,7 @@
 
   // ExclusiveAccessContext:
   Profile* GetProfile() override;
+  void UpdateUIForTabFullscreen(TabFullscreenState state) override;
   content::WebContents* GetActiveWebContents() override;
   void HideDownloadShelf() override;
   void UnhideDownloadShelf() override;
diff --git a/chrome/browser/ui/views/frame/browser_view_interactive_uitest.cc b/chrome/browser/ui/views/frame/browser_view_interactive_uitest.cc
index 068af85..08d1701 100644
--- a/chrome/browser/ui/views/frame/browser_view_interactive_uitest.cc
+++ b/chrome/browser/ui/views/frame/browser_view_interactive_uitest.cc
@@ -7,9 +7,11 @@
 #include "base/macros.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/views/scoped_macviews_browser_mode.h"
+#include "content/public/browser/web_contents.h"
 
 #if defined(OS_MACOSX)
 #include "chrome/browser/ui/browser_commands_mac.h"
@@ -54,8 +56,8 @@
 }
 
 // Test whether the top view including toolbar and tab strip shows up or hides
-// correctly in full screen mode.
-IN_PROC_BROWSER_TEST_F(BrowserViewTest, FullscreenShowTopView) {
+// correctly in browser full screen mode.
+IN_PROC_BROWSER_TEST_F(BrowserViewTest, BrowserFullscreenShowTopView) {
   BrowserView* browser_view = static_cast<BrowserView*>(browser()->window());
 
   // The top view should always show up in regular mode.
@@ -80,6 +82,11 @@
   chrome::ToggleFullscreenMode(browser());
   EXPECT_TRUE(browser_view->IsFullscreen());
   EXPECT_FALSE(browser_view->IsTabStripVisible());
+
+  // Test toggling toolbar while being in fullscreen mode.
+  chrome::ToggleFullscreenToolbar(browser());
+  EXPECT_TRUE(browser_view->IsFullscreen());
+  EXPECT_TRUE(browser_view->IsTabStripVisible());
 #else
   // In immersive full screen mode, the top view should show up; otherwise, it
   // always hides.
@@ -88,4 +95,47 @@
   else
     EXPECT_FALSE(browser_view->IsTabStripVisible());
 #endif
+
+  // Enter into tab full screen mode from browser fullscreen mode.
+  FullscreenController* controller =
+      browser()->exclusive_access_manager()->fullscreen_controller();
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  controller->EnterFullscreenModeForTab(web_contents, GURL());
+  EXPECT_TRUE(browser_view->IsFullscreen());
+  if (browser_view->immersive_mode_controller()->IsEnabled())
+    EXPECT_TRUE(browser_view->IsTabStripVisible());
+  else
+    EXPECT_FALSE(browser_view->IsTabStripVisible());
+
+  // Return back to regular mode.
+  chrome::ToggleFullscreenMode(browser());
+  EXPECT_FALSE(browser_view->IsFullscreen());
+  EXPECT_TRUE(browser_view->IsTabStripVisible());
+}
+
+// Test whether the top view including toolbar and tab strip appears or hides
+// correctly in tab full screen mode.
+IN_PROC_BROWSER_TEST_F(BrowserViewTest, TabFullscreenShowTopView) {
+  BrowserView* browser_view = static_cast<BrowserView*>(browser()->window());
+
+  // The top view should always show up in regular mode.
+  EXPECT_FALSE(browser_view->IsFullscreen());
+  EXPECT_TRUE(browser_view->IsTabStripVisible());
+
+  // Enter into tab full screen mode.
+  FullscreenController* controller =
+      browser()->exclusive_access_manager()->fullscreen_controller();
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  controller->EnterFullscreenModeForTab(web_contents, GURL());
+  EXPECT_TRUE(browser_view->IsFullscreen());
+
+  // The top view should not show up.
+  EXPECT_FALSE(browser_view->IsTabStripVisible());
+
+  // After exiting the fullscreen mode, the top view should show up again.
+  controller->ExitFullscreenModeForTab(web_contents);
+  EXPECT_FALSE(browser_view->IsFullscreen());
+  EXPECT_TRUE(browser_view->IsTabStripVisible());
 }
diff --git a/chrome/browser/ui/views/select_file_dialog_extension.cc b/chrome/browser/ui/views/select_file_dialog_extension.cc
index 18bd928..13e5786b 100644
--- a/chrome/browser/ui/views/select_file_dialog_extension.cc
+++ b/chrome/browser/ui/views/select_file_dialog_extension.cc
@@ -103,15 +103,8 @@
 #if defined(OS_CHROMEOS)
 // Return the Chrome OS WebUI login WebContents, if applicable.
 content::WebContents* GetLoginWebContents() {
-  chromeos::LoginDisplayHost* const login_display_host =
-      chromeos::LoginDisplayHost::default_host();
-  if (!login_display_host)
-    return nullptr;
-  chromeos::WebUILoginView* const view =
-      login_display_host->GetWebUILoginView();
-  if (!view)
-    return nullptr;
-  return view->GetWebContents();
+  chromeos::LoginDisplayHost* host = chromeos::LoginDisplayHost::default_host();
+  return host ? host->GetOobeWebContents() : nullptr;
 }
 #endif
 
@@ -140,7 +133,6 @@
   }
 
   if (app_window) {
-    DCHECK(!app_window->window_type_is_panel());
     *base_window = app_window->GetBaseWindow();
     *web_contents = app_window->web_contents();
   } else {
diff --git a/chrome/browser/ui/views/tabs/new_tab_button.cc b/chrome/browser/ui/views/tabs/new_tab_button.cc
index 1bc6bad..04a5875a 100644
--- a/chrome/browser/ui/views/tabs/new_tab_button.cc
+++ b/chrome/browser/ui/views/tabs/new_tab_button.cc
@@ -21,6 +21,7 @@
 #include "third_party/skia/include/pathops/SkPathOps.h"
 #include "ui/base/default_theme_provider.h"
 #include "ui/base/material_design/material_design_controller.h"
+#include "ui/gfx/color_palette.h"
 #include "ui/gfx/color_utils.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/gfx/scoped_canvas.h"
@@ -28,7 +29,6 @@
 #include "ui/views/animation/ink_drop_impl.h"
 #include "ui/views/animation/ink_drop_mask.h"
 #include "ui/views/widget/widget.h"
-
 #if defined(OS_WIN)
 #include "ui/display/win/screen_win.h"
 #include "ui/gfx/win/hwnd_util.h"
@@ -518,7 +518,10 @@
 
 void NewTabButton::InitButtonIcons() {
   DCHECK(MD::IsNewerMaterialUi());
-  const SkColor icon_color = tab_strip_->GetTabForegroundColor(TAB_INACTIVE);
+  const SkColor icon_color =
+      color_utils::IsDark(tab_strip_->GetTabForegroundColor(TAB_INACTIVE))
+          ? gfx::kChromeIconGrey
+          : SK_ColorWHITE;
   // TODO(b/851041): is there a better source for these icon sizes?
   const int size = MD::IsTouchOptimizedUiEnabled() ? 14 : 12;
   plus_icon_ = gfx::CreateVectorIcon(kNewTabButtonPlusIcon, size, icon_color);
diff --git a/chrome/browser/vr/ganesh_surface_provider.cc b/chrome/browser/vr/ganesh_surface_provider.cc
index 8f70b9c..834f7a6 100644
--- a/chrome/browser/vr/ganesh_surface_provider.cc
+++ b/chrome/browser/vr/ganesh_surface_provider.cc
@@ -21,7 +21,7 @@
   const char* renderer_str =
       reinterpret_cast<const char*>(glGetString(GL_RENDERER));
   std::string extensions_string(gl::GetGLExtensionsFromCurrentContext());
-  gl::ExtensionSet extensions(gl::MakeExtensionSet(extensions_string));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(extensions_string));
   gl::GLVersionInfo gl_version_info(version_str, renderer_str, extensions);
   sk_sp<const GrGLInterface> gr_interface =
       gl::init::CreateGrGLInterface(gl_version_info);
diff --git a/chrome/browser/vr/model/model.cc b/chrome/browser/vr/model/model.cc
index 526738ed..0660a19 100644
--- a/chrome/browser/vr/model/model.cc
+++ b/chrome/browser/vr/model/model.cc
@@ -34,10 +34,10 @@
 
 const ColorScheme& Model::color_scheme() const {
   ColorScheme::Mode mode = ColorScheme::kModeNormal;
-  if (fullscreen_enabled())
-    mode = ColorScheme::kModeFullscreen;
   if (incognito)
     mode = ColorScheme::kModeIncognito;
+  if (fullscreen_enabled())
+    mode = ColorScheme::kModeFullscreen;
   return ColorScheme::GetColorScheme(mode);
 }
 
diff --git a/chrome/browser/vr/ui_unittest.cc b/chrome/browser/vr/ui_unittest.cc
index 7c2d2e0..be436ce 100644
--- a/chrome/browser/vr/ui_unittest.cc
+++ b/chrome/browser/vr/ui_unittest.cc
@@ -241,12 +241,12 @@
             fullscreen_background);
 
   model_->incognito = true;
-  // Make sure background has changed for incognito.
+  // Make sure background remains fullscreen colored.
   SkColor incognito_background = SK_ColorBLACK;
   GetBackgroundColor(&incognito_background);
-  EXPECT_EQ(
-      ColorScheme::GetColorScheme(ColorScheme::kModeIncognito).world_background,
-      incognito_background);
+  EXPECT_EQ(ColorScheme::GetColorScheme(ColorScheme::kModeFullscreen)
+                .world_background,
+            incognito_background);
 
   model_->incognito = false;
   SkColor no_longer_incognito_background = SK_ColorBLACK;
@@ -258,10 +258,13 @@
   GetBackgroundColor(&no_longer_fullscreen_background);
   EXPECT_EQ(initial_background, no_longer_fullscreen_background);
 
+  // Incognito, but not fullscreen, should show incognito colors.
   model_->incognito = true;
   SkColor incognito_again_background = SK_ColorBLACK;
   GetBackgroundColor(&incognito_again_background);
-  EXPECT_EQ(incognito_background, incognito_again_background);
+  EXPECT_EQ(
+      ColorScheme::GetColorScheme(ColorScheme::kModeIncognito).world_background,
+      incognito_again_background);
 
   model_->incognito = false;
   SkColor no_longer_incognito_again_background = SK_ColorBLACK;
@@ -1045,7 +1048,7 @@
       ui_->SetIncognito(false);
       ui_->SetFullscreen(true);
     }
-    ColorScheme scheme = ColorScheme::GetColorScheme(mode);
+    ColorScheme scheme = model_->color_scheme();
     RunForMs(kAnimationTimeMs);
     VerifyButtonColor(button, scheme.disc_button_colors.foreground,
                       scheme.disc_button_colors.background, "normal");
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color.zip b/chrome/common/extensions/docs/examples/tutorials/broken_background_color.zip
new file mode 100644
index 0000000..3b9b80f0
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color.zip
Binary files differ
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/background.js b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/background.js
new file mode 100644
index 0000000..9465c72
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/background.js
@@ -0,0 +1,20 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+// There's a typo in the line below; oninstalled should be onInstalled.
+chrome.runtime.oninstalled.addListener(function() {
+  chrome.storage.sync.set({color: '#3aa757'}, function() {
+    console.log('The color is green.');
+  });
+  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
+    chrome.declarativeContent.onPageChanged.addRules([{
+      conditions: [new chrome.declarativeContent.PageStateMatcher({
+        pageUrl: {hostEquals: 'developer.chrome.com'},
+      })],
+      actions: [new chrome.declarativeContent.ShowPageAction()]
+    }]);
+  });
+});
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started128.png b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started128.png
new file mode 100644
index 0000000..4c1cf87
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started128.png
Binary files differ
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started16.png b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started16.png
new file mode 100644
index 0000000..fb8531c
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started16.png
Binary files differ
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started32.png b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started32.png
new file mode 100644
index 0000000..7715223
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started32.png
Binary files differ
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started48.png b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started48.png
new file mode 100644
index 0000000..94ddde9b
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/images/get_started48.png
Binary files differ
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/manifest.json b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/manifest.json
new file mode 100644
index 0000000..8e84613
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/manifest.json
@@ -0,0 +1,27 @@
+{
+  "name": "Broken Background Color",
+  "version": "1.0",
+  "description": "Fix an Extension!",
+  "permissions": ["activeTab", "declarativeContent", "storage"],
+  "options_page": "options.html",
+  "background": {
+    "scripts": ["background.js"],
+    "persistent": false
+  },
+  "page_action": {
+    "default_popup": "popup.html",
+    "default_icon": {
+      "16": "images/get_started16.png",
+      "32": "images/get_started32.png",
+      "48": "images/get_started48.png",
+      "128": "images/get_started128.png"
+    }
+  },
+  "icons": {
+    "16": "images/get_started16.png",
+    "32": "images/get_started32.png",
+    "48": "images/get_started48.png",
+    "128": "images/get_started128.png"
+  },
+  "manifest_version": 2
+}
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/options.html b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/options.html
new file mode 100644
index 0000000..b46772d
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/options.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <style>
+      button {
+        height: 30px;
+        width: 30px;
+        outline: none;
+        margin: 10px;
+      }
+    </style>
+  </head>
+  <body>
+    <div id="buttonDiv">
+    </div>
+    <div>
+      <p>Choose a different background color!</p>
+    </div>
+  </body>
+  <script src="options.js"></script>
+</html>
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/options.js b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/options.js
new file mode 100644
index 0000000..94f8e545b
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/options.js
@@ -0,0 +1,21 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+let page = document.getElementById('buttonDiv');
+const kButtonColors = ['#3aa757', '#e8453c', '#f9bb2d', '#4688f1'];
+function constructOptions(kButtonColors) {
+  for (let item of kButtonColors) {
+    let button = document.createElement('button');
+    button.style.backgroundColor = item;
+    button.addEventListener('click', function() {
+      chrome.storage.sync.set({color: item}, function() {
+        console.log('color is ' + item);
+      })
+    });
+    page.appendChild(button);
+  }
+}
+constructOptions(kButtonColors);
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/popup.html b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/popup.html
new file mode 100644
index 0000000..77247ec2
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/popup.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <style>
+      button {
+        height: 30px;
+        width: 30px;
+        outline: none;
+        background-color: #3aa757;
+      }
+    </style>
+  </head>
+  <body>
+    <button id="changeColor"></button>
+    <script src="popup.js"></script>
+  </body>
+</html>
diff --git a/chrome/common/extensions/docs/examples/tutorials/broken_background_color/popup.js b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/popup.js
new file mode 100644
index 0000000..baec3802
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/tutorials/broken_background_color/popup.js
@@ -0,0 +1,23 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+let changeColor = document.getElementById('changeColor');
+
+chrome.storage.sync.get('color', function(data) {
+  changeColor.style.backgroundColor = data.color;
+  changeColor.setAttribute('value', data.color);
+});
+
+changeColor.onclick = function(element) {
+  let color = element.target.value;
+  // The extension must query the active tab
+  // before it can injected a content script
+  chrome.tabs.executeScript(
+      tabs[0].id,
+      // Scripts injected with tabs.executeScript() will not have access to
+      // variables from this context, leaving |color| undefined.
+      {code: 'document.body.style.backgroundColor = color;'});
+};
diff --git a/chrome/common/extensions/docs/static/images/debugging/background_error.png b/chrome/common/extensions/docs/static/images/debugging/background_error.png
new file mode 100644
index 0000000..bb3ec93d
--- /dev/null
+++ b/chrome/common/extensions/docs/static/images/debugging/background_error.png
Binary files differ
diff --git a/chrome/common/extensions/docs/static/images/debugging/content_script_error.png b/chrome/common/extensions/docs/static/images/debugging/content_script_error.png
new file mode 100644
index 0000000..1f79e2f
--- /dev/null
+++ b/chrome/common/extensions/docs/static/images/debugging/content_script_error.png
Binary files differ
diff --git a/chrome/common/extensions/docs/static/images/debugging/error_button.png b/chrome/common/extensions/docs/static/images/debugging/error_button.png
new file mode 100644
index 0000000..c1034d27
--- /dev/null
+++ b/chrome/common/extensions/docs/static/images/debugging/error_button.png
Binary files differ
diff --git a/chrome/common/extensions/docs/static/images/debugging/inspect_content_script.png b/chrome/common/extensions/docs/static/images/debugging/inspect_content_script.png
new file mode 100644
index 0000000..04b81d5
--- /dev/null
+++ b/chrome/common/extensions/docs/static/images/debugging/inspect_content_script.png
Binary files differ
diff --git a/chrome/common/extensions/docs/static/images/debugging/inspect_popup.png b/chrome/common/extensions/docs/static/images/debugging/inspect_popup.png
new file mode 100644
index 0000000..a1a3fec4
--- /dev/null
+++ b/chrome/common/extensions/docs/static/images/debugging/inspect_popup.png
Binary files differ
diff --git a/chrome/common/extensions/docs/static/images/debugging/inspect_views_background.png b/chrome/common/extensions/docs/static/images/debugging/inspect_views_background.png
new file mode 100644
index 0000000..d2da6cd
--- /dev/null
+++ b/chrome/common/extensions/docs/static/images/debugging/inspect_views_background.png
Binary files differ
diff --git a/chrome/common/extensions/docs/static/images/debugging/network_reload.gif b/chrome/common/extensions/docs/static/images/debugging/network_reload.gif
new file mode 100644
index 0000000..bf6f010
--- /dev/null
+++ b/chrome/common/extensions/docs/static/images/debugging/network_reload.gif
Binary files differ
diff --git a/chrome/common/extensions/docs/static/images/debugging/popup_error.png b/chrome/common/extensions/docs/static/images/debugging/popup_error.png
new file mode 100644
index 0000000..82ae5a44
--- /dev/null
+++ b/chrome/common/extensions/docs/static/images/debugging/popup_error.png
Binary files differ
diff --git a/chrome/common/extensions/docs/templates/articles/tut_debugging.html b/chrome/common/extensions/docs/templates/articles/tut_debugging.html
index 08afd58..f7d0e8b2 100644
--- a/chrome/common/extensions/docs/templates/articles/tut_debugging.html
+++ b/chrome/common/extensions/docs/templates/articles/tut_debugging.html
@@ -1,262 +1,274 @@
-<h1>Tutorial: Debugging</h1>
+<h1>Debugging Extensions</h1>
 
 
 <p>
-This tutorial introduces you to using
-Google Chrome's built-in Developer Tools
-to interactively debug an extension.
+  Extensions are able to leverage the same debugging benifits
+  <a href="https://developers.google.com/web/tools/chrome-devtools/">
+    Chrome DevTools
+  </a> provides for web pages,
+  but they carry unique behavior properties.
+  Becoming a master extension debugger
+  requires an understanding of these behaviors,
+  how extension components work with each other,
+  and where to corner bugs.
+  This tutorial gives developers a basic understanding of debugging extensions.
 </p>
 
 
-<h2 id="extension-info"> View extension information </h2>
+<h2 id="locate_logs">Locate the Logs</h2>
 
 <p>
-To follow this tutorial, you need
-the Hello World extension that was featured in
-<a href="getstarted">Getting Started</a>.
-In this section,
-you'll load the extension
-and take a look at its information
-in the Extensions page.
+  Extensions are made of many different components,
+  and these components have individual responsibilities.
+  Download a broken extension
+  <a href="examples/tutorials/broken_background_color.zip"
+  download="broken_background_color.zip">here</a>
+  to begin locating error logs for different extension components.
 </p>
 
-<ol>
-  <li>
-    <p>
-      Load the Hello World extension if it isn't already running.
-      If the extension is running,
-      you'll see the Hello World icon
-      <img src="examples/tutorials/getstarted/icon.png"
-           width="19" height="19" alt=""
-           style="margin:0" />
-      to the right of
-      your browser's address bar.
-    </p>
+<h3 id="debug_bg">Background Script</h3>
+<p>
+  Navigate to the chrome extensions management page at
+  <code>chrome://extensions</code> and
+  ensure developer mode is on.
+  Click the <b>Load Unpacked</b> button
+  and select the broken extension directory.
+  After the extension is loaded,
+  it should have three buttons:
+  <b>Details</b>, <b>Remove</b> and <b>Errors</b> in red letters.
+</p>
 
-    <p>
-      If the Hello World extension isn't already running,
-      find the extension files and load them.
-      If you don't have a handy copy of the files,
-      extract them from this
-      <a href="examples/tutorials/getstarted.zip" download="getstarted.zip">ZIP file</a>.
-      See Getting Started if you need
-      <a href="getstarted#unpacked">instructions
-      for loading the extension</a>.
-    </p>
-  </li>
-
-  <li>
-  Go to the Extensions page
-  (<b>chrome://extensions</b>),
-  and make sure the page is in Developer mode.
-  </li>
-
-  <li>
-  Look at the Hello World extension's information on that page.
-  You can see details such as the extension's
-  name, description, and ID.
-  </li>
-</ol>
-
-<h2 id="inspect-popup"> Inspect the popup </h2>
+<img src="{{static}}/images/debugging/error_button.png"
+      alt="Image displaying error button on extension management page">
 
 <p>
-As long as your browser is in Developer mode, it's easy to inspect popups.
+  Click the <b>Errors</b> button to view the error log.
+  The extensions system has found an issue in the background script.
 </p>
 
-<ol>
-  <li>
-  Go to the Extensions page (<b>chrome://extensions</b>), and make sure Developer
-  mode is still enabled. The Extensions page doesn't need to be open
-  for the following to work. The browser remembers the setting,
-  even when the page isn't shown.
-  </li>
-  <li>
-  Right-click the Hello World icon
-  <img src="examples/tutorials/getstarted/icon.png"
-       width="19" height="19" alt=""
-       style="margin:0" />
-  and choose the <b>Inspect popup</b> menu item. The popup appears,
-  and a Developer Tools window like the following should display the code
-  for <b>popup.html</b>.
-
-  <p>
-     <img src="{{static}}/images/devtools-1.gif" alt=""
-          width="500" height="294" />
-     </p> 
-  The popup remains open as long as the Developer Tools window does.  
-  </li>
-  <li>
-  If the <strong>Scripts</strong> button isn't already selected,
-  click it.
-  
-  </li>
-  <li>
-  Click the console button
-  <img src="{{static}}/images/console-button.gif"
-       style="margin:0; padding:0" align="absmiddle"
-       width="26" height="22" alt="" />(second
-  from left,
-  at the bottom of the Developer Tools window)
-  so that you can see both the code and the console.
-  </li>
-</ol>
-
-<h2 id="debug"> Use the debugger </h2>
-
 <p>
-In this section,
-you'll follow the execution of the popup page
-as it adds images to itself.
+  <code style="color:red;">
+    Uncaught TypeError: Cannot read property ‘addListener’ of undefined
+  </code>
 </p>
 
-<ol>
-  <li>
-  Set a breakpoint inside the image-adding loop
-  by searching for the string <b>img.src</b>
-  and clicking the number of the line where it occurs
-  (for example, <strong>37</strong>):
-  <p>
-  <img src="{{static}}/images/devtools-2.gif" alt=""
-       width="500" height="294" />
-  </p>
-  </li>
+<img src="{{static}}/images/debugging/background_error.png"
+      alt="Extensions Management Page displaying background script error"/>
 
-  <li>
-  Make sure you can see the <b>popup.html</b> tab.
-  It should show 20 "hello world" images.
-  </li>
+<p>
+  Additionally, the Chrome DevTools panel can be opened for the
+  background script by selecting the blue link next to
+  <b>Inspect views</b>.
+</p>
 
-  <li>
-  At the console prompt, reload the popup page
-  by entering <b>location.reload(true)</b>:
+<img src="{{static}}/images/debugging/inspect_views_background.png"
+      alt="DevTools displaying background script error"/>
 
-<pre>
-> <b>location.reload(true)</b>
+<p>
+  Return to the code.
+</p>
+<pre data-filename="background.js">
+  chrome.runtime.on<b>i</b>nstalled.addListener(function() {
+    chrome.storage.sync.set({color: '#3aa757'}, function() {
+      console.log('The color is green.');
+    });
+    chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
+      chrome.declarativeContent.onPageChanged.addRules([{
+        conditions: [new chrome.declarativeContent.PageStateMatcher({
+          pageUrl: {hostEquals: 'developer.chrome.com'},
+        })],
+        actions: [new chrome.declarativeContent.ShowPageAction()]
+      }]);
+    });
+  });
 </pre>
 
-  <p>
-  The popup page goes blank as it begins to reload,
-  and its execution stops at line 37.
-  </p>
-  </li>
-
-  <li>
-  In the upper right part of the tools window,
-  you should see the local scope variables.
-  This section shows the current values of all variables in the current scope.
-  For example, in the following screenshot
-  the value of <code>i</code> is 0, and
-  <code>photos</code> is a node list
-  that contains at least a few elements.
-  (In fact, it contains 20 elements at indexes 0 through 19,
-  each one representing a photo.)
-
-  <p>
-  <img src="{{static}}/images/devtools-localvars.gif" alt=""
-       width="225" height="215" />
-  </p>
-  </li>
-
-  <li>
-  Click the play/pause button
-  <img src="{{static}}/images/play-button.gif"
-       style="margin:0; padding:0" align="absmiddle"
-       width="22" height="20" alt="" />(near
-  the top right of the Developer Tools window)
-  to go through the image-processing loop a single time.
-  Each time you click that button,
-  the value of <code>i</code> increments and
-  another icon appears in the popup page.
-  For example, when <code>i</code> is 10,
-  the popup page looks something like this:
-  </li>
-
-  <p>
-  <img src="{{static}}/images/devtools-3.gif"
-       width="500" height="245"
-       alt="the popup page with 10 images" />
-  </p>
-
-  <li>
-  Use the buttons next to the play/pause button
-  to step over, into, and out of function calls.
-  To let the page finish loading,
-  click line <b>37</b> to disable the breakpoint,
-  and then press play/pause
-  <img src="{{static}}/images/play-button.gif"
-       style="margin:0; padding:0" align="absmiddle"
-       width="22" height="20" alt="" />to
-  continue execution.
-  </li>
-
-</ol>
-
-
-<h2 id="summary">Summary</h2>
-
 <p>
-This tutorial demonstrated some techniques you can use
-to debug your extensions:
+  The background script is attempting to listen for the
+  <a href="extensions/runtime#event-onInstalled"><code>onInstalled</code></a>
+  event,
+  but the property name requires an upper case "I".
+  Update the code to reflect the correct call,
+  click the <b>Clear all</b> button in the upper right hand corner,
+  then reload the extension.
 </p>
 
-<ul>
-  <li>
-    Find your extension's ID and links to its pages in
-    the <b>Extensions</b> page
-    (<b>chrome://extensions</b>).
-  </li>
-  <li>
-    View hard-to-reach pages
-    (and any other file in your extension) using
-    <b>chrome-extension://</b><em>extensionId</em><b>/</b><em>filename</em>.
-  </li>
-  <li>
-    Use Developer Tools to inspect
-    and step through a page's JavaScript code.
-  </li>
-  <li>
-    Reload the currently inspected page from the console
-    using <b>location.reload(true)</b>.
-  </li>
-</ul>
-
-
-<h2 id="next">Now what?</h2>
+<h3 id="debug_popup">Popup</h3>
 
 <p>
-Now that you've been introduced to debugging,
-here are suggestions for what to do next:
+  Now that the extension initializes correctly,
+  other components can be tested.
+  Refresh this page,
+  or open a new tab and naigate to any page on developer.chrome.com,
+  open the popup and click the green square.
+  And... nothing happens.
 </p>
 
-<ul>
-  <li>
-    Watch the extensions video
-    <a href="http://www.youtube.com/watch?v=IP0nMv_NI1s&feature=PlayList&p=CA101D6A85FE9D4B&index=5">Developing and Debugging</a>.
-  </li>
-  <li>
-    Try installing and inspecting other extensions,
-    such as the
-    <a href="samples">samples</a>.
-  </li>
-  <li>
-    Try using widely available debugging APIs such as
-    <code>console.log()</code> and <code>console.error()</code>
-    in your extension's JavaScript code.
-    Example: <code>console.log("Hello, world!")</code>
-  </li>
-  <li>
-    Follow the <a href="http://www.chromium.org/devtools/google-chrome-developer-tools-tutorial">Developer Tools tutorial</a>,
-    explore the
-    <a href="http://www.chromium.org/devtools">Developer Tools site</a>,
-    and watch some video tutorials.
-  </li>
-</ul>
+<p>
+  Navigate back to the Extensions Management Page,
+  the <b>Errors</b> button has reappeared.
+  Click it to view the new log.
+</p>
+<p>
+  <code style="color:red;">
+    Uncaught ReferenceError: tabs is not defined
+  </code>
+</p>
 
-
+<img src="{{static}}/images/debugging/popup_error.png"
+      alt="Extensions Management Page displaying popup error"/>
 
 <p>
-For more ideas,
-see the <a href="getstarted#next-steps">Now what?</a> section
-of Getting Started.
+  Popup errors can also be viewed by inspecting the popup.
+</p>
+
+<img src="{{static}}/images/debugging/inspect_popup.png"
+      alt="DevTools displaying popup error"/>
+
+<p>
+  The error, <code>tabs is undefined</code>,
+  says the extension doesn’t know where to inject the content script.
+  This can be corrected by calling the
+  <a href="/extensions/tabs#method-query"><code>tabs.query()</code></a>
+  method,
+  then selecting the active tab.
+</p>
+
+<pre data-filename="popup.js">
+  let changeColor = document.getElementById('changeColor');
+
+  chrome.storage.sync.get('color', function(data) {
+    changeColor.style.backgroundColor = data.color;
+    changeColor.setAttribute('value', data.color);
+  });
+
+  changeColor.onclick = function(element) {
+    let color = element.target.value;
+    <b>chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {</b>
+      chrome.tabs.executeScript(
+          tabs[0].id,
+          {code: 'document.body.style.backgroundColor = color;'});
+    <b>});</b>
+  };
+</pre>
+
+<p>
+  Update the code,
+  click the <b>Clear all</b> button in the upper right hand corner,
+  and then reload the extension.
+</p>
+
+<h3 id="debug_cs">Content Script</h3>
+
+<p>
+  Refresh the page, open the popup and click the green box.
+  And... nope, the background still hasn’t changed colors!
+  Navigate back to the Extensions Management Page
+  and... there is no <b>Errors</b> button.
+  The likely culprite is the content script,
+  which runs inside the web page.
+</p>
+
+<p>
+  Open the DevTools pannel of the web page the extension is trying to alter.
+</p>
+
+<img src="{{static}}/images/debugging/content_script_error.png"
+      alt="Extension error displayed in web page console"/>
+
+<p>
+  Only runtime errors, <code>console.warning</code>
+  and <code>console.error</code> will be recorded on the
+  Extensions Management Page.
+</p>
+<p>
+  To use DevTools from within the content script,
+  click the dropdown arrow next to <b>top</b> and select the extension.
+</p>
+
+<img src="{{static}}/images/debugging/inspect_content_script.png"
+      alt="Uncaught ReferenceError: tabs is not defined"/>
+
+<p>
+  The error says <code>color</code> is not defined.
+  The extension must not be passing the variable correctly.
+  Correct the injected script to pass the color variable into the code.
+</p>
+<pre data-filename="popup.js">
+  {code: 'document.body.style.backgroundColor = "' + color + '";'});
+</pre>
+
+<h3 id="extension_tabs">Extension Tabs</h3>
+
+<p>
+  Logs for extension pages displayed as a tab,
+  such as <a href="extensions/override">override pages</a> and
+  <a href="extensions/options#full_page">full-page options</a>,
+  can be found in the web page console and on the extensions management page.
+</p>
+
+<h2 id="network_requests">Monitor Network Requests</h2>
+<p>
+  The popup will often make all of the required network requests before even the
+  speediest of developers can open DevTools.
+  To view these requests, refresh from inside the network pannel.
+  It will reload the popup without closing the DevTools panel.
+</p>
+<img src="{{static}}/images/debugging/network_reload.gif"
+      alt="Refresh inside the network panel to view popup network requests"/>
+
+<h2 id="declare_permission">Declare Permissions</h2>
+<p>
+  While extensions have similar capabilities as web pages
+  they often need permission to use certain features,
+  such as <a href="/extensions/cookies">cookies</a>,
+  <a href="/extensions/storage">storage</a> and
+  <a href="/extensions/xhr">Cross-Origin XMLHttpRequsts</a>.
+  Refer to the <a href="extensions/permission_warnings">permissions article</a>
+  and the availabe <a href="/extensions/api_index">Chrome APIs</a>
+  to ensure an extension is requesting the correct permissions in its
+  <a href="/extensions/manifest">manifest</a>.
+</p>
+<pre data-filename="manifest.json">
+  {
+    "name": "Broken Background Color",
+    "version": "1.0",
+    "description": "Fix an Extension!",
+    <b>"permissions": [</b>
+      <b>"activeTab",</b>
+      <b>"declarativeContent",</b>
+      <b>"storage"</b>
+    <b>],</b>
+    "options_page": "options.html",
+    "background": {
+      "scripts": ["background.js"],
+      "persistent": false
+    },
+    "page_action": {
+      "default_popup": "popup.html",
+      "default_icon": {
+        "16": "images/get_started16.png",
+        "32": "images/get_started32.png",
+        "48": "images/get_started48.png",
+        "128": "images/get_started128.png"
+      }
+    },
+    "icons": {
+      "16": "images/get_started16.png",
+      "32": "images/get_started32.png",
+      "48": "images/get_started48.png",
+      "128": "images/get_started128.png"
+    },
+    "manifest_version": 2
+  }
+</pre>
+<h2 id="next">Next Steps</h2>
+
+<p>
+  For further information on debugging extensions,
+  watch
+  <a href="http://www.youtube.com/watch?v=IP0nMv_NI1s&feature=PlayList&p=CA101D6A85FE9D4B&index=5">Developing and Debugging</a>.
+  Learn more about
+  <a href="https://developers.google.com/web/tools/chrome-devtools/">
+    Chrome Devtools</a> by reading the documentation.
 </p>
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index edb0de0b..714d806 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -2451,7 +2451,6 @@
     "../browser/net/spdyproxy/data_reduction_proxy_chrome_settings_unittest.cc",
     "../browser/net/spdyproxy/data_reduction_proxy_settings_unittest_android.cc",
     "../browser/net/url_info_unittest.cc",
-    "../browser/notifications/desktop_notification_profile_util_unittest.cc",
     "../browser/notifications/metrics/notification_metrics_logger_unittest.cc",
     "../browser/notifications/notification_channels_provider_android_unittest.cc",
     "../browser/notifications/notification_permission_context_unittest.cc",
@@ -3380,6 +3379,7 @@
       "../browser/extensions/api/chrome_extensions_api_client_unittest.cc",
       "../browser/extensions/api/content_settings/content_settings_store_unittest.cc",
       "../browser/extensions/api/content_settings/content_settings_unittest.cc",
+      "../browser/extensions/api/cookies/cookies_helpers_unittest.cc",
       "../browser/extensions/api/cookies/cookies_unittest.cc",
       "../browser/extensions/api/cryptotoken_private/cryptotoken_private_api_unittest.cc",
       "../browser/extensions/api/declarative/rules_registry_service_unittest.cc",
@@ -4519,7 +4519,7 @@
       "../browser/ssl/cert_verifier_browser_test.h",
       "base/in_process_browser_test.cc",
       "base/in_process_browser_test.h",
-      "base/in_process_browser_test_mac.cc",
+      "base/in_process_browser_test_mac.mm",
       "base/javascript_browser_test.cc",
       "base/javascript_browser_test.h",
       "base/mojo_web_ui_browser_test.cc",
diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_process_browser_test.cc
index 62ac2df2..41ceb6b 100644
--- a/chrome/test/base/in_process_browser_test.cc
+++ b/chrome/test/base/in_process_browser_test.cc
@@ -245,6 +245,9 @@
   CHECK(base::PathService::Override(chrome::DIR_DEFAULT_DOWNLOADS,
                                     default_download_dir_.GetPath()));
 
+#if defined(OS_MACOSX)
+  InProcessBrowserTest::SetUpMacOS();
+#endif
   BrowserTestBase::SetUp();
 }
 
diff --git a/chrome/test/base/in_process_browser_test.h b/chrome/test/base/in_process_browser_test.h
index 2fd1820c..c1fc4bf 100644
--- a/chrome/test/base/in_process_browser_test.h
+++ b/chrome/test/base/in_process_browser_test.h
@@ -229,6 +229,9 @@
   base::mac::ScopedNSAutoreleasePool* AutoreleasePool() const {
     return autorelease_pool_;
   }
+
+  // Initializes macOS-only state.
+  void SetUpMacOS();
 #endif  // OS_MACOSX
 
   void set_exit_when_last_browser_closes(bool value) {
diff --git a/chrome/test/base/in_process_browser_test_mac.cc b/chrome/test/base/in_process_browser_test_mac.mm
similarity index 91%
rename from chrome/test/base/in_process_browser_test_mac.cc
rename to chrome/test/base/in_process_browser_test_mac.mm
index 7c539d6..8311292 100644
--- a/chrome/test/base/in_process_browser_test_mac.cc
+++ b/chrome/test/base/in_process_browser_test_mac.mm
@@ -10,6 +10,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
+#import "chrome/browser/ui/cocoa/chrome_command_dispatcher_delegate.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "content/public/test/test_navigation_observer.h"
 
@@ -78,9 +79,8 @@
   return browser;
 }
 
-Browser* InProcessBrowserTest::CreateBrowserForApp(
-    const std::string& app_name,
-    Profile* profile) {
+Browser* InProcessBrowserTest::CreateBrowserForApp(const std::string& app_name,
+                                                   Profile* profile) {
   // Making a browser window can cause AppKit to throw objects into the
   // autorelease pool. Flush the pool when this function returns.
   base::mac::ScopedNSAutoreleasePool pool;
@@ -90,3 +90,7 @@
   AddBlankTabAndShow(browser);
   return browser;
 }
+
+void InProcessBrowserTest::SetUpMacOS() {
+  [ChromeCommandDispatcherDelegate disableThrottleForTesting];
+}
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py
index 84b4b66a..d85577e 100755
--- a/chrome/test/chromedriver/test/run_py_tests.py
+++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -2884,6 +2884,7 @@
 
     for failure in result.failures + result.errors:
       output['tests'][failure[0].id()]['actual'] = 'FAIL'
+      output['tests'][failure[0].id()]['unexpected'] = True
 
     num_fails = len(result.failures) + len(result.errors)
     output['num_failures_by_type']['FAIL'] = num_fails
diff --git a/chromeos/components/proximity_auth/proximity_auth_local_state_pref_manager.cc b/chromeos/components/proximity_auth/proximity_auth_local_state_pref_manager.cc
index 129eb28..a8e34fc 100644
--- a/chromeos/components/proximity_auth/proximity_auth_local_state_pref_manager.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_local_state_pref_manager.cc
@@ -45,17 +45,6 @@
   active_user_ = active_user;
 }
 
-void ProximityAuthLocalStatePrefManager::SetLastPasswordEntryTimestampMs(
-    int64_t timestamp_ms) {
-  NOTREACHED();
-}
-
-int64_t ProximityAuthLocalStatePrefManager::GetLastPasswordEntryTimestampMs()
-    const {
-  NOTREACHED();
-  return 0;
-}
-
 void ProximityAuthLocalStatePrefManager::SetLastPromotionCheckTimestampMs(
     int64_t timestamp_ms) {
   NOTREACHED();
diff --git a/chromeos/components/proximity_auth/proximity_auth_local_state_pref_manager.h b/chromeos/components/proximity_auth/proximity_auth_local_state_pref_manager.h
index 2932391..1fb3424d 100644
--- a/chromeos/components/proximity_auth/proximity_auth_local_state_pref_manager.h
+++ b/chromeos/components/proximity_auth/proximity_auth_local_state_pref_manager.h
@@ -52,8 +52,6 @@
   // ProximityAuthPrefManager:
   void SetIsEasyUnlockEnabled(bool is_easy_unlock_enabled) const override;
   void SetEasyUnlockEnabledStateSet() const override;
-  void SetLastPasswordEntryTimestampMs(int64_t timestamp_ms) override;
-  int64_t GetLastPasswordEntryTimestampMs() const override;
   void SetLastPromotionCheckTimestampMs(int64_t timestamp_ms) override;
   int64_t GetLastPromotionCheckTimestampMs() const override;
   void SetPromotionShownCount(int count) override;
diff --git a/chromeos/components/proximity_auth/proximity_auth_pref_manager.h b/chromeos/components/proximity_auth/proximity_auth_pref_manager.h
index 996c24a4..e98bcbb 100644
--- a/chromeos/components/proximity_auth/proximity_auth_pref_manager.h
+++ b/chromeos/components/proximity_auth/proximity_auth_pref_manager.h
@@ -38,12 +38,6 @@
   virtual void SetEasyUnlockEnabledStateSet() const = 0;
   virtual bool IsEasyUnlockEnabledStateSet() const = 0;
 
-  // Setter and getter for the timestamp of the last password entry. This
-  // preference is used to enforce reauthing with the password after a given
-  // time period has elapsed.
-  virtual void SetLastPasswordEntryTimestampMs(int64_t timestamp_ms) = 0;
-  virtual int64_t GetLastPasswordEntryTimestampMs() const = 0;
-
   // Setter and getter for the timestamp of the last time the promotion was
   // shown to the user.
   virtual void SetLastPromotionCheckTimestampMs(int64_t timestamp_ms) = 0;
diff --git a/chromeos/components/proximity_auth/proximity_auth_pref_names.cc b/chromeos/components/proximity_auth/proximity_auth_pref_names.cc
index 1b6d0d3..fe75a0e 100644
--- a/chromeos/components/proximity_auth/proximity_auth_pref_names.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_pref_names.cc
@@ -34,11 +34,6 @@
 const char kProximityAuthIsChromeOSLoginEnabled[] =
     "proximity_auth.is_chromeos_login_enabled";
 
-// The timestamp of the last password entry in milliseconds, used to enforce
-// reauthing with the password after a given time period has elapsed.
-const char kProximityAuthLastPasswordEntryTimestampMs[] =
-    "proximity_auth.last_password_entry_timestamp_ms";
-
 // The timestamp of the last promotion check in milliseconds.
 const char kProximityAuthLastPromotionCheckTimestampMs[] =
     "proximity_auth.last_promotion_check_timestamp_ms";
diff --git a/chromeos/components/proximity_auth/proximity_auth_pref_names.h b/chromeos/components/proximity_auth/proximity_auth_pref_names.h
index 2bb4b40f..6ba0449 100644
--- a/chromeos/components/proximity_auth/proximity_auth_pref_names.h
+++ b/chromeos/components/proximity_auth/proximity_auth_pref_names.h
@@ -13,7 +13,6 @@
 extern const char kEasyUnlockEnabledStateSet[];
 extern const char kEasyUnlockProximityThreshold[];
 extern const char kEasyUnlockLocalStateUserPrefs[];
-extern const char kProximityAuthLastPasswordEntryTimestampMs[];
 extern const char kProximityAuthLastPromotionCheckTimestampMs[];
 extern const char kProximityAuthPromotionShownCount[];
 extern const char kProximityAuthRemoteBleDevices[];
diff --git a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.cc b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.cc
index 1eda179..316fe2c 100644
--- a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.cc
@@ -32,8 +32,6 @@
   registry->RegisterBooleanPref(prefs::kEasyUnlockAllowed, true);
   registry->RegisterBooleanPref(prefs::kEasyUnlockEnabled, false);
   registry->RegisterBooleanPref(prefs::kEasyUnlockEnabledStateSet, false);
-  registry->RegisterInt64Pref(prefs::kProximityAuthLastPasswordEntryTimestampMs,
-                              0L);
   registry->RegisterInt64Pref(
       prefs::kProximityAuthLastPromotionCheckTimestampMs, 0L);
   registry->RegisterIntegerPref(prefs::kProximityAuthPromotionShownCount, 0);
@@ -112,18 +110,6 @@
   return pref_service_->GetBoolean(prefs::kEasyUnlockEnabledStateSet);
 }
 
-void ProximityAuthProfilePrefManager::SetLastPasswordEntryTimestampMs(
-    int64_t timestamp_ms) {
-  pref_service_->SetInt64(prefs::kProximityAuthLastPasswordEntryTimestampMs,
-                          timestamp_ms);
-}
-
-int64_t ProximityAuthProfilePrefManager::GetLastPasswordEntryTimestampMs()
-    const {
-  return pref_service_->GetInt64(
-      prefs::kProximityAuthLastPasswordEntryTimestampMs);
-}
-
 void ProximityAuthProfilePrefManager::SetLastPromotionCheckTimestampMs(
     int64_t timestamp_ms) {
   pref_service_->SetInt64(prefs::kProximityAuthLastPromotionCheckTimestampMs,
diff --git a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h
index 9e5bfb82..981259e 100644
--- a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h
+++ b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h
@@ -52,8 +52,6 @@
   bool IsEasyUnlockEnabled() const override;
   void SetEasyUnlockEnabledStateSet() const override;
   bool IsEasyUnlockEnabledStateSet() const override;
-  void SetLastPasswordEntryTimestampMs(int64_t timestamp_ms) override;
-  int64_t GetLastPasswordEntryTimestampMs() const override;
   void SetLastPromotionCheckTimestampMs(int64_t timestamp_ms) override;
   int64_t GetLastPromotionCheckTimestampMs() const override;
   void SetPromotionShownCount(int count) override;
diff --git a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager_unittest.cc b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager_unittest.cc
index 63e4c5d..1bf62610 100644
--- a/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager_unittest.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_profile_pref_manager_unittest.cc
@@ -22,9 +22,6 @@
 
 const char kUserEmail[] = "testuser@example.com";
 
-const int64_t kPasswordEntryTimestampMs1 = 123456789L;
-const int64_t kPasswordEntryTimestampMs2 = 987654321L;
-
 const int64_t kPromotionCheckTimestampMs1 = 1111111111L;
 const int64_t kPromotionCheckTimestampMs2 = 2222222222L;
 
@@ -69,17 +66,6 @@
   EXPECT_FALSE(pref_manager.IsEasyUnlockEnabled());
 }
 
-TEST_F(ProximityAuthProfilePrefManagerTest, LastPasswordEntryTimestamp) {
-  ProximityAuthProfilePrefManager pref_manager(&pref_service_);
-  EXPECT_EQ(0L, pref_manager.GetLastPasswordEntryTimestampMs());
-  pref_manager.SetLastPasswordEntryTimestampMs(kPasswordEntryTimestampMs1);
-  EXPECT_EQ(kPasswordEntryTimestampMs1,
-            pref_manager.GetLastPasswordEntryTimestampMs());
-  pref_manager.SetLastPasswordEntryTimestampMs(kPasswordEntryTimestampMs2);
-  EXPECT_EQ(kPasswordEntryTimestampMs2,
-            pref_manager.GetLastPasswordEntryTimestampMs());
-}
-
 TEST_F(ProximityAuthProfilePrefManagerTest, LastPromotionCheckTimestamp) {
   ProximityAuthProfilePrefManager pref_manager(&pref_service_);
   EXPECT_EQ(0L, pref_manager.GetLastPromotionCheckTimestampMs());
diff --git a/chromeos/components/proximity_auth/proximity_auth_system.cc b/chromeos/components/proximity_auth/proximity_auth_system.cc
index a43522e6..6987e77 100644
--- a/chromeos/components/proximity_auth/proximity_auth_system.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_system.cc
@@ -6,7 +6,6 @@
 
 #include "base/command_line.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "base/time/default_clock.h"
 #include "chromeos/components/proximity_auth/logging/logging.h"
 #include "chromeos/components/proximity_auth/proximity_auth_client.h"
 #include "chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h"
@@ -16,20 +15,11 @@
 
 namespace proximity_auth {
 
-namespace {
-
-// The maximum number of hours permitted before the user is forced is use their
-// password to authenticate.
-const int64_t kPasswordReauthPeriodHours = 20;
-
-}  // namespace
-
 ProximityAuthSystem::ProximityAuthSystem(
     ScreenlockType screenlock_type,
     ProximityAuthClient* proximity_auth_client)
     : screenlock_type_(screenlock_type),
       proximity_auth_client_(proximity_auth_client),
-      clock_(base::DefaultClock::GetInstance()),
       pref_manager_(proximity_auth_client->GetPrefManager()),
       unlock_manager_(new UnlockManagerImpl(screenlock_type,
                                             proximity_auth_client_,
@@ -42,11 +32,9 @@
     ScreenlockType screenlock_type,
     ProximityAuthClient* proximity_auth_client,
     std::unique_ptr<UnlockManager> unlock_manager,
-    base::Clock* clock,
     ProximityAuthPrefManager* pref_manager)
     : screenlock_type_(screenlock_type),
       proximity_auth_client_(proximity_auth_client),
-      clock_(clock),
       pref_manager_(pref_manager),
       unlock_manager_(std::move(unlock_manager)),
       suspended_(false),
@@ -172,13 +160,6 @@
     return;
   }
 
-  if (ShouldForcePassword()) {
-    PA_LOG(INFO) << "Forcing password reauth.";
-    proximity_auth_client_->UpdateScreenlockState(
-        ScreenlockState::PASSWORD_REAUTH);
-    return;
-  }
-
   // TODO(tengs): We currently assume each user has only one RemoteDevice, so we
   // can simply take the first item in the list.
   cryptauth::RemoteDeviceRef remote_device = remote_devices_map_[account_id][0];
@@ -192,29 +173,4 @@
   }
 }
 
-bool ProximityAuthSystem::ShouldForcePassword() {
-  if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
-          proximity_auth::switches::kEnableForcePasswordReauth))
-    return false;
-
-  // TODO(tengs): We need to properly propagate the last login time to the login
-  // screen.
-  if (screenlock_type_ == ScreenlockType::SIGN_IN)
-    return false;
-
-  // TODO(tengs): Put this force password reauth logic behind an enterprise
-  // policy. See https://crbug.com/724717.
-  int64_t now_ms = clock_->Now().ToJavaTime();
-  int64_t last_password_ms = pref_manager_->GetLastPasswordEntryTimestampMs();
-
-  if (now_ms < last_password_ms) {
-    PA_LOG(ERROR) << "Invalid last password timestamp: now=" << now_ms
-                  << ", last_password=" << last_password_ms;
-    return true;
-  }
-
-  return base::TimeDelta::FromMilliseconds(now_ms - last_password_ms) >
-         base::TimeDelta::FromHours(kPasswordReauthPeriodHours);
-}
-
 }  // namespace proximity_auth
diff --git a/chromeos/components/proximity_auth/proximity_auth_system.h b/chromeos/components/proximity_auth/proximity_auth_system.h
index e970c15..fe2e71a8 100644
--- a/chromeos/components/proximity_auth/proximity_auth_system.h
+++ b/chromeos/components/proximity_auth/proximity_auth_system.h
@@ -72,7 +72,6 @@
   ProximityAuthSystem(ScreenlockType screenlock_type,
                       ProximityAuthClient* proximity_auth_client,
                       std::unique_ptr<UnlockManager> unlock_manager,
-                      base::Clock* clock,
                       ProximityAuthPrefManager* pref_manager);
 
   // Creates the RemoteDeviceLifeCycle for |remote_device|.
@@ -96,10 +95,6 @@
   // timeout.
   void ResumeAfterWakeUpTimeout();
 
-  // Returns true if the user should be forced to use a password to authenticate
-  // rather than EasyUnlock.
-  bool ShouldForcePassword();
-
   // The type of the screenlock (i.e. login or unlock).
   ScreenlockType screenlock_type_;
 
@@ -113,9 +108,6 @@
   // the RemoteDevice of the currently focused user.
   std::unique_ptr<RemoteDeviceLifeCycle> remote_device_life_cycle_;
 
-  // Used to get the current timestamp.
-  base::Clock* clock_;
-
   // Fetches EasyUnlock preferences. Must outlive this instance.
   ProximityAuthPrefManager* pref_manager_;
 
diff --git a/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc b/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc
index eaff9af..e04aff7 100644
--- a/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc
@@ -5,7 +5,6 @@
 #include "chromeos/components/proximity_auth/proximity_auth_system.h"
 
 #include "base/command_line.h"
-#include "base/test/simple_test_clock.h"
 #include "base/test/test_simple_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/components/proximity_auth/fake_lock_handler.h"
@@ -39,10 +38,6 @@
 const char kUser1[] = "user1";
 const char kUser2[] = "user2";
 
-const int64_t kLastPasswordEntryTimestampMs = 123456L;
-const int64_t kTimestampBeforeReauthMs = 123457L;
-const int64_t kTimestampAfterReauthMs = 123457890123L;
-
 void CompareRemoteDeviceRefLists(const RemoteDeviceRefList& list1,
                                  const RemoteDeviceRefList& list2) {
   ASSERT_EQ(list1.size(), list2.size());
@@ -93,12 +88,10 @@
   TestableProximityAuthSystem(ScreenlockType screenlock_type,
                               ProximityAuthClient* proximity_auth_client,
                               std::unique_ptr<UnlockManager> unlock_manager,
-                              base::Clock* clock,
                               ProximityAuthPrefManager* pref_manager)
       : ProximityAuthSystem(screenlock_type,
                             proximity_auth_client,
                             std::move(unlock_manager),
-                            clock,
                             pref_manager),
         life_cycle_(nullptr) {}
   ~TestableProximityAuthSystem() override {}
@@ -155,12 +148,8 @@
         new NiceMock<MockUnlockManager>());
     unlock_manager_ = unlock_manager.get();
 
-    clock_.SetNow(base::Time::FromJavaTime(kTimestampBeforeReauthMs));
-    ON_CALL(*pref_manager_, GetLastPasswordEntryTimestampMs())
-        .WillByDefault(Return(kLastPasswordEntryTimestampMs));
-
     proximity_auth_system_.reset(new TestableProximityAuthSystem(
-        type, &proximity_auth_client_, std::move(unlock_manager), &clock_,
+        type, &proximity_auth_client_, std::move(unlock_manager),
         pref_manager_.get()));
   }
 
@@ -189,7 +178,6 @@
   NiceMock<MockProximityAuthClient> proximity_auth_client_;
   std::unique_ptr<TestableProximityAuthSystem> proximity_auth_system_;
   MockUnlockManager* unlock_manager_;
-  base::SimpleTestClock clock_;
   std::unique_ptr<MockProximityAuthPrefManager> pref_manager_;
 
   RemoteDeviceRefList user1_remote_devices_;
@@ -427,15 +415,4 @@
       .Times(AtLeast(1));
 }
 
-TEST_F(ProximityAuthSystemTest, ForcePasswordReauth) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      proximity_auth::switches::kEnableForcePasswordReauth);
-  ON_CALL(*pref_manager_, GetLastPasswordEntryTimestampMs())
-      .WillByDefault(Return(kTimestampAfterReauthMs));
-  EXPECT_CALL(proximity_auth_client_,
-              UpdateScreenlockState(ScreenlockState::PASSWORD_REAUTH));
-  FocusUser(kUser1);
-  EXPECT_FALSE(life_cycle());
-}
-
 }  // namespace proximity_auth
diff --git a/chromeos/components/proximity_auth/switches.cc b/chromeos/components/proximity_auth/switches.cc
index e8d379b..681bcd5 100644
--- a/chromeos/components/proximity_auth/switches.cc
+++ b/chromeos/components/proximity_auth/switches.cc
@@ -7,10 +7,6 @@
 namespace proximity_auth {
 namespace switches {
 
-// Enables forcing the user to reauth with their password after X hours (e.g.
-// 20) without password entry.
-const char kEnableForcePasswordReauth[] = "force-password-reauth";
-
 // Force easy unlock app loading in test.
 // TODO(xiyuan): Remove this when app could be bundled with Chrome.
 const char kForceLoadEasyUnlockAppInTests[] =
diff --git a/chromeos/components/proximity_auth/switches.h b/chromeos/components/proximity_auth/switches.h
index f9f10cb4..7c68842 100644
--- a/chromeos/components/proximity_auth/switches.h
+++ b/chromeos/components/proximity_auth/switches.h
@@ -8,7 +8,6 @@
 namespace proximity_auth {
 namespace switches {
 
-extern const char kEnableForcePasswordReauth[];
 extern const char kForceLoadEasyUnlockAppInTests[];
 
 }  // namespace switches
diff --git a/chromeos/services/multidevice_setup/BUILD.gn b/chromeos/services/multidevice_setup/BUILD.gn
index 6c9a6a49..dd972157 100644
--- a/chromeos/services/multidevice_setup/BUILD.gn
+++ b/chromeos/services/multidevice_setup/BUILD.gn
@@ -14,6 +14,8 @@
     "account_status_change_delegate_notifier.h",
     "account_status_change_delegate_notifier_impl.cc",
     "account_status_change_delegate_notifier_impl.h",
+    "multidevice_setup_base.cc",
+    "multidevice_setup_base.h",
     "multidevice_setup_impl.cc",
     "multidevice_setup_impl.h",
     "multidevice_setup_service.cc",
diff --git a/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.cc b/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.cc
index 43be1ddc..ef67bdd 100644
--- a/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.cc
+++ b/chromeos/services/multidevice_setup/account_status_change_delegate_notifier_impl.cc
@@ -154,7 +154,7 @@
   if (!delegate()) {
     PA_LOG(INFO) << "AccountStatusChangeDelegateNotifierImpl::"
                  << "CheckForMultiDeviceEvents(): Tried to check for potential "
-                 << "events, but no delegatd was set.";
+                 << "events, but no delegate was set.";
     return;
   }
 
diff --git a/chromeos/services/multidevice_setup/multidevice_setup_base.cc b/chromeos/services/multidevice_setup/multidevice_setup_base.cc
new file mode 100644
index 0000000..8b42b0b
--- /dev/null
+++ b/chromeos/services/multidevice_setup/multidevice_setup_base.cc
@@ -0,0 +1,21 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/services/multidevice_setup/multidevice_setup_base.h"
+
+namespace chromeos {
+
+namespace multidevice_setup {
+
+MultiDeviceSetupBase::MultiDeviceSetupBase() = default;
+
+MultiDeviceSetupBase::~MultiDeviceSetupBase() = default;
+
+void MultiDeviceSetupBase::BindRequest(mojom::MultiDeviceSetupRequest request) {
+  bindings_.AddBinding(this, std::move(request));
+}
+
+}  // namespace multidevice_setup
+
+}  // namespace chromeos
diff --git a/chromeos/services/multidevice_setup/multidevice_setup_base.h b/chromeos/services/multidevice_setup/multidevice_setup_base.h
new file mode 100644
index 0000000..bae622a
--- /dev/null
+++ b/chromeos/services/multidevice_setup/multidevice_setup_base.h
@@ -0,0 +1,35 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_SERVICES_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_BASE_H_
+#define CHROMEOS_SERVICES_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_BASE_H_
+
+#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
+#include "mojo/public/cpp/bindings/binding_set.h"
+
+namespace chromeos {
+
+namespace multidevice_setup {
+
+// MultiDeviceSetup implementation which accepts requests to bind to it.
+class MultiDeviceSetupBase : public mojom::MultiDeviceSetup {
+ public:
+  ~MultiDeviceSetupBase() override;
+
+  void BindRequest(mojom::MultiDeviceSetupRequest request);
+
+ protected:
+  MultiDeviceSetupBase();
+
+ private:
+  mojo::BindingSet<mojom::MultiDeviceSetup> bindings_;
+
+  DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupBase);
+};
+
+}  // namespace multidevice_setup
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_SERVICES_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_BASE_H_
diff --git a/chromeos/services/multidevice_setup/multidevice_setup_impl.cc b/chromeos/services/multidevice_setup/multidevice_setup_impl.cc
index f67d56a..e04598e 100644
--- a/chromeos/services/multidevice_setup/multidevice_setup_impl.cc
+++ b/chromeos/services/multidevice_setup/multidevice_setup_impl.cc
@@ -4,20 +4,44 @@
 
 #include "chromeos/services/multidevice_setup/multidevice_setup_impl.h"
 
+#include "base/memory/ptr_util.h"
+#include "base/no_destructor.h"
 #include "chromeos/components/proximity_auth/logging/logging.h"
 
 namespace chromeos {
 
 namespace multidevice_setup {
 
+// static
+MultiDeviceSetupImpl::Factory* MultiDeviceSetupImpl::Factory::test_factory_ =
+    nullptr;
+
+// static
+MultiDeviceSetupImpl::Factory* MultiDeviceSetupImpl::Factory::Get() {
+  if (test_factory_)
+    return test_factory_;
+
+  static base::NoDestructor<Factory> factory;
+  return factory.get();
+}
+
+// static
+void MultiDeviceSetupImpl::Factory::SetFactoryForTesting(
+    Factory* test_factory) {
+  test_factory_ = test_factory;
+}
+
+MultiDeviceSetupImpl::Factory::~Factory() = default;
+
+std::unique_ptr<MultiDeviceSetupBase>
+MultiDeviceSetupImpl::Factory::BuildInstance() {
+  return base::WrapUnique(new MultiDeviceSetupImpl());
+}
+
 MultiDeviceSetupImpl::MultiDeviceSetupImpl() = default;
 
 MultiDeviceSetupImpl::~MultiDeviceSetupImpl() = default;
 
-void MultiDeviceSetupImpl::BindRequest(mojom::MultiDeviceSetupRequest request) {
-  bindings_.AddBinding(this, std::move(request));
-}
-
 void MultiDeviceSetupImpl::SetAccountStatusChangeDelegate(
     mojom::AccountStatusChangeDelegatePtr delegate,
     SetAccountStatusChangeDelegateCallback callback) {
diff --git a/chromeos/services/multidevice_setup/multidevice_setup_impl.h b/chromeos/services/multidevice_setup/multidevice_setup_impl.h
index 9521fd29..4a97631 100644
--- a/chromeos/services/multidevice_setup/multidevice_setup_impl.h
+++ b/chromeos/services/multidevice_setup/multidevice_setup_impl.h
@@ -7,6 +7,7 @@
 
 #include <memory>
 
+#include "chromeos/services/multidevice_setup/multidevice_setup_base.h"
 #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
@@ -17,14 +18,23 @@
 namespace multidevice_setup {
 
 // Concrete MultiDeviceSetup implementation.
-class MultiDeviceSetupImpl : public mojom::MultiDeviceSetup {
+class MultiDeviceSetupImpl : public MultiDeviceSetupBase {
  public:
-  MultiDeviceSetupImpl();
+  class Factory {
+   public:
+    static Factory* Get();
+    static void SetFactoryForTesting(Factory* test_factory);
+    virtual ~Factory();
+    virtual std::unique_ptr<MultiDeviceSetupBase> BuildInstance();
+
+   private:
+    static Factory* test_factory_;
+  };
+
   ~MultiDeviceSetupImpl() override;
 
-  // Binds a request to this implementation. Should be called each time that the
-  // service receives a request.
-  void BindRequest(mojom::MultiDeviceSetupRequest request);
+ private:
+  MultiDeviceSetupImpl();
 
   // mojom::MultiDeviceSetup:
   void SetAccountStatusChangeDelegate(
@@ -34,9 +44,7 @@
       mojom::EventTypeForDebugging type,
       TriggerEventForDebuggingCallback callback) override;
 
- private:
   mojom::AccountStatusChangeDelegatePtr delegate_;
-  mojo::BindingSet<mojom::MultiDeviceSetup> bindings_;
 
   DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupImpl);
 };
diff --git a/chromeos/services/multidevice_setup/multidevice_setup_service.cc b/chromeos/services/multidevice_setup/multidevice_setup_service.cc
index 7e4986b..8064e3b2 100644
--- a/chromeos/services/multidevice_setup/multidevice_setup_service.cc
+++ b/chromeos/services/multidevice_setup/multidevice_setup_service.cc
@@ -5,6 +5,7 @@
 #include "chromeos/services/multidevice_setup/multidevice_setup_service.h"
 
 #include "chromeos/components/proximity_auth/logging/logging.h"
+#include "chromeos/services/multidevice_setup/multidevice_setup_base.h"
 #include "chromeos/services/multidevice_setup/multidevice_setup_impl.h"
 
 namespace chromeos {
@@ -12,14 +13,16 @@
 namespace multidevice_setup {
 
 MultiDeviceSetupService::MultiDeviceSetupService()
-    : multidevice_setup_impl_(std::make_unique<MultiDeviceSetupImpl>()) {}
+    : multidevice_setup_(
+          MultiDeviceSetupImpl::Factory::Get()->BuildInstance()) {}
 
 MultiDeviceSetupService::~MultiDeviceSetupService() = default;
 
 void MultiDeviceSetupService::OnStart() {
   PA_LOG(INFO) << "MultiDeviceSetupService::OnStart()";
-  registry_.AddInterface(base::Bind(&MultiDeviceSetupService::BindRequest,
-                                    base::Unretained(this)));
+  registry_.AddInterface(
+      base::BindRepeating(&MultiDeviceSetupBase::BindRequest,
+                          base::Unretained(multidevice_setup_.get())));
 }
 
 void MultiDeviceSetupService::OnBindInterface(
@@ -31,11 +34,6 @@
   registry_.BindInterface(interface_name, std::move(interface_pipe));
 }
 
-void MultiDeviceSetupService::BindRequest(
-    mojom::MultiDeviceSetupRequest request) {
-  multidevice_setup_impl_->BindRequest(std::move(request));
-}
-
 }  // namespace multidevice_setup
 
 }  // namespace chromeos
diff --git a/chromeos/services/multidevice_setup/multidevice_setup_service.h b/chromeos/services/multidevice_setup/multidevice_setup_service.h
index 36a39a5cc..2dfd4c12 100644
--- a/chromeos/services/multidevice_setup/multidevice_setup_service.h
+++ b/chromeos/services/multidevice_setup/multidevice_setup_service.h
@@ -15,7 +15,7 @@
 
 namespace multidevice_setup {
 
-class MultiDeviceSetupImpl;
+class MultiDeviceSetupBase;
 
 // Service which provides an implementation for mojom::MultiDeviceSetup. This
 // service creates one implementation and shares it among all connection
@@ -32,9 +32,7 @@
                        const std::string& interface_name,
                        mojo::ScopedMessagePipeHandle interface_pipe) override;
 
-  void BindRequest(mojom::MultiDeviceSetupRequest request);
-
-  std::unique_ptr<MultiDeviceSetupImpl> multidevice_setup_impl_;
+  std::unique_ptr<MultiDeviceSetupBase> multidevice_setup_;
 
   service_manager::BinderRegistry registry_;
 
diff --git a/chromeos/services/secure_channel/authenticated_channel_impl.cc b/chromeos/services/secure_channel/authenticated_channel_impl.cc
index d19e18e..5382030 100644
--- a/chromeos/services/secure_channel/authenticated_channel_impl.cc
+++ b/chromeos/services/secure_channel/authenticated_channel_impl.cc
@@ -46,8 +46,7 @@
         connection_creation_details,
     std::unique_ptr<cryptauth::SecureChannel> secure_channel)
     : AuthenticatedChannel(),
-      connection_metadata_(connection_creation_details,
-                           mojom::ConnectionMetadata::kNoRssiAvailable),
+      connection_creation_details_(connection_creation_details),
       secure_channel_(std::move(secure_channel)) {
   // |secure_channel_| should be a valid and already authenticated.
   DCHECK(secure_channel_);
@@ -62,8 +61,10 @@
 }
 
 void AuthenticatedChannelImpl::GetConnectionMetadata(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback) {
-  std::move(callback).Run(connection_metadata_);
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) {
+  secure_channel_->GetConnectionRssi(
+      base::BindOnce(&AuthenticatedChannelImpl::OnRssiFetched,
+                     base::Unretained(this), std::move(callback)));
 }
 
 void AuthenticatedChannelImpl::PerformSendMessage(
@@ -134,6 +135,20 @@
   sequence_number_to_callback_map_.erase(sequence_number);
 }
 
+void AuthenticatedChannelImpl::OnRssiFetched(
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback,
+    base::Optional<int32_t> current_rssi) {
+  mojom::BluetoothConnectionMetadataPtr bluetooth_connection_metadata_ptr;
+  if (current_rssi) {
+    bluetooth_connection_metadata_ptr =
+        mojom::BluetoothConnectionMetadata::New(*current_rssi);
+  }
+
+  std::move(callback).Run(mojom::ConnectionMetadata::New(
+      connection_creation_details_,
+      std::move(bluetooth_connection_metadata_ptr)));
+}
+
 }  // namespace secure_channel
 
 }  // namespace chromeos
diff --git a/chromeos/services/secure_channel/authenticated_channel_impl.h b/chromeos/services/secure_channel/authenticated_channel_impl.h
index c1493f3c..599ea68 100644
--- a/chromeos/services/secure_channel/authenticated_channel_impl.h
+++ b/chromeos/services/secure_channel/authenticated_channel_impl.h
@@ -48,7 +48,7 @@
 
   // AuthenticatedChannel:
   void GetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback) override;
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) override;
   void PerformSendMessage(const std::string& feature,
                           const std::string& payload,
                           base::OnceClosure on_sent_callback) final;
@@ -65,7 +65,12 @@
   void OnMessageSent(cryptauth::SecureChannel* secure_channel,
                      int sequence_number) override;
 
-  mojom::ConnectionMetadata connection_metadata_;
+  void OnRssiFetched(
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback,
+      base::Optional<int32_t> current_rssi);
+
+  const std::vector<mojom::ConnectionCreationDetail>
+      connection_creation_details_;
   std::unique_ptr<cryptauth::SecureChannel> secure_channel_;
   std::unordered_map<int, base::OnceClosure> sequence_number_to_callback_map_;
 
diff --git a/chromeos/services/secure_channel/authenticated_channel_impl_unittest.cc b/chromeos/services/secure_channel/authenticated_channel_impl_unittest.cc
index fe7b885..cb75556 100644
--- a/chromeos/services/secure_channel/authenticated_channel_impl_unittest.cc
+++ b/chromeos/services/secure_channel/authenticated_channel_impl_unittest.cc
@@ -29,6 +29,8 @@
     mojom::ConnectionCreationDetail::
         REMOTE_DEVICE_USED_BACKGROUND_BLE_ADVERTISING};
 
+const int32_t kTestRssi = -24;
+
 class SecureChannelAuthenticatedChannelImplTest : public testing::Test {
  protected:
   SecureChannelAuthenticatedChannelImplTest()
@@ -41,6 +43,7 @@
         std::make_unique<cryptauth::FakeConnection>(test_device_));
     fake_secure_channel->ChangeStatus(
         cryptauth::SecureChannel::Status::AUTHENTICATED);
+    fake_secure_channel->set_rssi_to_return(kTestRssi);
     fake_secure_channel_ = fake_secure_channel.get();
 
     channel_ = AuthenticatedChannelImpl::Factory::Get()->BuildInstance(
@@ -100,7 +103,8 @@
         base::Unretained(this)));
   }
 
-  void OnGetConnectionMetadata(mojom::ConnectionMetadata connection_metadata) {
+  void OnGetConnectionMetadata(
+      mojom::ConnectionMetadataPtr connection_metadata) {
     connection_metadata_ = std::move(connection_metadata);
   }
 
@@ -114,7 +118,7 @@
 
   AuthenticatedChannel* channel() { return channel_.get(); }
 
-  base::Optional<mojom::ConnectionMetadata> connection_metadata_;
+  mojom::ConnectionMetadataPtr connection_metadata_;
 
  private:
   void OnMessageSent(int sequence_number) {
@@ -143,10 +147,8 @@
                 std::begin(kTestConnectionCreationDetails),
                 std::end(kTestConnectionCreationDetails)),
             connection_metadata_->creation_details);
-  // TODO(khorimoto): Update test to test RSSI rolling average when implemented.
-  // https://crbug.com/844759.
-  EXPECT_EQ(mojom::ConnectionMetadata::kNoRssiAvailable,
-            connection_metadata_->rssi_rolling_average);
+  EXPECT_EQ(kTestRssi,
+            connection_metadata_->bluetooth_connection_metadata->current_rssi);
 }
 
 TEST_F(SecureChannelAuthenticatedChannelImplTest, DisconnectRequestFromClient) {
diff --git a/chromeos/services/secure_channel/channel_impl.cc b/chromeos/services/secure_channel/channel_impl.cc
index 4eacde4..7f5405b8 100644
--- a/chromeos/services/secure_channel/channel_impl.cc
+++ b/chromeos/services/secure_channel/channel_impl.cc
@@ -55,8 +55,8 @@
 
 void ChannelImpl::OnConnectionMetadataFetchedFromDelegate(
     GetConnectionMetadataCallback callback,
-    mojom::ConnectionMetadata connection_metadata_from_delegate) {
-  std::move(callback).Run(connection_metadata_from_delegate.Clone());
+    mojom::ConnectionMetadataPtr connection_metadata_from_delegate) {
+  std::move(callback).Run(std::move(connection_metadata_from_delegate));
 }
 
 void ChannelImpl::OnBindingDisconnected() {
diff --git a/chromeos/services/secure_channel/channel_impl.h b/chromeos/services/secure_channel/channel_impl.h
index fdeeeaeb..59d37e9e 100644
--- a/chromeos/services/secure_channel/channel_impl.h
+++ b/chromeos/services/secure_channel/channel_impl.h
@@ -30,7 +30,7 @@
     virtual void OnSendMessageRequested(const std::string& message,
                                         base::OnceClosure on_sent_callback) = 0;
     virtual void GetConnectionMetadata(
-        base::OnceCallback<void(mojom::ConnectionMetadata)> callback) = 0;
+        base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) = 0;
     virtual void OnClientDisconnected() = 0;
   };
 
@@ -53,7 +53,7 @@
 
   void OnConnectionMetadataFetchedFromDelegate(
       GetConnectionMetadataCallback callback,
-      mojom::ConnectionMetadata connection_metadata_from_delegate);
+      mojom::ConnectionMetadataPtr connection_metadata_from_delegate);
 
   void OnBindingDisconnected();
 
diff --git a/chromeos/services/secure_channel/fake_channel.cc b/chromeos/services/secure_channel/fake_channel.cc
index 8735005..a1a9131d 100644
--- a/chromeos/services/secure_channel/fake_channel.cc
+++ b/chromeos/services/secure_channel/fake_channel.cc
@@ -34,7 +34,7 @@
 
 void FakeChannel::GetConnectionMetadata(
     GetConnectionMetadataCallback callback) {
-  std::move(callback).Run(connection_metadata_.Clone());
+  std::move(callback).Run(std::move(connection_metadata_for_next_call_));
 }
 
 }  // namespace secure_channel
diff --git a/chromeos/services/secure_channel/fake_channel.h b/chromeos/services/secure_channel/fake_channel.h
index 44ebc32..dab371f87 100644
--- a/chromeos/services/secure_channel/fake_channel.h
+++ b/chromeos/services/secure_channel/fake_channel.h
@@ -26,9 +26,10 @@
   mojom::ChannelPtr GenerateInterfacePtr();
   void DisconnectGeneratedPtr();
 
-  void set_connection_metadata(
-      const mojom::ConnectionMetadata& connection_metadata) {
-    connection_metadata_ = connection_metadata;
+  void set_connection_metadata_for_next_call(
+      mojom::ConnectionMetadataPtr connection_metadata_for_next_call) {
+    connection_metadata_for_next_call_ =
+        std::move(connection_metadata_for_next_call);
   }
 
   std::vector<std::pair<std::string, SendMessageCallback>>& sent_messages() {
@@ -44,7 +45,7 @@
   mojo::Binding<mojom::Channel> binding_;
 
   std::vector<std::pair<std::string, SendMessageCallback>> sent_messages_;
-  mojom::ConnectionMetadata connection_metadata_;
+  mojom::ConnectionMetadataPtr connection_metadata_for_next_call_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeChannel);
 };
diff --git a/chromeos/services/secure_channel/fake_single_client_message_proxy.cc b/chromeos/services/secure_channel/fake_single_client_message_proxy.cc
index bbcc16a..16abfed 100644
--- a/chromeos/services/secure_channel/fake_single_client_message_proxy.cc
+++ b/chromeos/services/secure_channel/fake_single_client_message_proxy.cc
@@ -49,8 +49,8 @@
 }
 
 void FakeSingleClientMessageProxyDelegate::GetConnectionMetadata(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback) {
-  return std::move(callback).Run(connection_metadata_);
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) {
+  return std::move(callback).Run(std::move(connection_metadata_for_next_call_));
 }
 
 void FakeSingleClientMessageProxyDelegate::OnClientDisconnected(
diff --git a/chromeos/services/secure_channel/fake_single_client_message_proxy.h b/chromeos/services/secure_channel/fake_single_client_message_proxy.h
index 6c867538..63508ea 100644
--- a/chromeos/services/secure_channel/fake_single_client_message_proxy.h
+++ b/chromeos/services/secure_channel/fake_single_client_message_proxy.h
@@ -70,9 +70,10 @@
     return send_message_requests_;
   }
 
-  void set_connection_metadata(
-      const mojom::ConnectionMetadata& connection_metadata) {
-    connection_metadata_ = connection_metadata;
+  void set_connection_metadata_for_next_call(
+      mojom::ConnectionMetadataPtr connection_metadata_for_next_call) {
+    connection_metadata_for_next_call_ =
+        std::move(connection_metadata_for_next_call);
   }
 
   void set_on_client_disconnected_closure(
@@ -90,12 +91,12 @@
                               const std::string& message_payload,
                               base::OnceClosure on_sent_callback) override;
   void GetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback) override;
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) override;
   void OnClientDisconnected(const base::UnguessableToken& proxy_id) override;
 
   std::vector<std::tuple<std::string, std::string, base::OnceClosure>>
       send_message_requests_;
-  mojom::ConnectionMetadata connection_metadata_;
+  mojom::ConnectionMetadataPtr connection_metadata_for_next_call_;
   base::OnceClosure on_client_disconnected_closure_;
   base::UnguessableToken disconnected_proxy_id_;
 
diff --git a/chromeos/services/secure_channel/multiplexed_channel_impl.cc b/chromeos/services/secure_channel/multiplexed_channel_impl.cc
index 84d0e29c02..ca17f859 100644
--- a/chromeos/services/secure_channel/multiplexed_channel_impl.cc
+++ b/chromeos/services/secure_channel/multiplexed_channel_impl.cc
@@ -118,7 +118,7 @@
 }
 
 void MultiplexedChannelImpl::GetConnectionMetadata(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback) {
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) {
   authenticated_channel_->GetConnectionMetadata(std::move(callback));
 }
 
diff --git a/chromeos/services/secure_channel/multiplexed_channel_impl.h b/chromeos/services/secure_channel/multiplexed_channel_impl.h
index a23d9412..8cad1c8 100644
--- a/chromeos/services/secure_channel/multiplexed_channel_impl.h
+++ b/chromeos/services/secure_channel/multiplexed_channel_impl.h
@@ -74,7 +74,7 @@
                               const std::string& message_payload,
                               base::OnceClosure on_sent_callback) override;
   void GetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback) override;
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) override;
   void OnClientDisconnected(const base::UnguessableToken& proxy_id) override;
 
   std::unique_ptr<AuthenticatedChannel> authenticated_channel_;
diff --git a/chromeos/services/secure_channel/multiplexed_channel_impl_unittest.cc b/chromeos/services/secure_channel/multiplexed_channel_impl_unittest.cc
index d51311b..7dfbd9f2 100644
--- a/chromeos/services/secure_channel/multiplexed_channel_impl_unittest.cc
+++ b/chromeos/services/secure_channel/multiplexed_channel_impl_unittest.cc
@@ -263,7 +263,8 @@
         base::Unretained(this)));
   }
 
-  void OnGetConnectionMetadata(mojom::ConnectionMetadata connection_metadata) {
+  void OnGetConnectionMetadata(
+      mojom::ConnectionMetadataPtr connection_metadata) {
     connection_metadata_ = std::move(connection_metadata);
   }
 
@@ -288,7 +289,7 @@
     return fake_authenticated_channel_;
   }
 
-  base::Optional<mojom::ConnectionMetadata> connection_metadata_;
+  mojom::ConnectionMetadataPtr connection_metadata_;
 
  private:
   void OnMessageSent(int message_counter) {
@@ -316,35 +317,40 @@
   CreateChannel();
   EXPECT_EQ(1u, id_to_active_proxy_map().size());
 
-  // Set connection metadata on |fake_authenticated_channel_|.
-  std::vector<mojom::ConnectionCreationDetail> details{
+  std::vector<mojom::ConnectionCreationDetail> creation_details{
       mojom::ConnectionCreationDetail::
           REMOTE_DEVICE_USED_BACKGROUND_BLE_ADVERTISING};
-  mojom::ConnectionMetadata connection_metadata(
-      details, mojom::ConnectionMetadata::kNoRssiAvailable);
-  fake_authenticated_channel()->set_connection_metadata(connection_metadata);
+
+  // Set connection metadata on |fake_authenticated_channel_|.
+  mojom::ConnectionMetadataPtr metadata = mojom::ConnectionMetadata::New(
+      creation_details,
+      mojom::BluetoothConnectionMetadata::New(-24 /* current_rssi */));
+  fake_authenticated_channel()->set_connection_metadata_for_next_call(
+      std::move(metadata));
 
   // Retrieving the metadata through the proxy should cause
   // |fake_authenticated_channel_|'s metadata to be passed through
   // |multiplexed_channel_|.
   CallGetConnectionMetadataFromDelegate(
       id_to_active_proxy_map().begin()->second);
-  EXPECT_EQ(details, connection_metadata_->creation_details);
-  EXPECT_EQ(mojom::ConnectionMetadata::kNoRssiAvailable,
-            connection_metadata_->rssi_rolling_average);
+  EXPECT_EQ(creation_details, connection_metadata_->creation_details);
+  EXPECT_EQ(-24,
+            connection_metadata_->bluetooth_connection_metadata->current_rssi);
 
   // Now, change the values and set them on |fake_authenticated_channel_|.
-  connection_metadata.creation_details =
-      std::vector<mojom::ConnectionCreationDetail>();
-  connection_metadata.rssi_rolling_average = -5.5f;
-  fake_authenticated_channel()->set_connection_metadata(connection_metadata);
+  creation_details.clear();
+  metadata = mojom::ConnectionMetadata::New(
+      creation_details,
+      mojom::BluetoothConnectionMetadata::New(-8 /* current_rssi */));
+  fake_authenticated_channel()->set_connection_metadata_for_next_call(
+      std::move(metadata));
 
   // The new updates should be available.
   CallGetConnectionMetadataFromDelegate(
       id_to_active_proxy_map().begin()->second);
-  EXPECT_EQ(std::vector<mojom::ConnectionCreationDetail>(),
-            connection_metadata_->creation_details);
-  EXPECT_EQ(-5.5f, connection_metadata_->rssi_rolling_average);
+  EXPECT_EQ(creation_details, connection_metadata_->creation_details);
+  EXPECT_EQ(-8,
+            connection_metadata_->bluetooth_connection_metadata->current_rssi);
 
   DisconnectClientAndVerifyState(id_to_active_proxy_map().begin()->second,
                                  true /* expected_to_be_last_client */);
diff --git a/chromeos/services/secure_channel/public/cpp/client/client_channel.cc b/chromeos/services/secure_channel/public/cpp/client/client_channel.cc
index 720981b..2f962f3 100644
--- a/chromeos/services/secure_channel/public/cpp/client/client_channel.cc
+++ b/chromeos/services/secure_channel/public/cpp/client/client_channel.cc
@@ -18,7 +18,7 @@
 ClientChannel::~ClientChannel() = default;
 
 bool ClientChannel::GetConnectionMetadata(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback) {
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) {
   if (is_disconnected_)
     return false;
 
diff --git a/chromeos/services/secure_channel/public/cpp/client/client_channel.h b/chromeos/services/secure_channel/public/cpp/client/client_channel.h
index 657c3b8..7e1d5184 100644
--- a/chromeos/services/secure_channel/public/cpp/client/client_channel.h
+++ b/chromeos/services/secure_channel/public/cpp/client/client_channel.h
@@ -34,7 +34,7 @@
   virtual ~ClientChannel();
 
   bool GetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback);
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback);
 
   // Sends a message with the specified |payload|. Once the message has been
   // sent, |on_sent_callback| will be invoked. Returns whether this
@@ -58,7 +58,7 @@
                                   base::OnceClosure on_sent_callback) = 0;
 
   virtual void PerformGetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback) = 0;
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) = 0;
 
   void NotifyDisconnected();
   void NotifyMessageReceived(const std::string& payload);
diff --git a/chromeos/services/secure_channel/public/cpp/client/client_channel_impl.cc b/chromeos/services/secure_channel/public/cpp/client/client_channel_impl.cc
index f0d0189..2c957be2 100644
--- a/chromeos/services/secure_channel/public/cpp/client/client_channel_impl.cc
+++ b/chromeos/services/secure_channel/public/cpp/client/client_channel_impl.cc
@@ -51,7 +51,7 @@
 ClientChannelImpl::~ClientChannelImpl() = default;
 
 void ClientChannelImpl::PerformGetConnectionMetadata(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback) {
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) {
   channel_->GetConnectionMetadata(
       base::BindOnce(&ClientChannelImpl::OnGetConnectionMetadata,
                      weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
@@ -62,9 +62,9 @@
 }
 
 void ClientChannelImpl::OnGetConnectionMetadata(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback,
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback,
     mojom::ConnectionMetadataPtr connection_metadata_ptr) {
-  std::move(callback).Run(*connection_metadata_ptr);
+  std::move(callback).Run(std::move(connection_metadata_ptr));
 }
 
 void ClientChannelImpl::PerformSendMessage(const std::string& payload,
diff --git a/chromeos/services/secure_channel/public/cpp/client/client_channel_impl.h b/chromeos/services/secure_channel/public/cpp/client/client_channel_impl.h
index 06649ff..081af27 100644
--- a/chromeos/services/secure_channel/public/cpp/client/client_channel_impl.h
+++ b/chromeos/services/secure_channel/public/cpp/client/client_channel_impl.h
@@ -41,7 +41,7 @@
 
   // ClientChannel:
   void PerformGetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback) override;
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) override;
   void PerformSendMessage(const std::string& payload,
                           base::OnceClosure on_sent_callback) override;
 
@@ -49,7 +49,7 @@
   void OnMessageReceived(const std::string& message) override;
 
   void OnGetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback,
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback,
       mojom::ConnectionMetadataPtr connection_metadata_ptr);
 
   void OnChannelDisconnected(uint32_t disconnection_reason,
diff --git a/chromeos/services/secure_channel/public/cpp/client/client_channel_impl_unittest.cc b/chromeos/services/secure_channel/public/cpp/client/client_channel_impl_unittest.cc
index 55be28e..a55358e 100644
--- a/chromeos/services/secure_channel/public/cpp/client/client_channel_impl_unittest.cc
+++ b/chromeos/services/secure_channel/public/cpp/client/client_channel_impl_unittest.cc
@@ -52,8 +52,8 @@
     client_channel_->RemoveObserver(fake_observer_.get());
   }
 
-  mojom::ConnectionMetadata CallGetConnectionMetadata() {
-    connection_metadata_.reset();
+  mojom::ConnectionMetadataPtr CallGetConnectionMetadata() {
+    EXPECT_FALSE(connection_metadata_);
 
     base::RunLoop run_loop;
     EXPECT_TRUE(client_channel_->GetConnectionMetadata(base::BindOnce(
@@ -61,7 +61,7 @@
         base::Unretained(this), run_loop.QuitClosure())));
     run_loop.Run();
 
-    return *connection_metadata_;
+    return std::move(connection_metadata_);
   }
 
   int CallSendMessage(const std::string& message) {
@@ -103,16 +103,17 @@
   mojom::MessageReceiverPtr message_receiver_ptr_;
   std::unique_ptr<FakeClientChannelObserver> fake_observer_;
 
-  base::Optional<mojom::ConnectionMetadata> connection_metadata_;
+  mojom::ConnectionMetadataPtr connection_metadata_;
   base::OnceClosure message_sent_callback_;
   std::set<int> message_counters_received_;
 
   std::unique_ptr<ClientChannel> client_channel_;
 
  private:
-  void OnGetConnectionMetadata(base::OnceClosure callback,
-                               mojom::ConnectionMetadata connection_metadata) {
-    connection_metadata_ = connection_metadata;
+  void OnGetConnectionMetadata(
+      base::OnceClosure callback,
+      mojom::ConnectionMetadataPtr connection_metadata) {
+    connection_metadata_ = std::move(connection_metadata);
     std::move(callback).Run();
   }
 
@@ -125,19 +126,18 @@
 };
 
 TEST_F(SecureChannelClientChannelImplTest, TestGetConnectionMetadata) {
-  std::vector<mojom::ConnectionCreationDetail> details{
+  std::vector<mojom::ConnectionCreationDetail> creation_details{
       mojom::ConnectionCreationDetail::
           REMOTE_DEVICE_USED_BACKGROUND_BLE_ADVERTISING};
-  mojom::ConnectionMetadata expected_connection_metadata(
-      details, mojom::ConnectionMetadata::kNoRssiAvailable);
 
-  fake_channel_->set_connection_metadata(expected_connection_metadata);
+  mojom::ConnectionMetadataPtr metadata = mojom::ConnectionMetadata::New(
+      creation_details,
+      mojom::BluetoothConnectionMetadata::New(-24 /* current_rssi */));
+  fake_channel_->set_connection_metadata_for_next_call(std::move(metadata));
 
-  mojom::ConnectionMetadata connection_metadata = CallGetConnectionMetadata();
-
-  EXPECT_EQ(details, connection_metadata.creation_details);
-  EXPECT_EQ(mojom::ConnectionMetadata::kNoRssiAvailable,
-            connection_metadata.rssi_rolling_average);
+  metadata = CallGetConnectionMetadata();
+  EXPECT_EQ(creation_details, metadata->creation_details);
+  EXPECT_EQ(-24, metadata->bluetooth_connection_metadata->current_rssi);
 }
 
 TEST_F(SecureChannelClientChannelImplTest, TestSendMessage) {
diff --git a/chromeos/services/secure_channel/public/cpp/client/fake_client_channel.cc b/chromeos/services/secure_channel/public/cpp/client/fake_client_channel.cc
index 1b742e2..9f6ce7c91 100644
--- a/chromeos/services/secure_channel/public/cpp/client/fake_client_channel.cc
+++ b/chromeos/services/secure_channel/public/cpp/client/fake_client_channel.cc
@@ -15,8 +15,8 @@
 FakeClientChannel::~FakeClientChannel() = default;
 
 void FakeClientChannel::PerformGetConnectionMetadata(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback) {
-  std::move(callback).Run(connection_metadata_);
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) {
+  std::move(callback).Run(std::move(connection_metadata_for_next_call_));
 }
 
 void FakeClientChannel::PerformSendMessage(const std::string& payload,
diff --git a/chromeos/services/secure_channel/public/cpp/client/fake_client_channel.h b/chromeos/services/secure_channel/public/cpp/client/fake_client_channel.h
index aa6a633..cf564ca 100644
--- a/chromeos/services/secure_channel/public/cpp/client/fake_client_channel.h
+++ b/chromeos/services/secure_channel/public/cpp/client/fake_client_channel.h
@@ -22,8 +22,10 @@
   using ClientChannel::NotifyDisconnected;
   using ClientChannel::NotifyMessageReceived;
 
-  void set_connection_metadata(mojom::ConnectionMetadata connection_metadata) {
-    connection_metadata_ = connection_metadata;
+  void set_connection_metadata_for_next_call(
+      mojom::ConnectionMetadataPtr connection_metadata_for_next_call) {
+    connection_metadata_for_next_call_ =
+        std::move(connection_metadata_for_next_call);
   }
 
   std::vector<std::pair<std::string, base::OnceClosure>>& sent_messages() {
@@ -35,11 +37,11 @@
 
   // ClientChannel:
   void PerformGetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback) override;
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) override;
   void PerformSendMessage(const std::string& payload,
                           base::OnceClosure on_sent_callback) override;
 
-  mojom::ConnectionMetadata connection_metadata_;
+  mojom::ConnectionMetadataPtr connection_metadata_for_next_call_;
   std::vector<std::pair<std::string, base::OnceClosure>> sent_messages_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeClientChannel);
diff --git a/chromeos/services/secure_channel/public/cpp/shared/authenticated_channel.h b/chromeos/services/secure_channel/public/cpp/shared/authenticated_channel.h
index b113775..293e2a2 100644
--- a/chromeos/services/secure_channel/public/cpp/shared/authenticated_channel.h
+++ b/chromeos/services/secure_channel/public/cpp/shared/authenticated_channel.h
@@ -32,7 +32,7 @@
   virtual ~AuthenticatedChannel();
 
   virtual void GetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback) = 0;
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) = 0;
 
   // Sends a message with the specified |feature| and |payload|. Once the
   // message has been sent, |on_sent_callback| will be invoked. Returns whether
diff --git a/chromeos/services/secure_channel/public/cpp/shared/fake_authenticated_channel.cc b/chromeos/services/secure_channel/public/cpp/shared/fake_authenticated_channel.cc
index 3a65946..5c914c1 100644
--- a/chromeos/services/secure_channel/public/cpp/shared/fake_authenticated_channel.cc
+++ b/chromeos/services/secure_channel/public/cpp/shared/fake_authenticated_channel.cc
@@ -13,8 +13,8 @@
 FakeAuthenticatedChannel::~FakeAuthenticatedChannel() = default;
 
 void FakeAuthenticatedChannel::GetConnectionMetadata(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback) {
-  return std::move(callback).Run(connection_metadata_);
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) {
+  return std::move(callback).Run(std::move(connection_metadata_for_next_call_));
 }
 
 void FakeAuthenticatedChannel::PerformSendMessage(
diff --git a/chromeos/services/secure_channel/public/cpp/shared/fake_authenticated_channel.h b/chromeos/services/secure_channel/public/cpp/shared/fake_authenticated_channel.h
index 74003865..0deee146 100644
--- a/chromeos/services/secure_channel/public/cpp/shared/fake_authenticated_channel.h
+++ b/chromeos/services/secure_channel/public/cpp/shared/fake_authenticated_channel.h
@@ -34,14 +34,15 @@
     return has_disconnection_been_requested_;
   }
 
-  void set_connection_metadata(
-      const mojom::ConnectionMetadata& connection_metadata) {
-    connection_metadata_ = connection_metadata;
+  void set_connection_metadata_for_next_call(
+      mojom::ConnectionMetadataPtr connection_metadata_for_next_call) {
+    connection_metadata_for_next_call_ =
+        std::move(connection_metadata_for_next_call);
   }
 
   // AuthenticatedChannel:
   void GetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback) override;
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) override;
   void PerformSendMessage(const std::string& feature,
                           const std::string& payload,
                           base::OnceClosure on_sent_callback) override;
@@ -52,7 +53,7 @@
   using AuthenticatedChannel::NotifyMessageReceived;
 
  private:
-  mojom::ConnectionMetadata connection_metadata_;
+  mojom::ConnectionMetadataPtr connection_metadata_for_next_call_;
   bool has_disconnection_been_requested_ = false;
   std::vector<std::tuple<std::string, std::string, base::OnceClosure>>
       sent_messages_;
diff --git a/chromeos/services/secure_channel/public/mojom/secure_channel.mojom b/chromeos/services/secure_channel/public/mojom/secure_channel.mojom
index 51af1f4..7778b01 100644
--- a/chromeos/services/secure_channel/public/mojom/secure_channel.mojom
+++ b/chromeos/services/secure_channel/public/mojom/secure_channel.mojom
@@ -65,19 +65,19 @@
   HIGH
 };
 
-struct ConnectionMetadata {
-  const double kNoRssiAvailable = 1000;
+struct BluetoothConnectionMetadata {
+  // RSSI at the exact time that this metadata was requested. Note that RSSI
+  // may change drastically in a short period; this is only a snapshot.
+  int32 current_rssi;
+};
 
+struct ConnectionMetadata {
   // Details which describe how the connection was created. If no
   // ConnectionCreationDetails apply to this connection, the array is empty.
   array<ConnectionCreationDetail> creation_details;
 
-  // Rolling average of the RSSI of the channel. This value is only valid if
-  // the corresponding connection is in BLE central role.
-  //
-  // If no RSSI is available (e.g., if this is not a BLE central connection),
-  // this value is set to kNoRssiAvailable.
-  double rssi_rolling_average;
+  // Only available for connections over Bluetooth.
+  BluetoothConnectionMetadata? bluetooth_connection_metadata;
 };
 
 interface Channel {
diff --git a/chromeos/services/secure_channel/single_client_message_proxy.cc b/chromeos/services/secure_channel/single_client_message_proxy.cc
index d6ebef11d..9718d18 100644
--- a/chromeos/services/secure_channel/single_client_message_proxy.cc
+++ b/chromeos/services/secure_channel/single_client_message_proxy.cc
@@ -26,7 +26,7 @@
 }
 
 void SingleClientMessageProxy::GetConnectionMetadataFromDelegate(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback) {
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) {
   delegate_->GetConnectionMetadata(std::move(callback));
 }
 
diff --git a/chromeos/services/secure_channel/single_client_message_proxy.h b/chromeos/services/secure_channel/single_client_message_proxy.h
index 18c76c9..1271dc9 100644
--- a/chromeos/services/secure_channel/single_client_message_proxy.h
+++ b/chromeos/services/secure_channel/single_client_message_proxy.h
@@ -29,7 +29,7 @@
                                         const std::string& message_payload,
                                         base::OnceClosure on_sent_callback) = 0;
     virtual void GetConnectionMetadata(
-        base::OnceCallback<void(mojom::ConnectionMetadata)> callback) = 0;
+        base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) = 0;
     virtual void OnClientDisconnected(
         const base::UnguessableToken& proxy_id) = 0;
   };
@@ -55,7 +55,7 @@
                                   base::OnceClosure on_sent_callback);
   void NotifyClientDisconnected();
   void GetConnectionMetadataFromDelegate(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback);
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback);
 
  private:
   Delegate* delegate_;
diff --git a/chromeos/services/secure_channel/single_client_message_proxy_impl.cc b/chromeos/services/secure_channel/single_client_message_proxy_impl.cc
index af99de8..c981d33 100644
--- a/chromeos/services/secure_channel/single_client_message_proxy_impl.cc
+++ b/chromeos/services/secure_channel/single_client_message_proxy_impl.cc
@@ -80,7 +80,7 @@
 }
 
 void SingleClientMessageProxyImpl::GetConnectionMetadata(
-    base::OnceCallback<void(mojom::ConnectionMetadata)> callback) {
+    base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) {
   GetConnectionMetadataFromDelegate(std::move(callback));
 }
 
diff --git a/chromeos/services/secure_channel/single_client_message_proxy_impl.h b/chromeos/services/secure_channel/single_client_message_proxy_impl.h
index ac41753..5b4dca3 100644
--- a/chromeos/services/secure_channel/single_client_message_proxy_impl.h
+++ b/chromeos/services/secure_channel/single_client_message_proxy_impl.h
@@ -58,7 +58,7 @@
   void OnSendMessageRequested(const std::string& message,
                               base::OnceClosure on_sent_callback) override;
   void GetConnectionMetadata(
-      base::OnceCallback<void(mojom::ConnectionMetadata)> callback) override;
+      base::OnceCallback<void(mojom::ConnectionMetadataPtr)> callback) override;
   void OnClientDisconnected() override;
 
   void FlushForTesting();
diff --git a/chromeos/services/secure_channel/single_client_message_proxy_impl_unittest.cc b/chromeos/services/secure_channel/single_client_message_proxy_impl_unittest.cc
index 1e85952..dd5e46898 100644
--- a/chromeos/services/secure_channel/single_client_message_proxy_impl_unittest.cc
+++ b/chromeos/services/secure_channel/single_client_message_proxy_impl_unittest.cc
@@ -155,13 +155,16 @@
            fake_proxy_delegate_->disconnected_proxy_id();
   }
 
-  const mojom::ConnectionMetadata& GetConnectionMetadataFromChannel() {
+  mojom::ConnectionMetadataPtr GetConnectionMetadataFromChannel() {
+    EXPECT_FALSE(last_metadata_from_channel_);
+
     mojom::ChannelPtr& channel = *fake_client_connection_parameters_->channel();
     channel->GetConnectionMetadata(base::BindOnce(
         &SecureChannelSingleClientMessageProxyImplTest::OnConnectionMetadata,
         base::Unretained(this)));
     channel.FlushForTesting();
-    return last_metadata_from_channel_;
+
+    return std::move(last_metadata_from_channel_);
   }
 
  private:
@@ -171,7 +174,7 @@
 
   void OnConnectionMetadata(
       mojom::ConnectionMetadataPtr connection_metadata_ptr) {
-    last_metadata_from_channel_ = *connection_metadata_ptr;
+    last_metadata_from_channel_ = std::move(connection_metadata_ptr);
   }
 
   const base::test::ScopedTaskEnvironment scoped_task_environment_;
@@ -183,7 +186,7 @@
   int next_message_counter_ = 0;
   std::unordered_set<int> sent_message_counters_;
 
-  mojom::ConnectionMetadata last_metadata_from_channel_;
+  mojom::ConnectionMetadataPtr last_metadata_from_channel_;
 
   std::unique_ptr<SingleClientMessageProxy> proxy_;
 
@@ -236,16 +239,19 @@
 }
 
 TEST_F(SecureChannelSingleClientMessageProxyImplTest, ConnectionMetadata) {
-  mojom::ConnectionMetadata metadata;
-  fake_proxy_delegate()->set_connection_metadata(metadata);
-  EXPECT_TRUE(metadata.Equals(GetConnectionMetadataFromChannel()));
-
-  metadata.rssi_rolling_average = -5.5f;
-  metadata.creation_details.push_back(
+  std::vector<mojom::ConnectionCreationDetail> creation_details{
       mojom::ConnectionCreationDetail::
-          REMOTE_DEVICE_USED_BACKGROUND_BLE_ADVERTISING);
-  fake_proxy_delegate()->set_connection_metadata(metadata);
-  EXPECT_TRUE(metadata.Equals(GetConnectionMetadataFromChannel()));
+          REMOTE_DEVICE_USED_BACKGROUND_BLE_ADVERTISING};
+
+  mojom::ConnectionMetadataPtr metadata = mojom::ConnectionMetadata::New(
+      creation_details,
+      mojom::BluetoothConnectionMetadata::New(-24 /* current_rssi */));
+  fake_proxy_delegate()->set_connection_metadata_for_next_call(
+      std::move(metadata));
+
+  metadata = GetConnectionMetadataFromChannel();
+  EXPECT_EQ(creation_details, metadata->creation_details);
+  EXPECT_EQ(-24, metadata->bluetooth_connection_metadata->current_rssi);
 }
 
 }  // namespace secure_channel
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn
index fc9f9bf..0d138bf 100644
--- a/components/autofill/core/browser/BUILD.gn
+++ b/components/autofill/core/browser/BUILD.gn
@@ -230,6 +230,7 @@
     "//components/autofill/core/browser/proto",
     "//components/autofill/core/common",
     "//components/resources",
+    "//components/security_state/core",
     "//skia",
     "//third_party/libaddressinput",
   ]
@@ -242,7 +243,6 @@
     "//components/os_crypt",
     "//components/pref_registry",
     "//components/prefs",
-    "//components/security_state/core",
     "//components/signin/core/browser:signin_metrics",
     "//components/strings",
     "//components/sync",
diff --git a/components/autofill/core/browser/autofill_client.h b/components/autofill/core/browser/autofill_client.h
index 522952e..61d4332 100644
--- a/components/autofill/core/browser/autofill_client.h
+++ b/components/autofill/core/browser/autofill_client.h
@@ -15,6 +15,7 @@
 #include "base/strings/string16.h"
 #include "base/values.h"
 #include "components/autofill/core/browser/risk_data_loader.h"
+#include "components/security_state/core/security_state.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "ui/base/window_open_disposition.h"
 #include "url/gurl.h"
@@ -117,6 +118,10 @@
   // Gets an AddressNormalizer instance (can be null).
   virtual AddressNormalizer* GetAddressNormalizer() = 0;
 
+  // Gets the security level used for recording histograms for the current
+  // context if possible, SECURITY_LEVEL_COUNT otherwise.
+  virtual security_state::SecurityLevel GetSecurityLevelForUmaHistograms() = 0;
+
   // Causes the Autofill settings UI to be shown.
   virtual void ShowAutofillSettings() = 0;
 
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index be6431b..872c35b 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -506,8 +506,9 @@
 
   if (!user_did_type_) {
     user_did_type_ = true;
-    AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::USER_DID_TYPE,
-                                            autofill_field->Type().group());
+    AutofillMetrics::LogUserHappinessMetric(
+        AutofillMetrics::USER_DID_TYPE, autofill_field->Type().group(),
+        client_->GetSecurityLevelForUmaHistograms());
   }
 
   if (autofill_field->is_autofilled) {
@@ -515,13 +516,15 @@
     autofill_field->set_previously_autofilled(true);
     AutofillMetrics::LogUserHappinessMetric(
         AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD,
-        autofill_field->Type().group());
+        autofill_field->Type().group(),
+        client_->GetSecurityLevelForUmaHistograms());
 
     if (!user_did_edit_autofilled_field_) {
       user_did_edit_autofilled_field_ = true;
       AutofillMetrics::LogUserHappinessMetric(
           AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD_ONCE,
-          autofill_field->Type().group());
+          autofill_field->Type().group(),
+          client_->GetSecurityLevelForUmaHistograms());
     }
   }
 
@@ -787,12 +790,14 @@
   if (FindCachedForm(form, &form_structure)) {
     form_types = form_structure->GetFormTypes();
   }
-  AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::USER_DID_AUTOFILL,
-                                          form_types);
+  AutofillMetrics::LogUserHappinessMetric(
+      AutofillMetrics::USER_DID_AUTOFILL, form_types,
+      client_->GetSecurityLevelForUmaHistograms());
   if (!user_did_autofill_) {
     user_did_autofill_ = true;
     AutofillMetrics::LogUserHappinessMetric(
-        AutofillMetrics::USER_DID_AUTOFILL_ONCE, form_types);
+        AutofillMetrics::USER_DID_AUTOFILL_ONCE, form_types,
+        client_->GetSecurityLevelForUmaHistograms());
   }
 
   UpdateInitialInteractionTimestamp(timestamp);
@@ -809,14 +814,16 @@
     return;
 
   if (has_autofill_suggestions) {
-    AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::SUGGESTIONS_SHOWN,
-                                            autofill_field->Type().group());
+    AutofillMetrics::LogUserHappinessMetric(
+        AutofillMetrics::SUGGESTIONS_SHOWN, autofill_field->Type().group(),
+        client_->GetSecurityLevelForUmaHistograms());
 
     if (!did_show_suggestions_) {
       did_show_suggestions_ = true;
       AutofillMetrics::LogUserHappinessMetric(
           AutofillMetrics::SUGGESTIONS_SHOWN_ONCE,
-          autofill_field->Type().group());
+          autofill_field->Type().group(),
+          client_->GetSecurityLevelForUmaHistograms());
     }
 
     if (autofill_field->Type().group() == CREDIT_CARD) {
@@ -1626,8 +1633,9 @@
   }
 
   if (!queryable_forms.empty() || !non_queryable_forms.empty()) {
-    AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED,
-                                            form_types);
+    AutofillMetrics::LogUserHappinessMetric(
+        AutofillMetrics::FORMS_LOADED, form_types,
+        client_->GetSecurityLevelForUmaHistograms());
 
 #if defined(OS_IOS)
     // Log this from same location as AutofillMetrics::FORMS_LOADED to ensure
@@ -1929,7 +1937,8 @@
     // fields with non-empty values, such as select-one fields.
     field_data->is_autofilled = true;
     AutofillMetrics::LogUserHappinessMetric(
-        AutofillMetrics::FIELD_WAS_AUTOFILLED, autofill_field->Type().group());
+        AutofillMetrics::FIELD_WAS_AUTOFILLED, autofill_field->Type().group(),
+        client_->GetSecurityLevelForUmaHistograms());
 
     if (should_notify) {
       client_->DidFillOrPreviewField(
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc
index a0af20f..6923a50 100644
--- a/components/autofill/core/browser/autofill_metrics.cc
+++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -89,6 +89,31 @@
   return static_cast<uint64_t>(field_signature) % 1021;
 }
 
+std::string GetHistogramSuffixForSecurityLevel(
+    security_state::SecurityLevel level) {
+  switch (level) {
+    case security_state::EV_SECURE:
+      return "EV_SECURE";
+    case security_state::SECURE:
+      return "SECURE";
+    case security_state::NONE:
+      return "NONE";
+    case security_state::HTTP_SHOW_WARNING:
+      return "HTTP_SHOW_WARNING";
+    case security_state::SECURE_WITH_POLICY_INSTALLED_CERT:
+      return "SECURE_WITH_POLICY_INSTALLED_CERT";
+    case security_state::DANGEROUS:
+      return "DANGEROUS";
+    default:
+      return "OTHER";
+  }
+}
+
+std::string GetSecurityLevelHistogramName(const std::string prefix,
+                                          security_state::SecurityLevel level) {
+  return prefix + "." + GetHistogramSuffixForSecurityLevel(level);
+}
+
 }  // namespace
 
 // First, translates |field_type| to the corresponding logical |group| from
@@ -691,7 +716,8 @@
     SaveCardPromptMetric metric,
     bool is_uploading,
     bool is_reshow,
-    int previous_save_credit_card_prompt_user_decision) {
+    int previous_save_credit_card_prompt_user_decision,
+    security_state::SecurityLevel security_level) {
   DCHECK_LT(metric, NUM_SAVE_CARD_PROMPT_METRICS);
   std::string destination = is_uploading ? ".Upload" : ".Local";
   std::string show = is_reshow ? ".Reshows" : ".FirstShow";
@@ -703,6 +729,31 @@
           PreviousSaveCreditCardPromptUserDecisionToString(
               previous_save_credit_card_prompt_user_decision),
       metric, NUM_SAVE_CARD_PROMPT_METRICS);
+
+  LogSaveCardPromptMetricBySecurityLevel(metric, is_uploading, security_level);
+}
+
+// static
+void AutofillMetrics::LogSaveCardPromptMetricBySecurityLevel(
+    SaveCardPromptMetric metric,
+    bool is_uploading,
+    security_state::SecurityLevel security_level) {
+  // Getting a SECURITY_LEVEL_COUNT security level means that it was not
+  // possible to get the real security level. Don't log.
+  if (security_level == security_state::SecurityLevel::SECURITY_LEVEL_COUNT) {
+    return;
+  }
+
+  std::string histogram_name = "Security.SaveCardPromptMetric.";
+  if (is_uploading) {
+    histogram_name += "Upload";
+  } else {
+    histogram_name += "Local";
+  }
+
+  base::UmaHistogramEnumeration(
+      GetSecurityLevelHistogramName(histogram_name, security_level), metric,
+      NUM_SAVE_CARD_PROMPT_METRICS);
 }
 
 // static
@@ -907,38 +958,83 @@
 }
 
 // static
-void AutofillMetrics::LogUserHappinessMetric(UserHappinessMetric metric,
-                                             FieldTypeGroup field_type_group) {
+void AutofillMetrics::LogUserHappinessMetric(
+    UserHappinessMetric metric,
+    FieldTypeGroup field_type_group,
+    security_state::SecurityLevel security_level) {
   LogUserHappinessMetric(
-      metric, {FormTypes::FieldTypeGroupToFormType(field_type_group)});
+      metric, {FormTypes::FieldTypeGroupToFormType(field_type_group)},
+      security_level);
 }
 
 // static
 void AutofillMetrics::LogUserHappinessMetric(
     UserHappinessMetric metric,
-    const std::set<FormType>& form_types) {
+    const std::set<FormType>& form_types,
+    security_state::SecurityLevel security_level) {
   DCHECK_LT(metric, NUM_USER_HAPPINESS_METRICS);
   UMA_HISTOGRAM_ENUMERATION("Autofill.UserHappiness", metric,
                             NUM_USER_HAPPINESS_METRICS);
   if (base::ContainsKey(form_types, CREDIT_CARD_FORM)) {
     UMA_HISTOGRAM_ENUMERATION("Autofill.UserHappiness.CreditCard", metric,
                               NUM_USER_HAPPINESS_METRICS);
+    LogUserHappinessBySecurityLevel(metric, CREDIT_CARD_FORM, security_level);
   }
   if (base::ContainsKey(form_types, ADDRESS_FORM)) {
     UMA_HISTOGRAM_ENUMERATION("Autofill.UserHappiness.Address", metric,
                               NUM_USER_HAPPINESS_METRICS);
+    LogUserHappinessBySecurityLevel(metric, ADDRESS_FORM, security_level);
   }
   if (base::ContainsKey(form_types, PASSWORD_FORM)) {
     UMA_HISTOGRAM_ENUMERATION("Autofill.UserHappiness.Password", metric,
                               NUM_USER_HAPPINESS_METRICS);
+    LogUserHappinessBySecurityLevel(metric, PASSWORD_FORM, security_level);
   }
   if (base::ContainsKey(form_types, UNKNOWN_FORM_TYPE)) {
     UMA_HISTOGRAM_ENUMERATION("Autofill.UserHappiness.Unknown", metric,
                               NUM_USER_HAPPINESS_METRICS);
+    LogUserHappinessBySecurityLevel(metric, UNKNOWN_FORM_TYPE, security_level);
   }
 }
 
 // static
+void AutofillMetrics::LogUserHappinessBySecurityLevel(
+    UserHappinessMetric metric,
+    FormType form_type,
+    security_state::SecurityLevel security_level) {
+  if (security_level == security_state::SecurityLevel::SECURITY_LEVEL_COUNT) {
+    return;
+  }
+
+  std::string histogram_name = "Security.UserHappiness.";
+  switch (form_type) {
+    case CREDIT_CARD_FORM:
+      histogram_name += "CreditCard";
+      break;
+
+    case ADDRESS_FORM:
+      histogram_name += "Address";
+      break;
+
+    case PASSWORD_FORM:
+      histogram_name += "Password";
+      break;
+
+    case UNKNOWN_FORM_TYPE:
+      histogram_name += "Unknown";
+      break;
+
+    default:
+      NOTREACHED();
+      return;
+  }
+
+  base::UmaHistogramEnumeration(
+      GetSecurityLevelHistogramName(histogram_name, security_level), metric,
+      NUM_USER_HAPPINESS_METRICS);
+}
+
+// static
 void AutofillMetrics::LogFormFillDurationFromLoadWithAutofill(
     const base::TimeDelta& duration) {
   LogFormFillDuration("Autofill.FillDuration.FromLoad.WithAutofill", duration);
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h
index 807e81d1..4a9ac36 100644
--- a/components/autofill/core/browser/autofill_metrics.h
+++ b/components/autofill/core/browser/autofill_metrics.h
@@ -21,6 +21,7 @@
 #include "components/autofill/core/common/autofill_pref_names.h"
 #include "components/autofill/core/common/form_field_data.h"
 #include "components/autofill/core/common/signatures_util.h"
+#include "components/security_state/core/security_state.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
 
 namespace autofill {
@@ -768,7 +769,12 @@
       SaveCardPromptMetric metric,
       bool is_uploading,
       bool is_reshow,
-      int previous_save_credit_card_prompt_user_decision);
+      int previous_save_credit_card_prompt_user_decision,
+      security_state::SecurityLevel security_level);
+  static void LogSaveCardPromptMetricBySecurityLevel(
+      SaveCardPromptMetric metric,
+      bool is_uploading,
+      security_state::SecurityLevel security_level);
   static void LogScanCreditCardPromptMetric(ScanCreditCardPromptMetric metric);
 
   // Should be called when credit card scan is finished. |duration| should be
@@ -801,11 +807,20 @@
 
   static void LogServerQueryMetric(ServerQueryMetric metric);
 
-  static void LogUserHappinessMetric(UserHappinessMetric metric,
-                                     FieldTypeGroup field_type_group);
+  static void LogUserHappinessMetric(
+      UserHappinessMetric metric,
+      FieldTypeGroup field_type_group,
+      security_state::SecurityLevel security_level);
 
-  static void LogUserHappinessMetric(UserHappinessMetric metric,
-                                     const std::set<FormType>& form_types);
+  static void LogUserHappinessMetric(
+      UserHappinessMetric metric,
+      const std::set<FormType>& form_types,
+      security_state::SecurityLevel security_level);
+
+  static void LogUserHappinessBySecurityLevel(
+      UserHappinessMetric metric,
+      FormType form_type,
+      security_state::SecurityLevel security_level);
 
   // Logs |event| to the unmask prompt events histogram.
   static void LogUnmaskPromptEvent(UnmaskPromptEvent event);
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc
index 1e2e4d3..2f234d8 100644
--- a/components/autofill/core/browser/autofill_metrics_unittest.cc
+++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -5837,8 +5837,9 @@
 TEST_F(AutofillMetricsTest, LogUserHappinessMetric_PasswordForm) {
   {
     base::HistogramTester histogram_tester;
-    AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::USER_DID_AUTOFILL,
-                                            PASSWORD_FIELD);
+    AutofillMetrics::LogUserHappinessMetric(
+        AutofillMetrics::USER_DID_AUTOFILL, PASSWORD_FIELD,
+        security_state::SecurityLevel::SECURITY_LEVEL_COUNT);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness",
                                        AutofillMetrics::USER_DID_AUTOFILL, 1);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness.Password",
@@ -5850,8 +5851,9 @@
 
   {
     base::HistogramTester histogram_tester;
-    AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::USER_DID_AUTOFILL,
-                                            USERNAME_FIELD);
+    AutofillMetrics::LogUserHappinessMetric(
+        AutofillMetrics::USER_DID_AUTOFILL, USERNAME_FIELD,
+        security_state::SecurityLevel::SECURITY_LEVEL_COUNT);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness",
                                        AutofillMetrics::USER_DID_AUTOFILL, 1);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness.Password",
@@ -5865,8 +5867,9 @@
 TEST_F(AutofillMetricsTest, LogUserHappinessMetric_UnknownForm) {
   {
     base::HistogramTester histogram_tester;
-    AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::USER_DID_AUTOFILL,
-                                            NO_GROUP);
+    AutofillMetrics::LogUserHappinessMetric(
+        AutofillMetrics::USER_DID_AUTOFILL, NO_GROUP,
+        security_state::SecurityLevel::SECURITY_LEVEL_COUNT);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness",
                                        AutofillMetrics::USER_DID_AUTOFILL, 1);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness.Unknown",
@@ -5878,8 +5881,9 @@
 
   {
     base::HistogramTester histogram_tester;
-    AutofillMetrics::LogUserHappinessMetric(AutofillMetrics::USER_DID_AUTOFILL,
-                                            TRANSACTION);
+    AutofillMetrics::LogUserHappinessMetric(
+        AutofillMetrics::USER_DID_AUTOFILL, TRANSACTION,
+        security_state::SecurityLevel::SECURITY_LEVEL_COUNT);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness",
                                        AutofillMetrics::USER_DID_AUTOFILL, 1);
     histogram_tester.ExpectBucketCount("Autofill.UserHappiness.Unknown",
@@ -7330,4 +7334,190 @@
   histogram_tester.ExpectTotalCount(
       "Autofill.SaveCardWithFirstAndLastNameComplete.Local", 2);
 }
+
+// Tests that the LogUserHappinessBySecurityLevel are recorded correctly.
+TEST_F(AutofillMetricsTest, LogUserHappinessBySecurityLevel) {
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogUserHappinessBySecurityLevel(
+        AutofillMetrics::USER_DID_AUTOFILL, CREDIT_CARD_FORM,
+        security_state::SecurityLevel::SECURE);
+    histogram_tester.ExpectBucketCount(
+        "Security.UserHappiness.CreditCard.SECURE",
+        AutofillMetrics::USER_DID_AUTOFILL, 1);
+  }
+
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogUserHappinessBySecurityLevel(
+        AutofillMetrics::SUGGESTIONS_SHOWN, ADDRESS_FORM,
+        security_state::SecurityLevel::DANGEROUS);
+    histogram_tester.ExpectBucketCount(
+        "Security.UserHappiness.Address.DANGEROUS",
+        AutofillMetrics::SUGGESTIONS_SHOWN, 1);
+  }
+
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogUserHappinessBySecurityLevel(
+        AutofillMetrics::FIELD_WAS_AUTOFILLED, PASSWORD_FORM,
+        security_state::SecurityLevel::HTTP_SHOW_WARNING);
+    histogram_tester.ExpectBucketCount(
+        "Security.UserHappiness.Password.HTTP_SHOW_WARNING",
+        AutofillMetrics::FIELD_WAS_AUTOFILLED, 1);
+  }
+
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogUserHappinessBySecurityLevel(
+        AutofillMetrics::USER_DID_AUTOFILL_ONCE, UNKNOWN_FORM_TYPE,
+        security_state::SecurityLevel::EV_SECURE);
+    histogram_tester.ExpectBucketCount(
+        "Security.UserHappiness.Unknown.EV_SECURE",
+        AutofillMetrics::USER_DID_AUTOFILL_ONCE, 1);
+  }
+
+  {
+    // No metric should be recorded if the security level is
+    // SECURITY_LEVEL_COUNT.
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogUserHappinessBySecurityLevel(
+        AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_SOME,
+        CREDIT_CARD_FORM, security_state::SecurityLevel::SECURITY_LEVEL_COUNT);
+    histogram_tester.ExpectTotalCount("Security.UserHappiness.CreditCard.OTHER",
+                                      0);
+  }
+}
+
+// Verify that we correctly log LogUserHappinessBySecurityLevel dealing form the
+// form event metrics.
+TEST_F(AutofillMetricsTest, LogUserHappinessBySecurityLevel_FromFormEvents) {
+  // Load a fillable form.
+  FormData form;
+  form.name = ASCIIToUTF16("TestForm");
+  form.origin = GURL("http://example.com/form.html");
+  form.action = GURL("http://example.com/submit.html");
+  form.main_frame_origin = url::Origin::Create(autofill_client_.form_origin());
+
+  FormFieldData field;
+  test::CreateTestFormField("Name", "name", "", "text", &field);
+  form.fields.push_back(field);
+  test::CreateTestFormField("Email", "email", "", "text", &field);
+  form.fields.push_back(field);
+  test::CreateTestFormField("Phone", "phone", "", "text", &field);
+  form.fields.push_back(field);
+
+  std::vector<FormData> forms(1, form);
+
+  // Simulate seeing the form.
+  {
+    base::HistogramTester histogram_tester;
+    autofill_client_.set_security_level(
+        security_state::SecurityLevel::DANGEROUS);
+    autofill_manager_->OnFormsSeen(forms, TimeTicks());
+    histogram_tester.ExpectBucketCount(
+        "Security.UserHappiness.Address.DANGEROUS",
+        AutofillMetrics::FORMS_LOADED, 1);
+  }
+
+  // Simulate suggestions shown twice with separate popups.
+  {
+    base::HistogramTester histogram_tester;
+    autofill_client_.set_security_level(
+        security_state::SecurityLevel::HTTP_SHOW_WARNING);
+    autofill_manager_->DidShowSuggestions(true, form, field);
+    autofill_manager_->DidShowSuggestions(true, form, field);
+    histogram_tester.ExpectBucketCount(
+        "Security.UserHappiness.Address.HTTP_SHOW_WARNING",
+        AutofillMetrics::SUGGESTIONS_SHOWN, 2);
+    histogram_tester.ExpectBucketCount(
+        "Security.UserHappiness.Address.HTTP_SHOW_WARNING",
+        AutofillMetrics::SUGGESTIONS_SHOWN_ONCE, 1);
+  }
+}
+
+// Tests that the LogSaveCardPromptMetricBySecurityLevel are recorded correctly.
+TEST_F(AutofillMetricsTest, LogSaveCardPromptMetricBySecurityLevel) {
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogSaveCardPromptMetricBySecurityLevel(
+        AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, /*is_uploading=*/true,
+        security_state::SecurityLevel::SECURE);
+    histogram_tester.ExpectBucketCount(
+        "Security.SaveCardPromptMetric.Upload.SECURE",
+        AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, 1);
+  }
+
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogSaveCardPromptMetricBySecurityLevel(
+        AutofillMetrics::SAVE_CARD_PROMPT_END_DENIED, /*is_uploading=*/false,
+        security_state::SecurityLevel::DANGEROUS);
+    histogram_tester.ExpectBucketCount(
+        "Security.SaveCardPromptMetric.Local.DANGEROUS",
+        AutofillMetrics::SAVE_CARD_PROMPT_END_DENIED, 1);
+  }
+
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogSaveCardPromptMetricBySecurityLevel(
+        AutofillMetrics::SAVE_CARD_PROMPT_END_ACCEPTED, /*is_uploading=*/true,
+        security_state::SecurityLevel::HTTP_SHOW_WARNING);
+    histogram_tester.ExpectBucketCount(
+        "Security.SaveCardPromptMetric.Upload.HTTP_SHOW_WARNING",
+        AutofillMetrics::SAVE_CARD_PROMPT_END_ACCEPTED, 1);
+  }
+
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogSaveCardPromptMetricBySecurityLevel(
+        AutofillMetrics::SAVE_CARD_PROMPT_END_NAVIGATION_SHOWING,
+        /*is_uploading=*/false, security_state::SecurityLevel::EV_SECURE);
+    histogram_tester.ExpectBucketCount(
+        "Security.SaveCardPromptMetric.Local.EV_SECURE",
+        AutofillMetrics::SAVE_CARD_PROMPT_END_NAVIGATION_SHOWING, 1);
+  }
+
+  {
+    // No metric should be recorded if the security level is
+    // SECURITY_LEVEL_COUNT.
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogSaveCardPromptMetricBySecurityLevel(
+        AutofillMetrics::SAVE_CARD_PROMPT_CVC_FIX_FLOW_SHOWN,
+        /*is_uploading=*/true,
+        security_state::SecurityLevel::SECURITY_LEVEL_COUNT);
+    histogram_tester.ExpectTotalCount(
+        "Security.SaveCardPromptMetric.Upload.OTHER", 0);
+  }
+}
+
+// Verify that we correctly log LogSaveCardPromptMetricBySecurityLevel from the
+// save card prompt metrics.
+TEST_F(AutofillMetricsTest,
+       LogSaveCardPromptMetricBySecurityLevel_FromSaveCardPromptMetric) {
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogSaveCardPromptMetric(
+        AutofillMetrics::SAVE_CARD_PROMPT_END_NAVIGATION_SHOWING,
+        /*is_uploading=*/true, /*is_reshow=*/false,
+        /*previous_save_credit_card_prompt_user_decision=*/1,
+        security_state::SecurityLevel::EV_SECURE);
+    histogram_tester.ExpectBucketCount(
+        "Security.SaveCardPromptMetric.Upload.EV_SECURE",
+        AutofillMetrics::SAVE_CARD_PROMPT_END_NAVIGATION_SHOWING, 1);
+  }
+
+  {
+    base::HistogramTester histogram_tester;
+    AutofillMetrics::LogSaveCardPromptMetric(
+        AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, /*is_uploading=*/false,
+        /*is_reshow=*/true,
+        /*previous_save_credit_card_prompt_user_decision=*/0,
+        security_state::SecurityLevel::SECURE);
+    histogram_tester.ExpectBucketCount(
+        "Security.SaveCardPromptMetric.Local.SECURE",
+        AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, 1);
+  }
+}
+
 }  // namespace autofill
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc
index 98add90..1310a3c 100644
--- a/components/autofill/core/browser/form_structure.cc
+++ b/components/autofill/core/browser/form_structure.cc
@@ -42,6 +42,7 @@
 #include "components/autofill/core/common/form_field_data.h"
 #include "components/autofill/core/common/form_field_data_predictions.h"
 #include "components/autofill/core/common/signatures_util.h"
+#include "components/security_state/core/security_state.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
 #include "url/origin.h"
 
@@ -791,7 +792,8 @@
     auto* const field = this->field(i);
     if (IsUPIVirtualPaymentAddress(field->value)) {
       AutofillMetrics::LogUserHappinessMetric(
-          AutofillMetrics::USER_DID_ENTER_UPI_VPA, field->Type().group());
+          AutofillMetrics::USER_DID_ENTER_UPI_VPA, field->Type().group(),
+          security_state::SecurityLevel::SECURITY_LEVEL_COUNT);
     }
 
     form_interactions_ukm_logger->LogFieldFillStatus(*this, *field,
diff --git a/components/autofill/core/browser/test_autofill_client.cc b/components/autofill/core/browser/test_autofill_client.cc
index 451be764..032fe09 100644
--- a/components/autofill/core/browser/test_autofill_client.cc
+++ b/components/autofill/core/browser/test_autofill_client.cc
@@ -56,6 +56,11 @@
   return nullptr;
 }
 
+security_state::SecurityLevel
+TestAutofillClient::GetSecurityLevelForUmaHistograms() {
+  return security_level_;
+}
+
 void TestAutofillClient::ShowAutofillSettings() {
 }
 
diff --git a/components/autofill/core/browser/test_autofill_client.h b/components/autofill/core/browser/test_autofill_client.h
index 52e1561..d1aa37f 100644
--- a/components/autofill/core/browser/test_autofill_client.h
+++ b/components/autofill/core/browser/test_autofill_client.h
@@ -35,6 +35,7 @@
   ukm::UkmRecorder* GetUkmRecorder() override;
   ukm::SourceId GetUkmSourceId() override;
   AddressNormalizer* GetAddressNormalizer() override;
+  security_state::SecurityLevel GetSecurityLevelForUmaHistograms() override;
   void ShowAutofillSettings() override;
   void ShowUnmaskPrompt(const CreditCard& card,
                         UnmaskCardReason reason,
@@ -92,6 +93,10 @@
     test_sync_service_ = test_sync_service;
   }
 
+  void set_security_level(security_state::SecurityLevel security_level) {
+    security_level_ = security_level;
+  }
+
   GURL form_origin() { return form_origin_; }
 
   static void UpdateSourceURL(ukm::UkmRecorder* ukm_recorder,
@@ -107,6 +112,9 @@
   GURL form_origin_;
   ukm::SourceId source_id_ = -1;
 
+  security_state::SecurityLevel security_level_ =
+      security_state::SecurityLevel::NONE;
+
   DISALLOW_COPY_AND_ASSIGN(TestAutofillClient);
 };
 
diff --git a/components/autofill/ios/browser/autofill_agent_unittests.mm b/components/autofill/ios/browser/autofill_agent_unittests.mm
index d97434e..9257c9a2 100644
--- a/components/autofill/ios/browser/autofill_agent_unittests.mm
+++ b/components/autofill/ios/browser/autofill_agent_unittests.mm
@@ -58,12 +58,7 @@
 // Tests that form's name and fields' identifiers, values, and whether they are
 // autofilled are sent to the JS. Fields with empty values and those that are
 // not autofilled are skipped.
-#if TARGET_OS_SIMULATOR
-#define MAYBE_OnFormDataFilledTest OnFormDataFilledTest
-#else
-#define MAYBE_OnFormDataFilledTest DISABLED_OnFormDataFilledTest
-#endif
-TEST_F(AutofillAgentTests, MAYBE_OnFormDataFilledTest) {
+TEST_F(AutofillAgentTests, OnFormDataFilledTest) {
   autofill::FormData form;
   form.origin = GURL("https://myform.com");
   form.action = GURL("https://myform.com/submit");
@@ -98,8 +93,10 @@
   // Fields are in alphabetical order.
   [[mock_js_injection_receiver_ expect]
       executeJavaScript:
-          @"__gCrWeb.autofill.fillForm({\"fields\":{\"name\":\"name_value\","
-          @"\"number\":\"number_value\"},\"formName\":\"CC form\"}, \"\");"
+          @"__gCrWeb.autofill.fillForm({\"fields\":{\"name\":{\"section\":\"\","
+          @"\"value\":\"name_value\"},"
+          @"\"number\":{\"section\":\"\",\"value\":\"number_value\"}},"
+          @"\"formName\":\"CC form\"}, \"\");"
       completionHandler:[OCMArg any]];
   [autofill_agent_ onFormDataFilled:form];
   test_web_state_.WasShown();
@@ -109,14 +106,7 @@
 
 // Tests that in the case of conflict in fields' identifiers, the last seen
 // value of a given field is used.
-#if TARGET_OS_SIMULATOR
-#define MAYBE_OnFormDataFilledWithNameCollisionTest \
-  OnFormDataFilledWithNameCollisionTest
-#else
-#define MAYBE_OnFormDataFilledWithNameCollisionTest \
-  DISABLED_OnFormDataFilledWithNameCollisionTest
-#endif
-TEST_F(AutofillAgentTests, MAYBE_OnFormDataFilledWithNameCollisionTest) {
+TEST_F(AutofillAgentTests, OnFormDataFilledWithNameCollisionTest) {
   autofill::FormData form;
   form.origin = GURL("https://myform.com");
   form.action = GURL("https://myform.com/submit");
@@ -144,8 +134,10 @@
   // Fields are in alphabetical order.
   [[mock_js_injection_receiver_ expect]
       executeJavaScript:
-          @"__gCrWeb.autofill.fillForm({\"fields\":{\"field1\":\"value "
-          @"2\",\"region\":\"California\"},\"formName\":\"\"}, \"\");"
+          @"__gCrWeb.autofill.fillForm({\"fields\":{\"field1\":{\"section\":"
+          @"\"\",\"value\":\"value "
+          @"2\"},\"region\":{\"section\":\"\",\"value\":\"California\"}},"
+          @"\"formName\":\"\"}, \"\");"
       completionHandler:[OCMArg any]];
   [autofill_agent_ onFormDataFilled:form];
   test_web_state_.WasShown();
diff --git a/components/browser_sync/profile_sync_service.cc b/components/browser_sync/profile_sync_service.cc
index c9637fe..6f5401f 100644
--- a/components/browser_sync/profile_sync_service.cc
+++ b/components/browser_sync/profile_sync_service.cc
@@ -232,6 +232,8 @@
 
   startup_controller_ = std::make_unique<syncer::StartupController>(
       &sync_prefs_,
+      base::BindRepeating(&ProfileSyncService::GetPreferredDataTypes,
+                          base::Unretained(this)),
       base::BindRepeating(&ProfileSyncService::CanSyncStart,
                           base::Unretained(this)),
       base::BindRepeating(&ProfileSyncService::StartUpSlowEngineComponents,
@@ -338,7 +340,6 @@
   memory_pressure_listener_ = std::make_unique<base::MemoryPressureListener>(
       base::BindRepeating(&ProfileSyncService::OnMemoryPressure,
                           sync_enabled_weak_factory_.GetWeakPtr()));
-  startup_controller_->Reset(GetRegisteredDataTypes());
 
   // Auto-start means the first time the profile starts up, sync should start up
   // immediately.
@@ -693,7 +694,7 @@
 
   sync_enabled_weak_factory_.InvalidateWeakPtrs();
 
-  startup_controller_->Reset(GetRegisteredDataTypes());
+  startup_controller_->Reset();
 
   // If the sync DB is getting destroyed, the local DeviceInfo is no longer
   // valid and should be cleared from the cache.
@@ -1189,7 +1190,19 @@
 
 std::string ProfileSyncService::GetEngineInitializationStateString() const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return startup_controller_->GetEngineInitializationStateString();
+  switch (startup_controller_->GetState()) {
+    case syncer::StartupController::State::NOT_STARTED:
+      DCHECK(!engine_);
+      return "Not started";
+    case syncer::StartupController::State::STARTING_DEFERRED:
+      DCHECK(!engine_);
+      return "Deferred";
+    case syncer::StartupController::State::STARTED:
+      DCHECK(engine_);
+      return "Started";
+  }
+  NOTREACHED();
+  return std::string();
 }
 
 bool ProfileSyncService::IsSetupInProgress() const {
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index 2ef82a1e..81827e571 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -719,6 +719,7 @@
     "//third_party/android_support_test_runner:runner_java",
     "//third_party/hamcrest:hamcrest_core_java",
   ]
+  deps += android_extra_test_deps
   additional_apks = [ "//net/android:net_test_support_apk" ]
 
   data_deps = [
@@ -778,6 +779,7 @@
     "//base:base_java_test_support",
     "//third_party/android_support_test_runner:runner_java",
   ]
+  deps += android_extra_test_deps
 
   proguard_enabled = true
 
@@ -827,6 +829,7 @@
   deps = [
     ":cronet_smoketests_missing_native_library_java",
   ]
+  deps += android_extra_test_deps
 
   proguard_enabled = true
 
@@ -863,6 +866,7 @@
     ":cronet_test_apk_java",
     "//base:base_java",
   ]
+  deps += android_extra_test_deps
 
   proguard_enabled = true
   proguard_configs = [
diff --git a/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.cc b/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.cc
index f0d611a..1ac0cb8d 100644
--- a/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.cc
+++ b/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/callback_helpers.h"
 #include "base/location.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/stl_util.h"
@@ -863,6 +864,34 @@
                           : bluetooth_device_->GetAddress();
 }
 
+void BluetoothLowEnergyWeaveClientConnection::GetConnectionRssi(
+    base::OnceCallback<void(base::Optional<int32_t>)> callback) {
+  device::BluetoothDevice* device = GetBluetoothDevice();
+
+  if (!device || !device->IsConnected()) {
+    std::move(callback).Run(base::nullopt);
+    return;
+  }
+
+  // device::BluetoothDevice has not converted to using a base::OnceCallback
+  // instead of a base::Callback, so use a wrapper for now.
+  auto callback_holder = base::AdaptCallbackForRepeating(std::move(callback));
+  device->GetConnectionInfo(
+      base::Bind(&BluetoothLowEnergyWeaveClientConnection::OnConnectionInfo,
+                 weak_ptr_factory_.GetWeakPtr(), callback_holder));
+}
+
+void BluetoothLowEnergyWeaveClientConnection::OnConnectionInfo(
+    base::RepeatingCallback<void(base::Optional<int32_t>)> rssi_callback,
+    const device::BluetoothDevice::ConnectionInfo& connection_info) {
+  if (connection_info.rssi == device::BluetoothDevice::kUnknownPower) {
+    std::move(rssi_callback).Run(base::nullopt);
+    return;
+  }
+
+  std::move(rssi_callback).Run(connection_info.rssi);
+}
+
 device::BluetoothDevice*
 BluetoothLowEnergyWeaveClientConnection::GetBluetoothDevice() {
   return bluetooth_device_;
diff --git a/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.h b/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.h
index 54d3bf9..01124aa 100644
--- a/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.h
+++ b/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.h
@@ -15,6 +15,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/optional.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "components/cryptauth/ble/bluetooth_low_energy_characteristics_finder.h"
@@ -103,6 +104,8 @@
   void Connect() override;
   void Disconnect() override;
   std::string GetDeviceAddress() override;
+  void GetConnectionRssi(
+      base::OnceCallback<void(base::Optional<int32_t>)> callback) override;
 
  protected:
   enum BleWeaveConnectionResult {
@@ -298,6 +301,10 @@
   void SetSubStatus(SubStatus status);
   void OnTimeoutForSubStatus(SubStatus status);
 
+  void OnConnectionInfo(
+      base::RepeatingCallback<void(base::Optional<int32_t>)> rssi_callback,
+      const device::BluetoothDevice::ConnectionInfo& connection_info);
+
   // These functions are used to set up the connection so that it is ready to
   // send/receive data.
   void SetConnectionLatency();
diff --git a/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection_unittest.cc b/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection_unittest.cc
index 441fe6a..61aecf7 100644
--- a/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection_unittest.cc
+++ b/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection_unittest.cc
@@ -366,6 +366,11 @@
         .WillByDefault(Return(mock_bluetooth_device_.get()));
     ON_CALL(*mock_bluetooth_device_, GetGattService(kServiceID))
         .WillByDefault(Return(service_.get()));
+    ON_CALL(*mock_bluetooth_device_, IsConnected()).WillByDefault(Return(true));
+    ON_CALL(*mock_bluetooth_device_, GetConnectionInfo(_))
+        .WillByDefault(
+            Invoke(this, &CryptAuthBluetoothLowEnergyWeaveClientConnectionTest::
+                             MockGetConnectionInfo));
     ON_CALL(*service_, GetCharacteristic(kRXCharacteristicID))
         .WillByDefault(Return(rx_characteristic_.get()));
     ON_CALL(*service_, GetCharacteristic(kTXCharacteristicID))
@@ -628,6 +633,18 @@
                              GATT_SERVICE_OPERATION_RESULT_GATT_ERROR_UNKNOWN;
   }
 
+  base::Optional<int32_t> GetRssi(
+      TestBluetoothLowEnergyWeaveClientConnection* connection) {
+    connection->GetConnectionRssi(base::BindOnce(
+        &CryptAuthBluetoothLowEnergyWeaveClientConnectionTest::OnConnectionRssi,
+        base::Unretained(this)));
+
+    base::Optional<int32_t> rssi = rssi_;
+    rssi_.reset();
+
+    return rssi;
+  }
+
  protected:
   const RemoteDeviceRef remote_device_;
   const device::BluetoothUUID service_uuid_;
@@ -645,6 +662,7 @@
   std::unique_ptr<device::MockBluetoothGattCharacteristic> rx_characteristic_;
   std::vector<uint8_t> last_value_written_on_tx_characteristic_;
   base::MessageLoop message_loop_;
+  int32_t rssi_for_channel_ = device::BluetoothDevice::kUnknownPower;
   bool last_wire_message_success_;
   bool has_verified_connection_result_;
   NiceMock<MockBluetoothLowEnergyWeavePacketGenerator>* generator_;
@@ -676,6 +694,16 @@
   base::HistogramTester histogram_tester_;
 
  private:
+  void MockGetConnectionInfo(
+      const device::BluetoothDevice::ConnectionInfoCallback& callback) {
+    callback.Run(device::BluetoothDevice::ConnectionInfo(
+        rssi_for_channel_, 0 /* transmit_power */, 0 /* max_transmit_power */));
+  }
+
+  void OnConnectionRssi(base::Optional<int32_t> rssi) { rssi_ = rssi; }
+
+  base::Optional<int32_t> rssi_;
+
   DISALLOW_COPY_AND_ASSIGN(
       CryptAuthBluetoothLowEnergyWeaveClientConnectionTest);
 };
@@ -1553,6 +1581,22 @@
           BLE_WEAVE_CONNECTION_RESULT_TIMEOUT_WAITING_FOR_MESSAGE_TO_SEND);
 }
 
+TEST_F(CryptAuthBluetoothLowEnergyWeaveClientConnectionTest, GetRssi) {
+  std::unique_ptr<TestBluetoothLowEnergyWeaveClientConnection> connection(
+      CreateConnection(true /* should_set_low_connection_latency */));
+
+  EXPECT_FALSE(GetRssi(connection.get()));
+
+  rssi_for_channel_ = -50;
+  EXPECT_EQ(-50, GetRssi(connection.get()));
+
+  rssi_for_channel_ = -40;
+  EXPECT_EQ(-40, GetRssi(connection.get()));
+
+  rssi_for_channel_ = -30;
+  EXPECT_EQ(-30, GetRssi(connection.get()));
+}
+
 }  // namespace weave
 
 }  // namespace cryptauth
diff --git a/components/cryptauth/connection.cc b/components/cryptauth/connection.cc
index b16adc99..8d8beff 100644
--- a/components/cryptauth/connection.cc
+++ b/components/cryptauth/connection.cc
@@ -7,6 +7,7 @@
 #include <sstream>
 #include <utility>
 
+#include "base/callback.h"
 #include "base/logging.h"
 #include "chromeos/components/proximity_auth/logging/logging.h"
 #include "components/cryptauth/connection_observer.h"
@@ -50,6 +51,11 @@
   observers_.RemoveObserver(observer);
 }
 
+void Connection::GetConnectionRssi(
+    base::OnceCallback<void(base::Optional<int32_t>)> callback) {
+  std::move(callback).Run(base::nullopt);
+}
+
 void Connection::SetStatus(Status status) {
   if (status_ == status)
     return;
diff --git a/components/cryptauth/connection.h b/components/cryptauth/connection.h
index b325db9..6783768 100644
--- a/components/cryptauth/connection.h
+++ b/components/cryptauth/connection.h
@@ -8,9 +8,11 @@
 #include <memory>
 #include <ostream>
 
+#include "base/callback_forward.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/observer_list.h"
+#include "base/optional.h"
 #include "components/cryptauth/remote_device_ref.h"
 
 namespace cryptauth {
@@ -48,6 +50,11 @@
 
   RemoteDeviceRef remote_device() const { return remote_device_; }
 
+  // Returns the RSSI of the connection; if no derived class overrides this
+  // function, base::nullopt is returned.
+  virtual void GetConnectionRssi(
+      base::OnceCallback<void(base::Optional<int32_t>)> callback);
+
   // Abstract methods that subclasses should implement:
 
   // Attempts to connect to the remote device if not already connected.
diff --git a/components/cryptauth/connection_unittest.cc b/components/cryptauth/connection_unittest.cc
index 92ba0fe..07a6db9a 100644
--- a/components/cryptauth/connection_unittest.cc
+++ b/components/cryptauth/connection_unittest.cc
@@ -4,8 +4,11 @@
 
 #include "components/cryptauth/connection.h"
 
+#include "base/bind.h"
+#include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
+#include "base/optional.h"
 #include "components/cryptauth/connection_observer.h"
 #include "components/cryptauth/remote_device_ref.h"
 #include "components/cryptauth/remote_device_test_util.h"
@@ -81,7 +84,7 @@
 class TestWireMessage : public WireMessage {
  public:
   TestWireMessage() : WireMessage("payload", "feature") {}
-  ~TestWireMessage() override {}
+  ~TestWireMessage() override = default;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TestWireMessage);
@@ -91,14 +94,28 @@
 
 class CryptAuthConnectionTest : public testing::Test {
  protected:
-  CryptAuthConnectionTest() {}
-  ~CryptAuthConnectionTest() override {}
+  CryptAuthConnectionTest() = default;
+  ~CryptAuthConnectionTest() override = default;
+
+  base::Optional<int32_t> GetRssi(Connection* connection) {
+    connection->GetConnectionRssi(base::Bind(
+        &CryptAuthConnectionTest::OnConnectionRssi, base::Unretained(this)));
+
+    base::Optional<int32_t> rssi = rssi_;
+    rssi_.reset();
+
+    return rssi;
+  }
 
  private:
+  void OnConnectionRssi(base::Optional<int32_t> rssi) { rssi_ = rssi; }
+
+  base::Optional<int32_t> rssi_;
+
   DISALLOW_COPY_AND_ASSIGN(CryptAuthConnectionTest);
 };
 
-TEST(CryptAuthConnectionTest, IsConnected) {
+TEST_F(CryptAuthConnectionTest, IsConnected) {
   StrictMock<MockConnection> connection;
   EXPECT_FALSE(connection.IsConnected());
 
@@ -112,7 +129,7 @@
   EXPECT_FALSE(connection.IsConnected());
 }
 
-TEST(CryptAuthConnectionTest, SendMessage_FailsWhenNotConnected) {
+TEST_F(CryptAuthConnectionTest, SendMessage_FailsWhenNotConnected) {
   StrictMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::IN_PROGRESS);
 
@@ -121,8 +138,8 @@
   connection.SendMessage(std::unique_ptr<WireMessage>());
 }
 
-TEST(CryptAuthConnectionTest,
-     SendMessage_FailsWhenAnotherMessageSendIsInProgress) {
+TEST_F(CryptAuthConnectionTest,
+       SendMessage_FailsWhenAnotherMessageSendIsInProgress) {
   NiceMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::CONNECTED);
   connection.SendMessage(std::unique_ptr<WireMessage>());
@@ -131,7 +148,7 @@
   connection.SendMessage(std::unique_ptr<WireMessage>());
 }
 
-TEST(CryptAuthConnectionTest, SendMessage_SucceedsWhenConnected) {
+TEST_F(CryptAuthConnectionTest, SendMessage_SucceedsWhenConnected) {
   StrictMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::CONNECTED);
 
@@ -139,8 +156,8 @@
   connection.SendMessage(std::unique_ptr<WireMessage>());
 }
 
-TEST(CryptAuthConnectionTest,
-     SendMessage_SucceedsAfterPreviousMessageSendCompletes) {
+TEST_F(CryptAuthConnectionTest,
+       SendMessage_SucceedsAfterPreviousMessageSendCompletes) {
   NiceMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::CONNECTED);
   connection.SendMessage(std::unique_ptr<WireMessage>());
@@ -150,7 +167,7 @@
   connection.SendMessage(std::unique_ptr<WireMessage>());
 }
 
-TEST(CryptAuthConnectionTest, SetStatus_NotifiesObserversOfStatusChange) {
+TEST_F(CryptAuthConnectionTest, SetStatus_NotifiesObserversOfStatusChange) {
   StrictMock<MockConnection> connection;
   EXPECT_EQ(Connection::Status::DISCONNECTED, connection.status());
 
@@ -163,8 +180,8 @@
   connection.SetStatus(Connection::Status::CONNECTED);
 }
 
-TEST(CryptAuthConnectionTest,
-     SetStatus_DoesntNotifyObserversIfStatusUnchanged) {
+TEST_F(CryptAuthConnectionTest,
+       SetStatus_DoesntNotifyObserversIfStatusUnchanged) {
   StrictMock<MockConnection> connection;
   EXPECT_EQ(Connection::Status::DISCONNECTED, connection.status());
 
@@ -175,8 +192,8 @@
   connection.SetStatus(Connection::Status::DISCONNECTED);
 }
 
-TEST(CryptAuthConnectionTest,
-     OnDidSendMessage_NotifiesObserversIfMessageSendInProgress) {
+TEST_F(CryptAuthConnectionTest,
+       OnDidSendMessage_NotifiesObserversIfMessageSendInProgress) {
   NiceMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::CONNECTED);
   connection.SendMessage(std::unique_ptr<WireMessage>());
@@ -188,8 +205,8 @@
   connection.OnDidSendMessage(TestWireMessage(), true /* success */);
 }
 
-TEST(CryptAuthConnectionTest,
-     OnDidSendMessage_DoesntNotifyObserversIfNoMessageSendInProgress) {
+TEST_F(CryptAuthConnectionTest,
+       OnDidSendMessage_DoesntNotifyObserversIfNoMessageSendInProgress) {
   NiceMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::CONNECTED);
 
@@ -200,8 +217,8 @@
   connection.OnDidSendMessage(TestWireMessage(), true /* success */);
 }
 
-TEST(CryptAuthConnectionTest,
-     OnBytesReceived_NotifiesObserversOnValidMessage) {
+TEST_F(CryptAuthConnectionTest,
+       OnBytesReceived_NotifiesObserversOnValidMessage) {
   NiceMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::CONNECTED);
 
@@ -215,8 +232,8 @@
   connection.OnBytesReceived(std::string());
 }
 
-TEST(CryptAuthConnectionTest,
-     OnBytesReceived_DoesntNotifyObserversIfNotConnected) {
+TEST_F(CryptAuthConnectionTest,
+       OnBytesReceived_DoesntNotifyObserversIfNotConnected) {
   StrictMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::IN_PROGRESS);
 
@@ -228,8 +245,8 @@
   connection.OnBytesReceived(std::string());
 }
 
-TEST(CryptAuthConnectionTest,
-     OnBytesReceived_DoesntNotifyObserversIfMessageIsIncomplete) {
+TEST_F(CryptAuthConnectionTest,
+       OnBytesReceived_DoesntNotifyObserversIfMessageIsIncomplete) {
   NiceMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::CONNECTED);
 
@@ -242,8 +259,8 @@
   connection.OnBytesReceived(std::string());
 }
 
-TEST(CryptAuthConnectionTest,
-     OnBytesReceived_DoesntNotifyObserversIfMessageIsInvalid) {
+TEST_F(CryptAuthConnectionTest,
+       OnBytesReceived_DoesntNotifyObserversIfMessageIsInvalid) {
   NiceMock<MockConnection> connection;
   connection.SetStatus(Connection::Status::CONNECTED);
 
@@ -256,4 +273,10 @@
   connection.OnBytesReceived(std::string());
 }
 
+TEST_F(CryptAuthConnectionTest, GetConnectionRssi) {
+  NiceMock<MockConnection> connection;
+  connection.SetStatus(Connection::Status::CONNECTED);
+  EXPECT_EQ(base::nullopt, GetRssi(&connection));
+}
+
 }  // namespace cryptauth
diff --git a/components/cryptauth/fake_connection.cc b/components/cryptauth/fake_connection.cc
index 34e6828..6303d27 100644
--- a/components/cryptauth/fake_connection.cc
+++ b/components/cryptauth/fake_connection.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/callback.h"
 #include "components/cryptauth/wire_message.h"
 
 namespace cryptauth {
@@ -54,6 +55,11 @@
   Connection::RemoveObserver(observer);
 }
 
+void FakeConnection::GetConnectionRssi(
+    base::OnceCallback<void(base::Optional<int32_t>)> callback) {
+  std::move(callback).Run(rssi_to_return_);
+}
+
 void FakeConnection::CompleteInProgressConnection(bool success) {
   DCHECK(!should_auto_connect_);
   DCHECK(status() == Status::IN_PROGRESS);
diff --git a/components/cryptauth/fake_connection.h b/components/cryptauth/fake_connection.h
index f89cdc86..026d11f 100644
--- a/components/cryptauth/fake_connection.h
+++ b/components/cryptauth/fake_connection.h
@@ -6,6 +6,7 @@
 #define COMPONENTS_CRYPTAUTH_FAKE_CONNECTION_H_
 
 #include "base/macros.h"
+#include "base/optional.h"
 #include "components/cryptauth/connection.h"
 
 namespace cryptauth {
@@ -19,12 +20,18 @@
   FakeConnection(RemoteDeviceRef remote_device, bool should_auto_connect);
   ~FakeConnection() override;
 
+  void set_rssi_to_return(const base::Optional<int32_t>& rssi_to_return) {
+    rssi_to_return_ = rssi_to_return;
+  }
+
   // Connection:
   void Connect() override;
   void Disconnect() override;
   std::string GetDeviceAddress() override;
   void AddObserver(ConnectionObserver* observer) override;
   void RemoveObserver(ConnectionObserver* observer) override;
+  void GetConnectionRssi(
+      base::OnceCallback<void(base::Optional<int32_t>)> callback) override;
 
   // Completes a connection attempt which was originally started via a call to
   // |Connect()|. If |success| is true, the connection's status shifts to
@@ -65,6 +72,7 @@
 
   std::vector<ConnectionObserver*> observers_;
 
+  base::Optional<int32_t> rssi_to_return_;
   const bool should_auto_connect_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeConnection);
diff --git a/components/cryptauth/fake_secure_channel.cc b/components/cryptauth/fake_secure_channel.cc
index fd997de..e2dc1c39 100644
--- a/components/cryptauth/fake_secure_channel.cc
+++ b/components/cryptauth/fake_secure_channel.cc
@@ -79,4 +79,9 @@
                    observers_.end());
 }
 
+void FakeSecureChannel::GetConnectionRssi(
+    base::OnceCallback<void(base::Optional<int32_t>)> callback) {
+  std::move(callback).Run(rssi_to_return_);
+}
+
 }  // namespace cryptauth
diff --git a/components/cryptauth/fake_secure_channel.h b/components/cryptauth/fake_secure_channel.h
index dee292b..3578727 100644
--- a/components/cryptauth/fake_secure_channel.h
+++ b/components/cryptauth/fake_secure_channel.h
@@ -7,6 +7,8 @@
 
 #include "base/callback.h"
 #include "base/macros.h"
+#include "base/optional.h"
+#include "components/cryptauth/connection.h"
 #include "components/cryptauth/secure_channel.h"
 
 namespace cryptauth {
@@ -23,6 +25,10 @@
 
   bool was_initialized() { return was_initialized_; }
 
+  void set_rssi_to_return(const base::Optional<int32_t>& rssi_to_return) {
+    rssi_to_return_ = rssi_to_return;
+  }
+
   struct SentMessage {
     SentMessage(const std::string& feature, const std::string& payload);
 
@@ -45,12 +51,15 @@
   void Disconnect() override;
   void AddObserver(Observer* observer) override;
   void RemoveObserver(Observer* observer) override;
+  void GetConnectionRssi(
+      base::OnceCallback<void(base::Optional<int32_t>)> callback) override;
 
  private:
   int next_sequence_number_ = 0;
   bool was_initialized_ = false;
   std::vector<Observer*> observers_;
   std::vector<SentMessage> sent_messages_;
+  base::Optional<int32_t> rssi_to_return_;
 
   base::OnceClosure destructor_callback_;
 
diff --git a/components/cryptauth/secure_channel.cc b/components/cryptauth/secure_channel.cc
index b7a516a..162b24ce 100644
--- a/components/cryptauth/secure_channel.cc
+++ b/components/cryptauth/secure_channel.cc
@@ -116,6 +116,16 @@
   observer_list_.RemoveObserver(observer);
 }
 
+void SecureChannel::GetConnectionRssi(
+    base::OnceCallback<void(base::Optional<int32_t>)> callback) {
+  if (!connection_) {
+    std::move(callback).Run(base::nullopt);
+    return;
+  }
+
+  connection_->GetConnectionRssi(std::move(callback));
+}
+
 void SecureChannel::OnConnectionStatusChanged(
     Connection* connection,
     Connection::Status old_status,
diff --git a/components/cryptauth/secure_channel.h b/components/cryptauth/secure_channel.h
index 71626f5..c7ec1b8 100644
--- a/components/cryptauth/secure_channel.h
+++ b/components/cryptauth/secure_channel.h
@@ -93,6 +93,11 @@
   virtual void AddObserver(Observer* observer);
   virtual void RemoveObserver(Observer* observer);
 
+  // Returns the RSSI of the connection; if no derived class overrides this
+  // function, base::nullopt is returned.
+  virtual void GetConnectionRssi(
+      base::OnceCallback<void(base::Optional<int32_t>)> callback);
+
   Status status() const {
     return status_;
   }
diff --git a/components/cryptauth/secure_channel_unittest.cc b/components/cryptauth/secure_channel_unittest.cc
index 4154c2a..442aafe 100644
--- a/components/cryptauth/secure_channel_unittest.cc
+++ b/components/cryptauth/secure_channel_unittest.cc
@@ -345,6 +345,20 @@
     EXPECT_EQ(expected_payload, wire_message->payload());
   }
 
+  void VerifyRssi(base::Optional<int32_t> expected_rssi) {
+    fake_connection_->set_rssi_to_return(expected_rssi);
+
+    secure_channel_->GetConnectionRssi(base::Bind(
+        &CryptAuthSecureChannelTest::OnConnectionRssi, base::Unretained(this)));
+
+    base::Optional<int32_t> rssi = rssi_;
+    rssi_.reset();
+
+    EXPECT_EQ(expected_rssi, rssi);
+  }
+
+  void OnConnectionRssi(base::Optional<int32_t> rssi) { rssi_ = rssi; }
+
   // Owned by secure_channel_.
   FakeConnection* fake_connection_;
 
@@ -366,9 +380,10 @@
 
   const RemoteDeviceRef test_device_;
 
+  base::Optional<int32_t> rssi_;
+
   base::WeakPtrFactory<CryptAuthSecureChannelTest> weak_ptr_factory_;
 
- private:
   DISALLOW_COPY_AND_ASSIGN(CryptAuthSecureChannelTest);
 };
 
@@ -633,4 +648,11 @@
   EXPECT_FALSE(secure_channel_);
 }
 
+TEST_F(CryptAuthSecureChannelTest, GetRssi) {
+  // Test a few different values.
+  VerifyRssi(-50 /* expected_rssi */);
+  VerifyRssi(-40 /* expected_rssi */);
+  VerifyRssi(-30 /* expected_rssi */);
+}
+
 }  // namespace cryptauth
diff --git a/components/invalidation/impl/BUILD.gn b/components/invalidation/impl/BUILD.gn
index 8c66851..bcf450db 100644
--- a/components/invalidation/impl/BUILD.gn
+++ b/components/invalidation/impl/BUILD.gn
@@ -271,6 +271,7 @@
       "//third_party/cacheinvalidation:cacheinvalidation_proto_java",
       "//third_party/junit",
     ]
+    deps += android_extra_test_deps
     java_files = [
       "android/javatests/src/org/chromium/components/invalidation/InvalidationClientServiceTest.java",
       "android/javatests/src/org/chromium/components/invalidation/TestableInvalidationClientService.java",
diff --git a/components/mirroring/service/session.cc b/components/mirroring/service/session.cc
index c53fa85..0bdc1bd 100644
--- a/components/mirroring/service/session.cc
+++ b/components/mirroring/service/session.cc
@@ -294,7 +294,7 @@
   network_context_->CreateURLLoaderFactory(
       mojo::MakeRequest(&url_loader_factory),
       network::mojom::URLLoaderFactoryParams::New(
-          network::mojom::kBrowserProcessId, false, std::string()));
+          network::mojom::kBrowserProcessId, false, -1, std::string()));
 
   // Generate session level tags.
   base::Value session_tags(base::Value::Type::DICTIONARY);
diff --git a/components/password_manager/content/browser/bad_message.cc b/components/password_manager/content/browser/bad_message.cc
index c46175f..8f7ad688 100644
--- a/components/password_manager/content/browser/bad_message.cc
+++ b/components/password_manager/content/browser/bad_message.cc
@@ -6,11 +6,19 @@
 
 #include "base/logging.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/syslog_logging.h"
+#include "components/autofill/core/common/password_form.h"
+#include "content/public/browser/child_process_security_policy.h"
+#include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_process_host.h"
 
 namespace password_manager {
 namespace bad_message {
+namespace {
 
+// Called when the browser receives a bad IPC message from a renderer process on
+// the UI thread. Logs the event, records a histogram metric for the |reason|,
+// and terminates the process for |host|.
 void ReceivedBadMessage(content::RenderProcessHost* host,
                         BadMessageReason reason) {
   LOG(ERROR)
@@ -22,5 +30,53 @@
       content::RenderProcessHost::CrashReportMode::GENERATE_CRASH_DUMP);
 }
 
+bool CheckChildProcessSecurityPolicyForURL(content::RenderFrameHost* frame,
+                                           const GURL& url,
+                                           BadMessageReason reason) {
+  // Renderer-side logic should prevent any password manager usage for
+  // about:blank frames as well as data URLs.  If that's not the case, kill the
+  // renderer, as it might be exploited.
+  if (url.SchemeIs(url::kAboutScheme) || url.SchemeIs(url::kDataScheme)) {
+    SYSLOG(WARNING) << "Killing renderer: illegal password access from about: "
+                    << "or data: URL. Reason: " << static_cast<int>(reason);
+    bad_message::ReceivedBadMessage(frame->GetProcess(), reason);
+    return false;
+  }
+
+  content::ChildProcessSecurityPolicy* policy =
+      content::ChildProcessSecurityPolicy::GetInstance();
+  if (!policy->CanAccessDataForOrigin(frame->GetProcess()->GetID(), url)) {
+    SYSLOG(WARNING) << "Killing renderer: illegal password access. Reason: "
+                    << static_cast<int>(reason);
+    bad_message::ReceivedBadMessage(frame->GetProcess(), reason);
+    return false;
+  }
+
+  return true;
+}
+
+}  // namespace
+
+bool CheckChildProcessSecurityPolicy(
+    content::RenderFrameHost* frame,
+    const autofill::PasswordForm& password_form,
+    BadMessageReason reason) {
+  return CheckChildProcessSecurityPolicyForURL(frame, password_form.origin,
+                                               reason) &&
+         CheckChildProcessSecurityPolicyForURL(
+             frame, GURL(password_form.signon_realm), reason);
+}
+
+bool CheckChildProcessSecurityPolicy(
+    content::RenderFrameHost* frame,
+    const std::vector<autofill::PasswordForm>& forms,
+    BadMessageReason reason) {
+  for (const auto& form : forms) {
+    if (!bad_message::CheckChildProcessSecurityPolicy(frame, form, reason))
+      return false;
+  }
+  return true;
+}
+
 }  // namespace bad_message
 }  // namespace password_manager
diff --git a/components/password_manager/content/browser/bad_message.h b/components/password_manager/content/browser/bad_message.h
index c0feba1..1854314 100644
--- a/components/password_manager/content/browser/bad_message.h
+++ b/components/password_manager/content/browser/bad_message.h
@@ -5,8 +5,14 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CONTENT_BROWSER_BAD_MESSAGE_H_
 #define COMPONENTS_PASSWORD_MANAGER_CONTENT_BROWSER_BAD_MESSAGE_H_
 
+#include <vector>
+
+namespace autofill {
+struct PasswordForm;
+}
+
 namespace content {
-class RenderProcessHost;
+class RenderFrameHost;
 }
 
 namespace password_manager {
@@ -38,11 +44,19 @@
 };
 
 namespace bad_message {
-// Called when the browser receives a bad IPC message from a renderer process on
-// the UI thread. Logs the event, records a histogram metric for the |reason|,
-// and terminates the process for |host|.
-void ReceivedBadMessage(content::RenderProcessHost* host,
-                        BadMessageReason reason);
+// Returns true if the renderer for |frame| is allowed to perform an operation
+// on |password_form|. If the origin mismatches, the process for |frame| is
+// terminated and the function returns false.
+bool CheckChildProcessSecurityPolicy(
+    content::RenderFrameHost* frame,
+    const autofill::PasswordForm& password_form,
+    BadMessageReason reason);
+
+// Same as above but checks every form in |forms|.
+bool CheckChildProcessSecurityPolicy(
+    content::RenderFrameHost* frame,
+    const std::vector<autofill::PasswordForm>& forms,
+    BadMessageReason reason);
 
 }  // namespace bad_message
 }  // namespace password_manager
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc
index 7dc2bb15..fdc0536 100644
--- a/components/password_manager/content/browser/content_password_manager_driver.cc
+++ b/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -6,7 +6,6 @@
 
 #include <utility>
 
-#include "base/syslog_logging.h"
 #include "components/autofill/content/browser/content_autofill_driver.h"
 #include "components/autofill/core/common/form_data.h"
 #include "components/autofill/core/common/password_form.h"
@@ -17,14 +16,9 @@
 #include "components/password_manager/core/browser/password_manager_client.h"
 #include "components/password_manager/core/browser/password_manager_metrics_recorder.h"
 #include "content/public/browser/browser_context.h"
-#include "content/public/browser/child_process_security_policy.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/navigation_handle.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host_view.h"
-#include "content/public/browser/site_instance.h"
 #include "content/public/browser/ssl_status.h"
 #include "content/public/browser/web_contents.h"
 #include "net/cert/cert_status_flags.h"
@@ -142,23 +136,24 @@
                  weak_factory_.GetWeakPtr()));
 }
 
-void ContentPasswordManagerDriver::ShowManualFallbackForSaving(
-    const autofill::PasswordForm& password_form) {
-  if (!CheckChildProcessSecurityPolicy(
-          password_form.origin,
-          BadMessageReason::CPMD_BAD_ORIGIN_SHOW_FALLBACK_FOR_SAVING))
-    return;
-  GetPasswordManager()->ShowManualFallbackForSaving(this, password_form);
-}
-
-void ContentPasswordManagerDriver::HideManualFallbackForSaving() {
-  GetPasswordManager()->HideManualFallbackForSaving();
-}
-
 void ContentPasswordManagerDriver::GeneratePassword() {
   GetPasswordGenerationAgent()->UserTriggeredGeneratePassword();
 }
 
+PasswordGenerationManager*
+ContentPasswordManagerDriver::GetPasswordGenerationManager() {
+  return &password_generation_manager_;
+}
+
+PasswordManager* ContentPasswordManagerDriver::GetPasswordManager() {
+  return client_->GetPasswordManager();
+}
+
+PasswordAutofillManager*
+ContentPasswordManagerDriver::GetPasswordAutofillManager() {
+  return &password_autofill_manager_;
+}
+
 void ContentPasswordManagerDriver::SendLoggingAvailability() {
   GetPasswordAutofillAgent()->SetLoggingState(
       client_->GetLogManager()->IsLoggingActive());
@@ -181,65 +176,6 @@
   GetPasswordAutofillAgent()->BlacklistedFormFound();
 }
 
-PasswordGenerationManager*
-ContentPasswordManagerDriver::GetPasswordGenerationManager() {
-  return &password_generation_manager_;
-}
-
-PasswordManager* ContentPasswordManagerDriver::GetPasswordManager() {
-  return client_->GetPasswordManager();
-}
-
-PasswordAutofillManager*
-ContentPasswordManagerDriver::GetPasswordAutofillManager() {
-  return &password_autofill_manager_;
-}
-
-void ContentPasswordManagerDriver::PasswordFormsParsed(
-    const std::vector<autofill::PasswordForm>& forms) {
-  for (const auto& form : forms)
-    if (!CheckChildProcessSecurityPolicy(
-            form.origin, BadMessageReason::CPMD_BAD_ORIGIN_FORMS_PARSED))
-      return;
-
-  OnPasswordFormsParsedNoRenderCheck(forms);
-}
-
-void ContentPasswordManagerDriver::OnPasswordFormsParsedNoRenderCheck(
-    const std::vector<autofill::PasswordForm>& forms) {
-  GetPasswordManager()->OnPasswordFormsParsed(this, forms);
-  GetPasswordGenerationManager()->CheckIfFormClassifierShouldRun();
-}
-
-void ContentPasswordManagerDriver::PasswordFormsRendered(
-    const std::vector<autofill::PasswordForm>& visible_forms,
-    bool did_stop_loading) {
-  for (const auto& form : visible_forms)
-    if (!CheckChildProcessSecurityPolicy(
-            form.origin, BadMessageReason::CPMD_BAD_ORIGIN_FORMS_RENDERED))
-      return;
-  GetPasswordManager()->OnPasswordFormsRendered(this, visible_forms,
-                                                did_stop_loading);
-}
-
-void ContentPasswordManagerDriver::PasswordFormSubmitted(
-    const autofill::PasswordForm& password_form) {
-  if (!CheckChildProcessSecurityPolicy(
-          password_form.origin,
-          BadMessageReason::CPMD_BAD_ORIGIN_FORM_SUBMITTED))
-    return;
-  GetPasswordManager()->OnPasswordFormSubmitted(this, password_form);
-}
-
-void ContentPasswordManagerDriver::OnFocusedPasswordFormFound(
-    const autofill::PasswordForm& password_form) {
-  if (!CheckChildProcessSecurityPolicy(
-          password_form.origin,
-          BadMessageReason::CPMD_BAD_ORIGIN_FOCUSED_PASSWORD_FORM_FOUND))
-    return;
-  GetPasswordManager()->OnPasswordFormForceSaveRequested(this, password_form);
-}
-
 void ContentPasswordManagerDriver::DidNavigateFrame(
     content::NavigationHandle* navigation_handle) {
   // Clear page specific data after main frame navigation.
@@ -250,35 +186,57 @@
   }
 }
 
+
+void ContentPasswordManagerDriver::PasswordFormsParsed(
+    const std::vector<autofill::PasswordForm>& forms) {
+  if (!bad_message::CheckChildProcessSecurityPolicy(
+          render_frame_host_, forms,
+          BadMessageReason::CPMD_BAD_ORIGIN_FORMS_PARSED))
+    return;
+
+  GetPasswordManager()->OnPasswordFormsParsed(this, forms);
+  GetPasswordGenerationManager()->CheckIfFormClassifierShouldRun();
+}
+
+void ContentPasswordManagerDriver::PasswordFormsRendered(
+    const std::vector<autofill::PasswordForm>& visible_forms,
+    bool did_stop_loading) {
+  if (!bad_message::CheckChildProcessSecurityPolicy(
+          render_frame_host_, visible_forms,
+          BadMessageReason::CPMD_BAD_ORIGIN_FORMS_RENDERED))
+    return;
+
+  GetPasswordManager()->OnPasswordFormsRendered(this, visible_forms,
+                                                did_stop_loading);
+}
+
+void ContentPasswordManagerDriver::PasswordFormSubmitted(
+    const autofill::PasswordForm& password_form) {
+  if (!bad_message::CheckChildProcessSecurityPolicy(
+          render_frame_host_, password_form,
+          BadMessageReason::CPMD_BAD_ORIGIN_FORM_SUBMITTED))
+    return;
+  GetPasswordManager()->OnPasswordFormSubmitted(this, password_form);
+}
+
+void ContentPasswordManagerDriver::ShowManualFallbackForSaving(
+    const autofill::PasswordForm& password_form) {
+  if (!bad_message::CheckChildProcessSecurityPolicy(
+          render_frame_host_, password_form,
+          BadMessageReason::CPMD_BAD_ORIGIN_SHOW_FALLBACK_FOR_SAVING))
+    return;
+  GetPasswordManager()->ShowManualFallbackForSaving(this, password_form);
+}
+
 void ContentPasswordManagerDriver::SameDocumentNavigation(
     const autofill::PasswordForm& password_form) {
-  if (!CheckChildProcessSecurityPolicy(
-          password_form.origin,
+  if (!bad_message::CheckChildProcessSecurityPolicy(
+          render_frame_host_, password_form,
           BadMessageReason::CPMD_BAD_ORIGIN_IN_PAGE_NAVIGATION))
     return;
   GetPasswordManager()->OnSameDocumentNavigation(this, password_form);
 }
 
-void ContentPasswordManagerDriver::SaveGenerationFieldDetectedByClassifier(
-    const autofill::PasswordForm& password_form,
-    const base::string16& generation_field) {
-  if (!CheckChildProcessSecurityPolicy(
-          password_form.origin,
-          BadMessageReason::
-              CPMD_BAD_ORIGIN_SAVE_GENERATION_FIELD_DETECTED_BY_CLASSIFIER))
-    return;
-  GetPasswordManager()->SaveGenerationFieldDetectedByClassifier(
-      password_form, generation_field);
-}
-
-void ContentPasswordManagerDriver::CheckSafeBrowsingReputation(
-    const GURL& form_action,
-    const GURL& frame_url) {
-#if defined(SAFE_BROWSING_DB_LOCAL)
-  client_->CheckSafeBrowsingReputation(form_action, frame_url);
-#endif
-}
-
 void ContentPasswordManagerDriver::ShowPasswordSuggestions(
     int key,
     base::i18n::TextDirection text_direction,
@@ -297,6 +255,10 @@
       text_direction, TransformToRootCoordinates(bounds));
 }
 
+void ContentPasswordManagerDriver::HideManualFallbackForSaving() {
+  GetPasswordManager()->HideManualFallbackForSaving();
+}
+
 void ContentPasswordManagerDriver::RecordSavePasswordProgress(
     const std::string& log) {
   client_->GetLogManager()->LogSavePasswordProgress(log);
@@ -306,30 +268,33 @@
   client_->GetMetricsRecorder().RecordUserModifiedPasswordField();
 }
 
-bool ContentPasswordManagerDriver::CheckChildProcessSecurityPolicy(
-    const GURL& url,
-    BadMessageReason reason) {
-  // Renderer-side logic should prevent any password manager usage for
-  // about:blank frames as well as data URLs.  If that's not the case, kill the
-  // renderer, as it might be exploited.
-  if (url.SchemeIs(url::kAboutScheme) || url.SchemeIs(url::kDataScheme)) {
-    SYSLOG(WARNING) << "Killing renderer: illegal password access from about: "
-                    << " or data: URL. Reason: " << static_cast<int>(reason);
-    bad_message::ReceivedBadMessage(render_frame_host_->GetProcess(), reason);
-    return false;
-  }
+void ContentPasswordManagerDriver::SaveGenerationFieldDetectedByClassifier(
+    const autofill::PasswordForm& password_form,
+    const base::string16& generation_field) {
+  if (!bad_message::CheckChildProcessSecurityPolicy(
+          render_frame_host_, password_form,
+          BadMessageReason::
+              CPMD_BAD_ORIGIN_SAVE_GENERATION_FIELD_DETECTED_BY_CLASSIFIER))
+    return;
+  GetPasswordManager()->SaveGenerationFieldDetectedByClassifier(
+      password_form, generation_field);
+}
 
-  content::ChildProcessSecurityPolicy* policy =
-      content::ChildProcessSecurityPolicy::GetInstance();
-  if (!policy->CanAccessDataForOrigin(render_frame_host_->GetProcess()->GetID(),
-                                      url)) {
-    SYSLOG(WARNING) << "Killing renderer: illegal password access. Reason: "
-                    << static_cast<int>(reason);
-    bad_message::ReceivedBadMessage(render_frame_host_->GetProcess(), reason);
-    return false;
-  }
+void ContentPasswordManagerDriver::CheckSafeBrowsingReputation(
+    const GURL& form_action,
+    const GURL& frame_url) {
+#if defined(SAFE_BROWSING_DB_LOCAL)
+  client_->CheckSafeBrowsingReputation(form_action, frame_url);
+#endif
+}
 
-  return true;
+void ContentPasswordManagerDriver::OnFocusedPasswordFormFound(
+    const autofill::PasswordForm& password_form) {
+  if (!bad_message::CheckChildProcessSecurityPolicy(
+          render_frame_host_, password_form,
+          BadMessageReason::CPMD_BAD_ORIGIN_FOCUSED_PASSWORD_FORM_FOUND))
+    return;
+  GetPasswordManager()->OnPasswordFormForceSaveRequested(this, password_form);
 }
 
 const autofill::mojom::AutofillAgentPtr&
diff --git a/components/password_manager/content/browser/content_password_manager_driver.h b/components/password_manager/content/browser/content_password_manager_driver.h
index 66dc5136..5ad32e3 100644
--- a/components/password_manager/content/browser/content_password_manager_driver.h
+++ b/components/password_manager/content/browser/content_password_manager_driver.h
@@ -72,22 +72,22 @@
       const autofill::PasswordFormFillData& form_data) override;
   void ClearPreviewedForm() override;
   void ForceSavePassword() override;
-  void ShowManualFallbackForSaving(const autofill::PasswordForm& form) override;
-  void HideManualFallbackForSaving() override;
   void GeneratePassword() override;
+  PasswordGenerationManager* GetPasswordGenerationManager() override;
+  PasswordManager* GetPasswordManager() override;
+  PasswordAutofillManager* GetPasswordAutofillManager() override;
   void SendLoggingAvailability() override;
   void AllowToRunFormClassifier() override;
   autofill::AutofillDriver* GetAutofillDriver() override;
   bool IsMainFrame() const override;
   void MatchingBlacklistedFormFound() override;
 
-  PasswordGenerationManager* GetPasswordGenerationManager() override;
-  PasswordManager* GetPasswordManager() override;
-  PasswordAutofillManager* GetPasswordAutofillManager() override;
-
   void DidNavigateFrame(content::NavigationHandle* navigation_handle);
 
   // autofill::mojom::PasswordManagerDriver:
+  // Note that these messages received from a potentially compromised renderer.
+  // For that reason, any access to form data should be validated via
+  // bad_message::CheckChildProcessSecurityPolicy.
   void PasswordFormsParsed(
       const std::vector<autofill::PasswordForm>& forms) override;
   void PasswordFormsRendered(
@@ -95,6 +95,8 @@
       bool did_stop_loading) override;
   void PasswordFormSubmitted(
       const autofill::PasswordForm& password_form) override;
+  void ShowManualFallbackForSaving(const autofill::PasswordForm& form) override;
+  void HideManualFallbackForSaving() override;
   void SameDocumentNavigation(
       const autofill::PasswordForm& password_form) override;
   void ShowPasswordSuggestions(int key,
@@ -112,13 +114,8 @@
   void CheckSafeBrowsingReputation(const GURL& form_action,
                                    const GURL& frame_url) override;
 
-  void OnPasswordFormsParsedNoRenderCheck(
-      const std::vector<autofill::PasswordForm>& forms);
-  void OnFocusedPasswordFormFound(const autofill::PasswordForm& password_form);
-
  private:
-  bool CheckChildProcessSecurityPolicy(const GURL& url,
-                                       BadMessageReason reason);
+  void OnFocusedPasswordFormFound(const autofill::PasswordForm& password_form);
 
   const autofill::mojom::AutofillAgentPtr& GetAutofillAgent();
 
diff --git a/components/password_manager/core/browser/BUILD.gn b/components/password_manager/core/browser/BUILD.gn
index b41f77b..c05ed61 100644
--- a/components/password_manager/core/browser/BUILD.gn
+++ b/components/password_manager/core/browser/BUILD.gn
@@ -213,18 +213,12 @@
     "//url",
   ]
 
-  if (password_reuse_detection_support) {
-    deps += [
-      "//components/safe_browsing:features",
-      "//components/safe_browsing/common:safe_browsing_prefs",
-    ]
-  }
-
   if (!is_ios) {
     sources += [
       "hsts_query.cc",
       "hsts_query.h",
     ]
+    deps += [ "//components/safe_browsing/common:safe_browsing_prefs" ]
   }
 
   if (is_posix && !is_mac && !is_ios) {
diff --git a/components/password_manager/core/browser/password_manager_driver.h b/components/password_manager/core/browser/password_manager_driver.h
index 0469659..3803165 100644
--- a/components/password_manager/core/browser/password_manager_driver.h
+++ b/components/password_manager/core/browser/password_manager_driver.h
@@ -86,14 +86,6 @@
   // the corresponding password form, so that it can be saved.
   virtual void ForceSavePassword() {}
 
-  // Tells the driver to show the manual fallback for password saving, i.e. to
-  // show the omnibox icon with anchored hidden save prompt.
-  virtual void ShowManualFallbackForSaving(const autofill::PasswordForm& form) {
-  }
-
-  // Tells the driver to hide the manual fallback for saving.
-  virtual void HideManualFallbackForSaving() {}
-
   // Tells the driver to find the focused password field and to show generation
   // popup at it.
   virtual void GeneratePassword() {}
diff --git a/components/password_manager/core/browser/password_reuse_detector.cc b/components/password_manager/core/browser/password_reuse_detector.cc
index 499565ac..14f08a9 100644
--- a/components/password_manager/core/browser/password_reuse_detector.cc
+++ b/components/password_manager/core/browser/password_reuse_detector.cc
@@ -68,7 +68,7 @@
                                       rhs.rend());
 }
 
-PasswordReuseDetector::PasswordReuseDetector() : prefs_(nullptr) {}
+PasswordReuseDetector::PasswordReuseDetector() {}
 
 PasswordReuseDetector::~PasswordReuseDetector() {}
 
@@ -160,10 +160,9 @@
   // Skips password reuse check if |domain| matches enterprise login URL or
   // enterprise change password URL.
   GURL page_url(domain);
-  if (!prefs_ ||
-      safe_browsing::MatchesPasswordProtectionLoginURL(page_url, *prefs_) ||
-      safe_browsing::MatchesPasswordProtectionChangePasswordURL(page_url,
-                                                                *prefs_)) {
+  if (enterprise_password_urls_.has_value() &&
+      safe_browsing::MatchesURLList(page_url,
+                                    enterprise_password_urls_.value())) {
     return base::nullopt;
   }
 
@@ -228,6 +227,20 @@
   enterprise_password_hash_data_list_ = std::move(password_hash_data_list);
 }
 
+void PasswordReuseDetector::UseEnterprisePasswordURLs(
+    base::Optional<std::vector<GURL>> enterprise_login_urls,
+    base::Optional<GURL> enterprise_change_password_url) {
+  enterprise_password_urls_ = std::move(enterprise_login_urls);
+  if (!enterprise_change_password_url.has_value() ||
+      !enterprise_change_password_url->is_valid()) {
+    return;
+  }
+
+  if (!enterprise_password_urls_)
+    enterprise_password_urls_ = base::make_optional<std::vector<GURL>>();
+  enterprise_password_urls_->push_back(enterprise_change_password_url.value());
+}
+
 void PasswordReuseDetector::ClearGaiaPasswordHash(const std::string& username) {
   if (!gaia_password_hash_data_list_)
     return;
diff --git a/components/password_manager/core/browser/password_reuse_detector.h b/components/password_manager/core/browser/password_reuse_detector.h
index 1397120..e244bdde 100644
--- a/components/password_manager/core/browser/password_reuse_detector.h
+++ b/components/password_manager/core/browser/password_reuse_detector.h
@@ -65,14 +65,18 @@
   void UseNonGaiaEnterprisePasswordHash(
       base::Optional<std::vector<PasswordHashData>> password_hash_data_list);
 
+  // Stores enterprise login URLs and change password URL.
+  // These URLs should be skipped in enterprise password reuse checking.
+  void UseEnterprisePasswordURLs(
+      base::Optional<std::vector<GURL>> enterprise_login_urls,
+      base::Optional<GURL> enterprise_change_password_url);
+
   void ClearGaiaPasswordHash(const std::string& username);
 
   void ClearAllGaiaPasswordHash();
 
   void ClearAllEnterprisePasswordHash();
 
-  void SetPrefs(PrefService* prefs) { prefs_ = prefs; }
-
  private:
   using passwords_iterator = std::map<base::string16,
                                       std::set<std::string>,
@@ -127,7 +131,7 @@
   base::Optional<std::vector<PasswordHashData>>
       enterprise_password_hash_data_list_;
 
-  PrefService* prefs_;
+  base::Optional<std::vector<GURL>> enterprise_password_urls_;
 
   DISALLOW_COPY_AND_ASSIGN(PasswordReuseDetector);
 };
diff --git a/components/password_manager/core/browser/password_reuse_detector_unittest.cc b/components/password_manager/core/browser/password_reuse_detector_unittest.cc
index 7fff3e93..f58a6bc 100644
--- a/components/password_manager/core/browser/password_reuse_detector_unittest.cc
+++ b/components/password_manager/core/browser/password_reuse_detector_unittest.cc
@@ -14,10 +14,6 @@
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/hash_password_manager.h"
 #include "components/password_manager/core/browser/password_manager_test_utils.h"
-#include "components/prefs/pref_registry_simple.h"
-#include "components/prefs/testing_pref_service.h"
-#include "components/safe_browsing/common/safe_browsing_prefs.h"
-#include "components/safe_browsing/features.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -104,15 +100,13 @@
   return result;
 }
 
-void ConfigureEnterprisePasswordProtection(TestingPrefServiceSimple* prefs) {
-  prefs->registry()->RegisterStringPref(
-      prefs::kPasswordProtectionChangePasswordURL, "");
-  prefs->registry()->RegisterListPref(prefs::kPasswordProtectionLoginURLs);
-  prefs->SetString(prefs::kPasswordProtectionChangePasswordURL,
-                   "https://changepassword.example.com/");
-  base::ListValue login_urls;
-  login_urls.AppendString("https://login.example.com");
-  prefs->Set(prefs::kPasswordProtectionLoginURLs, login_urls);
+void ConfigureEnterprisePasswordProtection(
+    PasswordReuseDetector* reuse_detector) {
+  base::Optional<std::vector<GURL>> login_urls =
+      base::make_optional<std::vector<GURL>>();
+  login_urls->push_back(GURL("https://login.example.com"));
+  reuse_detector->UseEnterprisePasswordURLs(
+      login_urls, GURL("https://changepassword.example.com/"));
 }
 
 TEST(PasswordReuseDetectorTest, TypingPasswordOnDifferentSite) {
@@ -296,14 +290,8 @@
 }
 
 TEST(PasswordReuseDetectorTest, EnterprisePasswordNoReuse) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(
-      safe_browsing::kEnterprisePasswordProtectionV1);
-  TestingPrefServiceSimple prefs;
-  ConfigureEnterprisePasswordProtection(&prefs);
-
   PasswordReuseDetector reuse_detector;
-  reuse_detector.SetPrefs(&prefs);
+  ConfigureEnterprisePasswordProtection(&reuse_detector);
   reuse_detector.OnGetPasswordStoreResults(GetForms(GetTestDomainsPasswords()));
   MockPasswordReuseDetectorConsumer mockConsumer;
 
@@ -330,14 +318,8 @@
 }
 
 TEST(PasswordReuseDetectorTest, EnterprisePasswordReuseFound) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(
-      safe_browsing::kEnterprisePasswordProtectionV1);
-  TestingPrefServiceSimple prefs;
-  ConfigureEnterprisePasswordProtection(&prefs);
-
   PasswordReuseDetector reuse_detector;
-  reuse_detector.SetPrefs(&prefs);
+  ConfigureEnterprisePasswordProtection(&reuse_detector);
   reuse_detector.OnGetPasswordStoreResults(GetForms(GetTestDomainsPasswords()));
   MockPasswordReuseDetectorConsumer mockConsumer;
 
@@ -406,17 +388,11 @@
 }
 
 TEST(PasswordReuseDetectorTest, MatchEnterpriseAndMultipleSavedPasswords) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(
-      safe_browsing::kEnterprisePasswordProtectionV1);
-  TestingPrefServiceSimple prefs;
-  ConfigureEnterprisePasswordProtection(&prefs);
-
   const std::vector<std::pair<std::string, std::string>> domain_passwords = {
       {"https://a.com", "34567890"}, {"https://b.com", "01234567890"},
   };
   PasswordReuseDetector reuse_detector;
-  reuse_detector.SetPrefs(&prefs);
+  ConfigureEnterprisePasswordProtection(&reuse_detector);
   reuse_detector.OnGetPasswordStoreResults(GetForms(domain_passwords));
 
   std::string enterprise_password = "1234567890";
@@ -449,14 +425,8 @@
 }
 
 TEST(PasswordReuseDetectorTest, MatchSavedPasswordButNotEnterprisePassword) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(
-      safe_browsing::kEnterprisePasswordProtectionV1);
-  TestingPrefServiceSimple prefs;
-  ConfigureEnterprisePasswordProtection(&prefs);
-
   PasswordReuseDetector reuse_detector;
-  reuse_detector.SetPrefs(&prefs);
+  ConfigureEnterprisePasswordProtection(&reuse_detector);
   reuse_detector.OnGetPasswordStoreResults(GetForms(GetTestDomainsPasswords()));
   MockPasswordReuseDetectorConsumer mockConsumer;
 
@@ -472,17 +442,11 @@
 }
 
 TEST(PasswordReuseDetectorTest, MatchGaiaEnterpriseAndSavedPassword) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(
-      safe_browsing::kEnterprisePasswordProtectionV1);
-  TestingPrefServiceSimple prefs;
-  ConfigureEnterprisePasswordProtection(&prefs);
-
   const std::vector<std::pair<std::string, std::string>> domain_passwords = {
       {"https://a.com", "34567890"}, {"https://b.com", "01234567890"},
   };
   PasswordReuseDetector reuse_detector;
-  reuse_detector.SetPrefs(&prefs);
+  ConfigureEnterprisePasswordProtection(&reuse_detector);
   reuse_detector.OnGetPasswordStoreResults(GetForms(domain_passwords));
 
   std::string gaia_password = "123456789";
diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc
index 4831cb3..9e52b330 100644
--- a/components/password_manager/core/browser/password_store.cc
+++ b/components/password_manager/core/browser/password_store.cc
@@ -29,6 +29,7 @@
 
 #if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
 #include "components/password_manager/core/browser/password_store_signin_notifier.h"
+#include "components/safe_browsing/common/safe_browsing_prefs.h"
 #endif
 
 using autofill::PasswordForm;
@@ -366,6 +367,7 @@
   // the migration.
   hash_password_manager_.MaybeMigrateExistingSyncPasswordHash(sync_username);
   SchedulePasswordHashUpdate(/*should_log_metrics=*/true);
+  ScheduleEnterprisePasswordURLUpdate();
 }
 
 void PasswordStore::SaveGaiaPasswordHash(
@@ -433,6 +435,18 @@
       should_log_metrics));
 }
 
+void PasswordStore::ScheduleEnterprisePasswordURLUpdate() {
+  std::vector<GURL> enterprise_login_urls;
+  safe_browsing::GetPasswordProtectionLoginURLsPref(*prefs_,
+                                                    &enterprise_login_urls);
+  GURL enterprise_change_password_url =
+      safe_browsing::GetPasswordProtectionChangePasswordURLPref(*prefs_);
+
+  ScheduleTask(base::BindRepeating(&PasswordStore::SaveEnterprisePasswordURLs,
+                                   this, base::Passed(&enterprise_login_urls),
+                                   enterprise_change_password_url));
+}
+
 #endif
 
 PasswordStore::~PasswordStore() {
@@ -454,7 +468,6 @@
 // TODO(crbug.com/706392): Fix password reuse detection for Android.
 #if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
   reuse_detector_ = new PasswordReuseDetector;
-  reuse_detector_->SetPrefs(prefs_);
   GetAutofillableLoginsImpl(
       std::make_unique<GetLoginsRequest>(reuse_detector_));
 #endif
@@ -554,6 +567,15 @@
       std::move(enterprise_password_hash_list));
 }
 
+void PasswordStore::SaveEnterprisePasswordURLs(
+    const std::vector<GURL>& enterprise_login_urls,
+    const GURL& enterprise_change_password_url) {
+  if (!reuse_detector_)
+    return;
+  reuse_detector_->UseEnterprisePasswordURLs(std::move(enterprise_login_urls),
+                                             enterprise_change_password_url);
+}
+
 void PasswordStore::ClearProtectedPasswordHashImpl() {
   // TODO(crbug.com/844134): Find a way to clear corresponding Gaia password
   // hash when user logs out individual Gaia account in content area.
diff --git a/components/password_manager/core/browser/password_store.h b/components/password_manager/core/browser/password_store.h
index 8ed13646..209aedb 100644
--- a/components/password_manager/core/browser/password_store.h
+++ b/components/password_manager/core/browser/password_store.h
@@ -293,9 +293,13 @@
   void SetPasswordStoreSigninNotifier(
       std::unique_ptr<PasswordStoreSigninNotifier> notifier);
 
-  // Schedule the update of password hashes used by reuse detector.
+  // Schedules the update of password hashes used by reuse detector.
   void SchedulePasswordHashUpdate(bool should_log_metrics);
 
+  // Schedules the update of enterprise login and change password URLs.
+  // These URLs are used in enterprise password reuse detection.
+  void ScheduleEnterprisePasswordURLUpdate();
+
 #endif
 
  protected:
@@ -483,6 +487,12 @@
       PasswordHashDataList protected_password_data_list,
       bool should_log_metrics);
 
+  // Propagates enterprise login urls and change password url to
+  // |reuse_detector_|.
+  void SaveEnterprisePasswordURLs(
+      const std::vector<GURL>& enterprise_login_urls,
+      const GURL& enterprise_change_password_url);
+
   // Synchronous implementation of ClearProtectedPasswordHash().
   void ClearProtectedPasswordHashImpl();
 #endif
diff --git a/components/payments/content/utility/payment_manifest_parser.cc b/components/payments/content/utility/payment_manifest_parser.cc
index 1ad3989f..2b792a1 100644
--- a/components/payments/content/utility/payment_manifest_parser.cc
+++ b/components/payments/content/utility/payment_manifest_parser.cc
@@ -449,7 +449,7 @@
     std::unique_ptr<base::Value> value) {
   // TODO(crbug.com/782270): Move this function into a static function for unit
   // test.
-  if (value->FindKey({kServiceWorker}) == nullptr) {
+  if (!value || value->FindKey({kServiceWorker}) == nullptr) {
     return std::move(callback).Run(nullptr, nullptr);
   }
 
diff --git a/components/previews/content/previews_content_util.cc b/components/previews/content/previews_content_util.cc
index 48113ed..5f066f9 100644
--- a/components/previews/content/previews_content_util.cc
+++ b/components/previews/content/previews_content_util.cc
@@ -29,6 +29,11 @@
     return previews_state;
   }
 
+  if (previews_decider->ShouldAllowPreview(
+          url_request, previews::PreviewsType::RESOURCE_LOADING_HINTS)) {
+    previews_state |= content::RESOURCE_LOADING_HINTS_ON;
+  }
+
   // Check for client-side previews in precendence order.
   // Note: this for for the beginning of navigation so we should not
   // check for https here (since an http request may redirect to https).
@@ -83,6 +88,16 @@
 
   // Make priority decision among allowed client preview types that can be
   // decided at Commit time.
+  if (previews_state & content::RESOURCE_LOADING_HINTS_ON) {
+    // Resource loading hints was chosen for the original URL but only continue
+    //  with it if the committed URL has HTTPS scheme and is allowed by decider.
+    if (is_https && previews_decider &&
+        previews_decider->IsURLAllowedForPreview(
+            url_request, previews::PreviewsType::RESOURCE_LOADING_HINTS)) {
+      return content::RESOURCE_LOADING_HINTS_ON;
+    }
+  }
+
   if (previews_state & content::NOSCRIPT_ON) {
     // NoScript was chosen for the original URL but only continue with it
     // if the committed URL has HTTPS scheme and is allowed by decider.
@@ -108,10 +123,13 @@
 
 previews::PreviewsType GetMainFramePreviewsType(
     content::PreviewsState previews_state) {
+  // The order is important here.
   if (previews_state & content::SERVER_LITE_PAGE_ON)
     return previews::PreviewsType::LITE_PAGE;
   if (previews_state & content::SERVER_LOFI_ON)
     return previews::PreviewsType::LOFI;
+  if (previews_state & content::RESOURCE_LOADING_HINTS_ON)
+    return previews::PreviewsType::RESOURCE_LOADING_HINTS;
   if (previews_state & content::NOSCRIPT_ON)
     return previews::PreviewsType::NOSCRIPT;
   if (previews_state & content::CLIENT_LOFI_ON)
diff --git a/components/previews/content/previews_content_util_unittest.cc b/components/previews/content/previews_content_util_unittest.cc
index 52d1354..f5ca57e 100644
--- a/components/previews/content/previews_content_util_unittest.cc
+++ b/components/previews/content/previews_content_util_unittest.cc
@@ -45,6 +45,8 @@
 
   bool IsURLAllowedForPreview(const net::URLRequest& request,
                               PreviewsType type) const override {
+    EXPECT_TRUE(type == PreviewsType::NOSCRIPT ||
+                type == PreviewsType::RESOURCE_LOADING_HINTS);
     return IsEnabled(type);
   }
 
@@ -52,17 +54,19 @@
   bool IsEnabled(PreviewsType type) const {
     switch (type) {
       case previews::PreviewsType::OFFLINE:
-        return previews::params::IsOfflinePreviewsEnabled();
+        return params::IsOfflinePreviewsEnabled();
       case previews::PreviewsType::LOFI:
-        return previews::params::IsClientLoFiEnabled();
+        return params::IsClientLoFiEnabled();
       case previews::PreviewsType::AMP_REDIRECTION:
-        return previews::params::IsAMPRedirectionPreviewEnabled();
+        return params::IsAMPRedirectionPreviewEnabled();
       case previews::PreviewsType::NOSCRIPT:
-        return previews::params::IsNoScriptPreviewsEnabled();
-      case previews::PreviewsType::LITE_PAGE:
-      case previews::PreviewsType::NONE:
-      case previews::PreviewsType::UNSPECIFIED:
-      case previews::PreviewsType::LAST:
+        return params::IsNoScriptPreviewsEnabled();
+      case previews::PreviewsType::RESOURCE_LOADING_HINTS:
+        return params::IsResourceLoadingHintsEnabled();
+      case PreviewsType::LITE_PAGE:
+      case PreviewsType::NONE:
+      case PreviewsType::UNSPECIFIED:
+      case PreviewsType::LAST:
         break;
     }
     NOTREACHED();
@@ -104,8 +108,9 @@
 TEST_F(PreviewsContentUtilTest,
        DetermineEnabledClientPreviewsStatePreviewsDisabled) {
   base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitFromCommandLine("ClientLoFi" /* enable_features */,
-                                          "Previews" /* disable_features */);
+  scoped_feature_list.InitFromCommandLine(
+      "ClientLoFi,ResourceLoadingHints,NoScriptPreviews" /* enable_features */,
+      "Previews" /* disable_features */);
   EXPECT_EQ(content::PREVIEWS_UNSPECIFIED,
             previews::DetermineEnabledClientPreviewsState(
                 *CreateHttpsRequest(), enabled_previews_decider()));
@@ -126,6 +131,19 @@
 }
 
 TEST_F(PreviewsContentUtilTest,
+       DetermineEnabledClientPreviewsStateResourceLoadingHints) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitFromCommandLine("Previews,ResourceLoadingHints",
+                                          std::string());
+  EXPECT_LT(0, content::RESOURCE_LOADING_HINTS_ON &
+                   previews::DetermineEnabledClientPreviewsState(
+                       *CreateHttpsRequest(), enabled_previews_decider()));
+  EXPECT_LT(0, content::RESOURCE_LOADING_HINTS_ON &
+                   previews::DetermineEnabledClientPreviewsState(
+                       *CreateRequest(), enabled_previews_decider()));
+}
+
+TEST_F(PreviewsContentUtilTest,
        DetermineEnabledClientPreviewsStateNoScriptAndClientLoFi) {
   // Enable both Client LoFi and NoScript.
   base::test::ScopedFeatureList scoped_feature_list;
@@ -151,8 +169,9 @@
 TEST_F(PreviewsContentUtilTest, DetermineCommittedClientPreviewsState) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitFromCommandLine(
-      "Previews,ClientLoFi,NoScriptPreviews", std::string());
-  // Server bits take precendence over NoScript:
+      "Previews,ClientLoFi,NoScriptPreviews,ResourceLoadingHints",
+      std::string());
+  // Server bits take precedence over NoScript:
   EXPECT_EQ(content::SERVER_LITE_PAGE_ON | content::SERVER_LOFI_ON |
                 content::CLIENT_LOFI_ON,
             previews::DetermineCommittedClientPreviewsState(
@@ -168,18 +187,33 @@
           *CreateHttpsRequest(), content::CLIENT_LOFI_ON | content::NOSCRIPT_ON,
           enabled_previews_decider()));
 
-  // NoScript has precedence over Client LoFi - dropped for committed HTTP:
-  EXPECT_EQ(
-      content::PREVIEWS_OFF,
-      previews::DetermineCommittedClientPreviewsState(
-          *CreateRequest(), content::CLIENT_LOFI_ON | content::NOSCRIPT_ON,
-          enabled_previews_decider()));
+  // RESOURCE_LOADING_HINTS has precedence over Client LoFi and NoScript.
+  EXPECT_EQ(content::RESOURCE_LOADING_HINTS_ON,
+            previews::DetermineCommittedClientPreviewsState(
+                *CreateHttpsRequest(),
+                content::CLIENT_LOFI_ON | content::NOSCRIPT_ON |
+                    content::RESOURCE_LOADING_HINTS_ON,
+                enabled_previews_decider()));
 
-  // Client LoFi:
+  // NoScript has precedence over Client LoFi - dropped for committed HTTP:
+  EXPECT_EQ(content::PREVIEWS_OFF,
+            previews::DetermineCommittedClientPreviewsState(
+                *CreateRequest(),
+                content::CLIENT_LOFI_ON | content::NOSCRIPT_ON |
+                    content::RESOURCE_LOADING_HINTS_ON,
+                enabled_previews_decider()));
+
+  // Only Client LoFi:
   EXPECT_EQ(content::CLIENT_LOFI_ON,
             previews::DetermineCommittedClientPreviewsState(
                 *CreateHttpsRequest(), content::CLIENT_LOFI_ON,
                 enabled_previews_decider()));
+
+  // Only NoScript:
+  EXPECT_EQ(content::NOSCRIPT_ON,
+            previews::DetermineCommittedClientPreviewsState(
+                *CreateHttpsRequest(), content::NOSCRIPT_ON,
+                enabled_previews_decider()));
 }
 
 TEST_F(PreviewsContentUtilTest,
@@ -187,11 +221,12 @@
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitFromCommandLine("Previews,ClientLoFi", std::string());
   // NoScript not allowed at commit time so Client LoFi chosen:
-  EXPECT_EQ(
-      content::PREVIEWS_OFF,
-      previews::DetermineCommittedClientPreviewsState(
-          *CreateHttpsRequest(), content::CLIENT_LOFI_ON | content::NOSCRIPT_ON,
-          enabled_previews_decider()));
+  EXPECT_EQ(content::PREVIEWS_OFF,
+            previews::DetermineCommittedClientPreviewsState(
+                *CreateHttpsRequest(),
+                content::CLIENT_LOFI_ON | content::NOSCRIPT_ON |
+                    content::RESOURCE_LOADING_HINTS_ON,
+                enabled_previews_decider()));
 }
 
 TEST_F(PreviewsContentUtilTest, GetMainFramePreviewsType) {
@@ -202,6 +237,9 @@
             previews::GetMainFramePreviewsType(content::SERVER_LOFI_ON));
   EXPECT_EQ(previews::PreviewsType::NOSCRIPT,
             previews::GetMainFramePreviewsType(content::NOSCRIPT_ON));
+  EXPECT_EQ(
+      previews::PreviewsType::RESOURCE_LOADING_HINTS,
+      previews::GetMainFramePreviewsType(content::RESOURCE_LOADING_HINTS_ON));
   EXPECT_EQ(previews::PreviewsType::LOFI,
             previews::GetMainFramePreviewsType(content::CLIENT_LOFI_ON));
 
@@ -211,18 +249,25 @@
   EXPECT_EQ(previews::PreviewsType::NONE,
             previews::GetMainFramePreviewsType(content::PREVIEWS_NO_TRANSFORM));
 
-  // Precedence cases:
+  // Precedence cases when server preview is available:
   EXPECT_EQ(previews::PreviewsType::LITE_PAGE,
             previews::GetMainFramePreviewsType(
                 content::SERVER_LITE_PAGE_ON | content::SERVER_LOFI_ON |
-                content::NOSCRIPT_ON | content::CLIENT_LOFI_ON));
+                content::NOSCRIPT_ON | content::CLIENT_LOFI_ON |
+                content::RESOURCE_LOADING_HINTS_ON));
   EXPECT_EQ(previews::PreviewsType::LOFI,
-            previews::GetMainFramePreviewsType(content::SERVER_LOFI_ON |
-                                               content::NOSCRIPT_ON |
-                                               content::CLIENT_LOFI_ON));
+            previews::GetMainFramePreviewsType(
+                content::SERVER_LOFI_ON | content::NOSCRIPT_ON |
+                content::CLIENT_LOFI_ON | content::RESOURCE_LOADING_HINTS_ON));
+
+  // Precedence cases when server preview is not available:
   EXPECT_EQ(previews::PreviewsType::NOSCRIPT,
             previews::GetMainFramePreviewsType(content::NOSCRIPT_ON |
                                                content::CLIENT_LOFI_ON));
+  EXPECT_EQ(previews::PreviewsType::RESOURCE_LOADING_HINTS,
+            previews::GetMainFramePreviewsType(
+                content::NOSCRIPT_ON | content::CLIENT_LOFI_ON |
+                content::RESOURCE_LOADING_HINTS_ON));
 }
 
 }  // namespace
diff --git a/components/previews/content/previews_io_data.cc b/components/previews/content/previews_io_data.cc
index 468d24cb..c6acdee 100644
--- a/components/previews/content/previews_io_data.cc
+++ b/components/previews/content/previews_io_data.cc
@@ -49,6 +49,7 @@
     case PreviewsType::LOFI:
     case PreviewsType::AMP_REDIRECTION:
     case PreviewsType::NOSCRIPT:
+    case PreviewsType::RESOURCE_LOADING_HINTS:
       return true;
     // Loading these types will always be stale when refreshed.
     case PreviewsType::OFFLINE:
@@ -66,6 +67,7 @@
   switch (type) {
     // These types check server whitelist, if available.
     case PreviewsType::NOSCRIPT:
+    case PreviewsType::RESOURCE_LOADING_HINTS:
       return true;
     case PreviewsType::OFFLINE:
     case PreviewsType::LITE_PAGE:
@@ -209,7 +211,8 @@
 
 bool PreviewsIOData::ShouldAllowPreview(const net::URLRequest& request,
                                         PreviewsType type) const {
-  DCHECK(type == PreviewsType::OFFLINE || type == PreviewsType::NOSCRIPT);
+  DCHECK(type == PreviewsType::OFFLINE || type == PreviewsType::NOSCRIPT ||
+         type == PreviewsType::RESOURCE_LOADING_HINTS);
   // Consumers that need to specify a blacklist or ignore flag should use
   // ShouldAllowPreviewAtECT directly.
   return ShouldAllowPreviewAtECT(request, type,
@@ -333,7 +336,16 @@
                                std::move(passed_reasons), page_id);
         return false;
       }
+    } else if (type == PreviewsType::RESOURCE_LOADING_HINTS) {
+      // RESOURCE_LOADING_HINTS optimization can be applied only when a server
+      // provided whitelist is available.
+      LogPreviewDecisionMade(
+          PreviewsEligibilityReason::HOST_NOT_WHITELISTED_BY_SERVER,
+          request.url(), base::Time::Now(), type, std::move(passed_reasons),
+          page_id);
+      return false;
     } else {
+      DCHECK_EQ(PreviewsType::NOSCRIPT, type);
       // Since server optimization guidance not configured, allow the preview
       // but with qualified eligibility reason.
       LogPreviewDecisionMade(
@@ -352,7 +364,8 @@
 
 bool PreviewsIOData::IsURLAllowedForPreview(const net::URLRequest& request,
                                             PreviewsType type) const {
-  DCHECK_EQ(PreviewsType::NOSCRIPT, type);
+  DCHECK(PreviewsType::NOSCRIPT == type ||
+         PreviewsType::RESOURCE_LOADING_HINTS == type);
   if (previews_black_list_ && !blacklist_ignored_) {
     std::vector<PreviewsEligibilityReason> passed_reasons;
     // The blacklist will disallow certain hosts for periods of time based on
diff --git a/components/previews/content/previews_io_data_unittest.cc b/components/previews/content/previews_io_data_unittest.cc
index ca6f3f5..924d67d 100644
--- a/components/previews/content/previews_io_data_unittest.cc
+++ b/components/previews/content/previews_io_data_unittest.cc
@@ -70,6 +70,8 @@
       return params::IsClientLoFiEnabled();
     case PreviewsType::NOSCRIPT:
       return params::IsNoScriptPreviewsEnabled();
+    case PreviewsType::RESOURCE_LOADING_HINTS:
+      return params::IsResourceLoadingHintsEnabled();
     case PreviewsType::NONE:
     case PreviewsType::UNSPECIFIED:
     case PreviewsType::LAST:
@@ -133,7 +135,17 @@
   // PreviewsOptimizationGuide:
   bool IsWhitelisted(const net::URLRequest& request,
                      PreviewsType type) const override {
-    return request.url().host().compare("whitelisted.example.com") == 0;
+    EXPECT_TRUE(type == PreviewsType::NOSCRIPT ||
+                type == PreviewsType::RESOURCE_LOADING_HINTS);
+    if (type == PreviewsType::NOSCRIPT) {
+      return request.url().host().compare("whitelisted.example.com") == 0 ||
+             request.url().host().compare(
+                 "noscript_only_whitelisted.example.com") == 0;
+    }
+    if (type == PreviewsType::RESOURCE_LOADING_HINTS) {
+      return request.url().host().compare("whitelisted.example.com") == 0;
+    }
+    return false;
   }
 };
 
@@ -362,6 +374,7 @@
     allowed_types[static_cast<int>(PreviewsType::LOFI)] = 0;
     allowed_types[static_cast<int>(PreviewsType::LITE_PAGE)] = 0;
     allowed_types[static_cast<int>(PreviewsType::NOSCRIPT)] = 0;
+    allowed_types[static_cast<int>(PreviewsType::RESOURCE_LOADING_HINTS)] = 0;
     allowed_types[static_cast<int>(PreviewsType::AMP_REDIRECTION)] = 0;
     ui_service_.reset(new TestPreviewsUIService(
         io_data_.get(), scoped_task_environment_.GetMainThreadTaskRunner(),
@@ -940,6 +953,224 @@
   }
 }
 
+TEST_F(PreviewsIODataTest, ResourceLoadingHintsDisallowedByDefault) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitWithFeatures(
+      {features::kPreviews, features::kResourceLoadingHints}, {});
+  InitializeUIService();
+
+  network_quality_estimator()->set_effective_connection_type(
+      net::EFFECTIVE_CONNECTION_TYPE_2G);
+
+  base::HistogramTester histogram_tester;
+  EXPECT_FALSE(io_data()->ShouldAllowPreviewAtECT(
+      *CreateRequest(), PreviewsType::RESOURCE_LOADING_HINTS,
+      previews::params::GetECTThresholdForPreview(
+          previews::PreviewsType::RESOURCE_LOADING_HINTS),
+      std::vector<std::string>(), false));
+  histogram_tester.ExpectUniqueSample(
+      "Previews.EligibilityReason.ResourceLoadingHints",
+      static_cast<int>(
+          PreviewsEligibilityReason::HOST_NOT_WHITELISTED_BY_SERVER),
+      1);
+}
+
+TEST_F(PreviewsIODataTest,
+       ResourceLoadingHintsDisallowedWithoutOptimizationHints) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitWithFeatures(
+      {features::kPreviews, features::kResourceLoadingHints}, {});
+  InitializeUIService();
+
+  network_quality_estimator()->set_effective_connection_type(
+      net::EFFECTIVE_CONNECTION_TYPE_2G);
+
+  base::HistogramTester histogram_tester;
+  EXPECT_FALSE(io_data()->ShouldAllowPreviewAtECT(
+      *CreateRequestWithURL(GURL("https://whitelisted.example.com")),
+      PreviewsType::RESOURCE_LOADING_HINTS,
+      previews::params::GetECTThresholdForPreview(
+          previews::PreviewsType::RESOURCE_LOADING_HINTS),
+      std::vector<std::string>(), false));
+  histogram_tester.ExpectUniqueSample(
+      "Previews.EligibilityReason.ResourceLoadingHints",
+      static_cast<int>(
+          PreviewsEligibilityReason::HOST_NOT_WHITELISTED_BY_SERVER),
+      1);
+}
+
+TEST_F(PreviewsIODataTest, ResourceLoadingHintsAllowedByFeature) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitWithFeatures(
+      {features::kPreviews, features::kResourceLoadingHints,
+       features::kOptimizationHints},
+      {});
+  InitializeUIService();
+
+  const struct {
+    net::EffectiveConnectionType effective_connection_type;
+    bool expected_resource_loading_hints_allowed;
+  } tests[] = {
+      {net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN, false},
+      {net::EFFECTIVE_CONNECTION_TYPE_OFFLINE, false},
+      {net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G, true},
+      {net::EFFECTIVE_CONNECTION_TYPE_2G, true},
+      {net::EFFECTIVE_CONNECTION_TYPE_3G, false},
+  };
+
+  for (const auto& test : tests) {
+    network_quality_estimator()->set_effective_connection_type(
+        test.effective_connection_type);
+
+    base::HistogramTester histogram_tester;
+
+    // Check whitelisted URL.
+    EXPECT_EQ(
+        test.expected_resource_loading_hints_allowed,
+        io_data()->ShouldAllowPreviewAtECT(
+            *CreateRequestWithURL(GURL("https://whitelisted.example.com")),
+            PreviewsType::RESOURCE_LOADING_HINTS,
+            previews::params::GetECTThresholdForPreview(
+                previews::PreviewsType::RESOURCE_LOADING_HINTS),
+            std::vector<std::string>(), false))
+        << " effective_connection_type=" << test.effective_connection_type;
+    if (test.expected_resource_loading_hints_allowed) {
+      histogram_tester.ExpectUniqueSample(
+          "Previews.EligibilityReason.ResourceLoadingHints",
+          static_cast<int>(PreviewsEligibilityReason::ALLOWED), 1);
+    } else if (test.effective_connection_type ==
+               net::EFFECTIVE_CONNECTION_TYPE_3G) {
+      histogram_tester.ExpectBucketCount(
+          "Previews.EligibilityReason.ResourceLoadingHints",
+          static_cast<int>(PreviewsEligibilityReason::NETWORK_NOT_SLOW), 1);
+    } else {
+      histogram_tester.ExpectBucketCount(
+          "Previews.EligibilityReason.ResourceLoadingHints",
+          static_cast<int>(
+              PreviewsEligibilityReason::NETWORK_QUALITY_UNAVAILABLE),
+          1);
+    }
+  }
+}
+
+TEST_F(PreviewsIODataTest, ResourceLoadingHintsAllowedByFeatureWithWhitelist) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitWithFeatures(
+      {features::kPreviews, features::kResourceLoadingHints,
+       features::kOptimizationHints},
+      {});
+  InitializeUIService();
+
+  network_quality_estimator()->set_effective_connection_type(
+      net::EFFECTIVE_CONNECTION_TYPE_2G);
+
+  base::HistogramTester histogram_tester;
+
+  // First verify no preview for non-whitelisted url.
+  EXPECT_FALSE(io_data()->ShouldAllowPreviewAtECT(
+      *CreateHttpsRequest(), PreviewsType::RESOURCE_LOADING_HINTS,
+      previews::params::GetECTThresholdForPreview(
+          previews::PreviewsType::RESOURCE_LOADING_HINTS),
+      std::vector<std::string>(), false));
+
+  histogram_tester.ExpectUniqueSample(
+      "Previews.EligibilityReason.ResourceLoadingHints",
+      static_cast<int>(
+          PreviewsEligibilityReason::HOST_NOT_WHITELISTED_BY_SERVER),
+      1);
+
+  // Now verify preview for whitelisted url.
+  EXPECT_TRUE(io_data()->ShouldAllowPreviewAtECT(
+      *CreateRequestWithURL(GURL("https://whitelisted.example.com")),
+      PreviewsType::RESOURCE_LOADING_HINTS,
+      previews::params::GetECTThresholdForPreview(
+          previews::PreviewsType::RESOURCE_LOADING_HINTS),
+      std::vector<std::string>(), false));
+
+  histogram_tester.ExpectBucketCount(
+      "Previews.EligibilityReason.ResourceLoadingHints",
+      static_cast<int>(PreviewsEligibilityReason::ALLOWED), 1);
+}
+
+TEST_F(PreviewsIODataTest, ResourceLoadingHintsCommitTimeWhitelistCheck) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitWithFeatures(
+      {features::kPreviews, features::kResourceLoadingHints,
+       features::kOptimizationHints},
+      {});
+  InitializeUIService();
+
+  network_quality_estimator()->set_effective_connection_type(
+      net::EFFECTIVE_CONNECTION_TYPE_2G);
+
+  // First verify not allowed for non-whitelisted url.
+  {
+    base::HistogramTester histogram_tester;
+    EXPECT_FALSE(io_data()->IsURLAllowedForPreview(
+        *CreateHttpsRequest(), PreviewsType::RESOURCE_LOADING_HINTS));
+
+    histogram_tester.ExpectUniqueSample(
+        "Previews.EligibilityReason.ResourceLoadingHints",
+        static_cast<int>(
+            PreviewsEligibilityReason::HOST_NOT_WHITELISTED_BY_SERVER),
+        1);
+  }
+
+  // Now verify preview for whitelisted url.
+  {
+    base::HistogramTester histogram_tester;
+    EXPECT_TRUE(io_data()->IsURLAllowedForPreview(
+        *CreateRequestWithURL(GURL("https://whitelisted.example.com")),
+        PreviewsType::RESOURCE_LOADING_HINTS));
+
+    // Expect no eligibility logging.
+    histogram_tester.ExpectTotalCount(
+        "Previews.EligibilityReason.ResourceLoadingHints", 0);
+  }
+}
+
+TEST_F(PreviewsIODataTest,
+       ResourceLoadingHintsAndNoScriptAllowedByFeatureWithWhitelist) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitWithFeatures(
+      {features::kPreviews, features::kResourceLoadingHints,
+       features::kOptimizationHints, features::kNoScriptPreviews},
+      {});
+  InitializeUIService();
+
+  network_quality_estimator()->set_effective_connection_type(
+      net::EFFECTIVE_CONNECTION_TYPE_2G);
+
+  base::HistogramTester histogram_tester;
+
+  // Now verify preview for url that's whitelisted only for NoScript.
+  EXPECT_FALSE(io_data()->ShouldAllowPreviewAtECT(
+      *CreateRequestWithURL(
+          GURL("https://noscript_only_whitelisted.example.com")),
+      PreviewsType::RESOURCE_LOADING_HINTS,
+      previews::params::GetECTThresholdForPreview(
+          previews::PreviewsType::RESOURCE_LOADING_HINTS),
+      std::vector<std::string>(), false));
+
+  histogram_tester.ExpectBucketCount(
+      "Previews.EligibilityReason.ResourceLoadingHints",
+      static_cast<int>(
+          PreviewsEligibilityReason::HOST_NOT_WHITELISTED_BY_SERVER),
+      1);
+
+  EXPECT_TRUE(io_data()->ShouldAllowPreviewAtECT(
+      *CreateRequestWithURL(
+          GURL("https://noscript_only_whitelisted.example.com")),
+      PreviewsType::NOSCRIPT,
+      previews::params::GetECTThresholdForPreview(
+          previews::PreviewsType::NOSCRIPT),
+      std::vector<std::string>(), false));
+
+  histogram_tester.ExpectBucketCount(
+      "Previews.EligibilityReason.NoScript",
+      static_cast<int>(PreviewsEligibilityReason::ALLOWED), 1);
+}
+
 TEST_F(PreviewsIODataTest, LogPreviewNavigationPassInCorrectParams) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(features::kPreviews);
diff --git a/components/previews/core/previews_experiments.cc b/components/previews/core/previews_experiments.cc
index 93f092a..91e1ba6 100644
--- a/components/previews/core/previews_experiments.cc
+++ b/components/previews/core/previews_experiments.cc
@@ -149,6 +149,10 @@
                                                    // ECT.
     case PreviewsType::NONE:
     case PreviewsType::UNSPECIFIED:
+    case PreviewsType::RESOURCE_LOADING_HINTS:
+      return GetParamValueAsECTByFeature(features::kResourceLoadingHints,
+                                         kEffectiveConnectionTypeThreshold,
+                                         net::EFFECTIVE_CONNECTION_TYPE_2G);
     case PreviewsType::LAST:
       break;
   }
@@ -176,6 +180,10 @@
   return base::FeatureList::IsEnabled(features::kNoScriptPreviews);
 }
 
+bool IsResourceLoadingHintsEnabled() {
+  return base::FeatureList::IsEnabled(features::kResourceLoadingHints);
+}
+
 int OfflinePreviewsVersion() {
   return GetParamValueAsInt(kClientSidePreviewsFieldTrial, kVersion, 0);
 }
@@ -195,6 +203,11 @@
                                           0);
 }
 
+int ResourceLoadingHintsVersion() {
+  return GetFieldTrialParamByFeatureAsInt(features::kResourceLoadingHints,
+                                          kVersion, 0);
+}
+
 bool IsOptimizationHintsEnabled() {
   return base::FeatureList::IsEnabled(features::kOptimizationHints);
 }
@@ -245,6 +258,8 @@
       return "NoScript";
     case PreviewsType::UNSPECIFIED:
       return "Unspecified";
+    case PreviewsType::RESOURCE_LOADING_HINTS:
+      return "ResourceLoadingHints";
     case PreviewsType::LAST:
       break;
   }
diff --git a/components/previews/core/previews_experiments.h b/components/previews/core/previews_experiments.h
index 27726d52..e40314f 100644
--- a/components/previews/core/previews_experiments.h
+++ b/components/previews/core/previews_experiments.h
@@ -37,9 +37,12 @@
   // might be used for checks or logging that applies to any type.
   UNSPECIFIED = 6,
 
+  // Request that resource loading hints be used during pageload.
+  RESOURCE_LOADING_HINTS = 7,
+
   // Insert new enum values here. Keep values sequential to allow looping from
   // NONE+1 to LAST-1. Also add the enum to Previews.Types histogram suffix.
-  LAST = 7,
+  LAST = 8,
 };
 
 typedef std::vector<std::pair<PreviewsType, int>> PreviewsTypeList;
@@ -94,12 +97,14 @@
 bool IsClientLoFiEnabled();
 bool IsAMPRedirectionPreviewEnabled();
 bool IsNoScriptPreviewsEnabled();
+bool IsResourceLoadingHintsEnabled();
 
 // The blacklist version for each preview type.
 int OfflinePreviewsVersion();
 int ClientLoFiVersion();
 int AMPRedirectionPreviewsVersion();
 int NoScriptPreviewsVersion();
+int ResourceLoadingHintsVersion();
 
 // Whether server optimization hints are enabled.
 bool IsOptimizationHintsEnabled();
diff --git a/components/previews/core/previews_features.cc b/components/previews/core/previews_features.cc
index a248816c..5abe799 100644
--- a/components/previews/core/previews_features.cc
+++ b/components/previews/core/previews_features.cc
@@ -52,5 +52,9 @@
 const base::Feature kOptimizationHints{"OptimizationHints",
                                        base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enables the application of the resource loading hints when loading resources.
+const base::Feature kResourceLoadingHints{"ResourceLoadingHints",
+                                          base::FEATURE_DISABLED_BY_DEFAULT};
+
 }  // namespace features
 }  // namespace previews
diff --git a/components/previews/core/previews_features.h b/components/previews/core/previews_features.h
index 61f61f1f..2f6812f 100644
--- a/components/previews/core/previews_features.h
+++ b/components/previews/core/previews_features.h
@@ -17,6 +17,7 @@
 extern const base::Feature kStalePreviewsTimestamp;
 extern const base::Feature kAMPRedirection;
 extern const base::Feature kOptimizationHints;
+extern const base::Feature kResourceLoadingHints;
 
 }  // namespace features
 }  // namespace previews
diff --git a/components/reading_list/core/reading_list_store_unittest.cc b/components/reading_list/core/reading_list_store_unittest.cc
index af55638e..fd5a347 100644
--- a/components/reading_list/core/reading_list_store_unittest.cc
+++ b/components/reading_list/core/reading_list_store_unittest.cc
@@ -13,12 +13,37 @@
 #include "base/run_loop.h"
 #include "base/test/simple_test_clock.h"
 #include "components/reading_list/core/reading_list_model_impl.h"
-#include "components/sync/model/fake_model_type_change_processor.h"
+#include "components/sync/model/mock_model_type_change_processor.h"
 #include "components/sync/model/model_type_store_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
 
+using testing::_;
+
+MATCHER_P3(MatchesSpecifics,
+           expected_title,
+           expected_url,
+           expected_status,
+           "") {
+  const sync_pb::ReadingListSpecifics& specifics =
+      arg->specifics.reading_list();
+  if (specifics.title() != expected_title) {
+    *result_listener << "which has title \"" << specifics.title();
+    return false;
+  }
+  if (specifics.url() != expected_url) {
+    *result_listener << "which has URL " << specifics.url();
+    return false;
+  }
+  if (specifics.status() != expected_status) {
+    *result_listener << "which has unexpected status";
+    return false;
+  }
+  return true;
+}
+
 // Tests that the transition from |entryA| to |entryB| is possible (|possible|
 // is true) or not.
 void ExpectAB(const sync_pb::ReadingListSpecifics& entryA,
@@ -62,82 +87,33 @@
                       syncer::MetadataChangeList* metadata_change_list) = 0;
 };
 
-class TestModelTypeChangeProcessor
-    : public syncer::FakeModelTypeChangeProcessor {
- public:
-  void SetObserver(FakeModelTypeChangeProcessorObserver* observer) {
-    observer_ = observer;
-  }
-
-  void Put(const std::string& client_tag,
-           std::unique_ptr<syncer::EntityData> entity_data,
-           syncer::MetadataChangeList* metadata_change_list) override {
-    observer_->Put(client_tag, std::move(entity_data), metadata_change_list);
-  }
-
-  void Delete(const std::string& client_tag,
-              syncer::MetadataChangeList* metadata_change_list) override {
-    observer_->Delete(client_tag, metadata_change_list);
-  }
-
- private:
-  FakeModelTypeChangeProcessorObserver* observer_;
-};
-
 class ReadingListStoreTest : public testing::Test,
-                             public FakeModelTypeChangeProcessorObserver,
                              public ReadingListStoreDelegate {
  protected:
   ReadingListStoreTest()
       : store_(syncer::ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()) {
+    ON_CALL(processor_, IsTrackingMetadata())
+        .WillByDefault(testing::Return(true));
     ClearState();
     reading_list_store_ = std::make_unique<ReadingListStore>(
         base::BindOnce(&syncer::ModelTypeStoreTestUtil::MoveStoreToCallback,
                        std::move(store_)),
-        CreateModelTypeChangeProcessor());
+        processor_.CreateForwardingProcessor());
     model_ = std::make_unique<ReadingListModelImpl>(nullptr, nullptr, &clock_);
     reading_list_store_->SetReadingListModel(model_.get(), this, &clock_);
 
     base::RunLoop().RunUntilIdle();
   }
 
-  std::unique_ptr<syncer::ModelTypeChangeProcessor>
-  CreateModelTypeChangeProcessor() {
-    auto processor = std::make_unique<TestModelTypeChangeProcessor>();
-    processor->SetObserver(this);
-    return processor;
-  }
-
-  void Put(const std::string& storage_key,
-           std::unique_ptr<syncer::EntityData> entity_data,
-           syncer::MetadataChangeList* metadata_changes) override {
-    put_multimap_.insert(std::make_pair(storage_key, std::move(entity_data)));
-    put_called_++;
-  }
-
-  void Delete(const std::string& storage_key,
-              syncer::MetadataChangeList* metadata_changes) override {
-    delete_set_.insert(storage_key);
-    delete_called_++;
-  }
-
-  void AssertCounts(int put_called,
-                    int delete_called,
-                    int sync_add_called,
+  void AssertCounts(int sync_add_called,
                     int sync_remove_called,
                     int sync_merge_called) {
-    EXPECT_EQ(put_called, put_called_);
-    EXPECT_EQ(delete_called, delete_called_);
     EXPECT_EQ(sync_add_called, sync_add_called_);
     EXPECT_EQ(sync_remove_called, sync_remove_called_);
     EXPECT_EQ(sync_merge_called, sync_merge_called_);
   }
 
   void ClearState() {
-    delete_called_ = 0;
-    put_called_ = 0;
-    delete_set_.clear();
-    put_multimap_.clear();
     sync_add_called_ = 0;
     sync_remove_called_ = 0;
     sync_merge_called_ = 0;
@@ -170,17 +146,15 @@
   // In memory model type store needs a MessageLoop.
   base::MessageLoop message_loop_;
 
+  testing::NiceMock<syncer::MockModelTypeChangeProcessor> processor_;
   std::unique_ptr<syncer::ModelTypeStore> store_;
   std::unique_ptr<ReadingListModelImpl> model_;
   base::SimpleTestClock clock_;
   std::unique_ptr<ReadingListStore> reading_list_store_;
-  int put_called_;
-  int delete_called_;
+
   int sync_add_called_;
   int sync_remove_called_;
   int sync_merge_called_;
-  std::map<std::string, std::unique_ptr<syncer::EntityData>> put_multimap_;
-  std::set<std::string> delete_set_;
   std::map<std::string, bool> sync_added_;
   std::set<std::string> sync_removed_;
   std::map<std::string, bool> sync_merged_;
@@ -195,30 +169,30 @@
                          AdvanceAndGetTime(&clock_));
   entry.SetRead(true, AdvanceAndGetTime(&clock_));
   AdvanceAndGetTime(&clock_);
+  EXPECT_CALL(processor_,
+              Put("http://read.example.com/",
+                  MatchesSpecifics("read title", "http://read.example.com/",
+                                   sync_pb::ReadingListSpecifics::READ),
+                  _));
   reading_list_store_->SaveEntry(entry);
-  AssertCounts(1, 0, 0, 0, 0);
-  syncer::EntityData* data = put_multimap_["http://read.example.com/"].get();
-  const sync_pb::ReadingListSpecifics& specifics =
-      data->specifics.reading_list();
-  EXPECT_EQ(specifics.title(), "read title");
-  EXPECT_EQ(specifics.url(), "http://read.example.com/");
-  EXPECT_EQ(specifics.status(), sync_pb::ReadingListSpecifics::READ);
+  AssertCounts(0, 0, 0);
 }
 
 TEST_F(ReadingListStoreTest, SaveOneUnread) {
   ReadingListEntry entry(GURL("http://unread.example.com/"), "unread title",
                          AdvanceAndGetTime(&clock_));
+  EXPECT_CALL(processor_,
+              Put("http://unread.example.com/",
+                  MatchesSpecifics("unread title", "http://unread.example.com/",
+                                   sync_pb::ReadingListSpecifics::UNSEEN),
+                  _));
   reading_list_store_->SaveEntry(entry);
-  AssertCounts(1, 0, 0, 0, 0);
-  syncer::EntityData* data = put_multimap_["http://unread.example.com/"].get();
-  const sync_pb::ReadingListSpecifics& specifics =
-      data->specifics.reading_list();
-  EXPECT_EQ(specifics.title(), "unread title");
-  EXPECT_EQ(specifics.url(), "http://unread.example.com/");
-  EXPECT_EQ(specifics.status(), sync_pb::ReadingListSpecifics::UNSEEN);
+  AssertCounts(0, 0, 0);
 }
 
 TEST_F(ReadingListStoreTest, SyncMergeOneEntry) {
+  EXPECT_CALL(processor_, Put(_, _, _)).Times(0);
+
   syncer::EntityChangeList remote_input;
   ReadingListEntry entry(GURL("http://read.example.com/"), "read title",
                          AdvanceAndGetTime(&clock_));
@@ -237,13 +211,15 @@
       reading_list_store_->CreateMetadataChangeList());
   auto error = reading_list_store_->MergeSyncData(std::move(metadata_changes),
                                                   remote_input);
-  AssertCounts(0, 0, 1, 0, 0);
+  AssertCounts(1, 0, 0);
   EXPECT_EQ(sync_added_.size(), 1u);
   EXPECT_EQ(sync_added_.count("http://read.example.com/"), 1u);
   EXPECT_EQ(sync_added_["http://read.example.com/"], true);
 }
 
 TEST_F(ReadingListStoreTest, ApplySyncChangesOneAdd) {
+  EXPECT_CALL(processor_, Put(_, _, _)).Times(0);
+
   ReadingListEntry entry(GURL("http://read.example.com/"), "read title",
                          AdvanceAndGetTime(&clock_));
   entry.SetRead(true, AdvanceAndGetTime(&clock_));
@@ -259,7 +235,7 @@
       "http://read.example.com/", data.PassToPtr()));
   auto error = reading_list_store_->ApplySyncChanges(
       reading_list_store_->CreateMetadataChangeList(), add_changes);
-  AssertCounts(0, 0, 1, 0, 0);
+  AssertCounts(1, 0, 0);
   EXPECT_EQ(sync_added_.size(), 1u);
   EXPECT_EQ(sync_added_.count("http://read.example.com/"), 1u);
   EXPECT_EQ(sync_added_["http://read.example.com/"], true);
@@ -279,12 +255,14 @@
   data.client_tag_hash = "http://unread.example.com/";
   *data.specifics.mutable_reading_list() = *specifics;
 
+  EXPECT_CALL(processor_, Put("http://unread.example.com/", _, _));
+
   syncer::EntityChangeList add_changes;
   add_changes.push_back(syncer::EntityChange::CreateAdd(
       "http://unread.example.com/", data.PassToPtr()));
   auto error = reading_list_store_->ApplySyncChanges(
       reading_list_store_->CreateMetadataChangeList(), add_changes);
-  AssertCounts(1, 0, 0, 0, 1);
+  AssertCounts(0, 0, 1);
   EXPECT_EQ(sync_merged_.size(), 1u);
   EXPECT_EQ(sync_merged_.count("http://unread.example.com/"), 1u);
   EXPECT_EQ(sync_merged_["http://unread.example.com/"], true);
@@ -299,7 +277,7 @@
   AdvanceAndGetTime(&clock_);
   model_->AddEntry(GURL("http://unread.example.com/"), "new unread title",
                    reading_list::ADDED_VIA_CURRENT_APP);
-  AssertCounts(0, 0, 0, 0, 0);
+  AssertCounts(0, 0, 0);
 
   std::unique_ptr<sync_pb::ReadingListSpecifics> specifics =
       old_entry.AsReadingListSpecifics();
@@ -307,12 +285,14 @@
   data.client_tag_hash = "http://unread.example.com/";
   *data.specifics.mutable_reading_list() = *specifics;
 
+  EXPECT_CALL(processor_, Put("http://unread.example.com/", _, _));
+
   syncer::EntityChangeList add_changes;
   add_changes.push_back(syncer::EntityChange::CreateAdd(
       "http://unread.example.com/", data.PassToPtr()));
   auto error = reading_list_store_->ApplySyncChanges(
       reading_list_store_->CreateMetadataChangeList(), add_changes);
-  AssertCounts(1, 0, 0, 0, 1);
+  AssertCounts(0, 0, 1);
   EXPECT_EQ(sync_merged_.size(), 1u);
 }
 
@@ -322,7 +302,7 @@
       syncer::EntityChange::CreateDelete("http://read.example.com/"));
   auto error = reading_list_store_->ApplySyncChanges(
       reading_list_store_->CreateMetadataChangeList(), delete_changes);
-  AssertCounts(0, 0, 0, 1, 0);
+  AssertCounts(0, 1, 0);
   EXPECT_EQ(sync_removed_.size(), 1u);
   EXPECT_EQ(sync_removed_.count("http://read.example.com/"), 1u);
 }
diff --git a/components/safe_browsing/common/safe_browsing_prefs.cc b/components/safe_browsing/common/safe_browsing_prefs.cc
index a79b63f..eb70226 100644
--- a/components/safe_browsing/common/safe_browsing_prefs.cc
+++ b/components/safe_browsing/common/safe_browsing_prefs.cc
@@ -483,12 +483,15 @@
 
   std::vector<GURL> login_urls;
   GetPasswordProtectionLoginURLsPref(prefs, &login_urls);
-  if (login_urls.empty())
-    return false;
+  return MatchesURLList(url, login_urls);
+}
 
-  GURL simple_url = GetSimplifiedURL(url);
-  for (const GURL& login_url : login_urls) {
-    if (GetSimplifiedURL(login_url) == simple_url) {
+bool MatchesURLList(const GURL& target_url, const std::vector<GURL> url_list) {
+  if (url_list.empty() || !target_url.is_valid())
+    return false;
+  GURL simple_target_url = GetSimplifiedURL(target_url);
+  for (const GURL& url : url_list) {
+    if (GetSimplifiedURL(url) == simple_target_url) {
       return true;
     }
   }
diff --git a/components/safe_browsing/common/safe_browsing_prefs.h b/components/safe_browsing/common/safe_browsing_prefs.h
index f7a2fc34..3bc20af2 100644
--- a/components/safe_browsing/common/safe_browsing_prefs.h
+++ b/components/safe_browsing/common/safe_browsing_prefs.h
@@ -247,6 +247,9 @@
 bool MatchesPasswordProtectionChangePasswordURL(const GURL& url,
                                                 const PrefService& prefs);
 
+// Helper function to match a |target_url| against |url_list|.
+bool MatchesURLList(const GURL& target_url, const std::vector<GURL> url_list);
+
 }  // namespace safe_browsing
 
 #endif  // COMPONENTS_SAFE_BROWSING_COMMON_SAFE_BROWSING_PREFS_H_
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.cc b/components/signin/core/browser/gaia_cookie_manager_service.cc
index b308c7e..1f74366 100644
--- a/components/signin/core/browser/gaia_cookie_manager_service.cc
+++ b/components/signin/core/browser/gaia_cookie_manager_service.cc
@@ -26,13 +26,15 @@
 #include "net/base/load_flags.h"
 #include "net/http/http_status_code.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
-#include "net/url_request/url_fetcher.h"
-#include "net/url_request/url_fetcher_delegate.h"
+#include "services/network/public/cpp/resource_request.h"
+#include "services/network/public/cpp/shared_url_loader_factory.h"
+#include "services/network/public/cpp/simple_url_loader.h"
 
 namespace {
 
-// In case of an error while fetching using the GaiaAuthFetcher or URLFetcher,
-// retry with exponential backoff. Try up to 7 times within 15 minutes.
+// In case of an error while fetching using the GaiaAuthFetcher or
+// SimpleURLLoader, retry with exponential backoff. Try up to 7 times within 15
+// minutes.
 const net::BackoffEntry::Policy kBackoffPolicy = {
     // Number of initial errors (in sequence) to ignore before applying
     // exponential back-off rules.
@@ -140,7 +142,7 @@
 }
 
 bool GaiaCookieManagerService::ExternalCcResultFetcher::IsRunning() {
-  return helper_->gaia_auth_fetcher_ || fetchers_.size() > 0u ||
+  return helper_->gaia_auth_fetcher_ || loaders_.size() > 0u ||
          timer_.IsRunning();
 }
 
@@ -174,9 +176,9 @@
       if (dict->GetString("carryBackToken", &token) &&
           dict->GetString("url", &url)) {
         results_[token] = "null";
-        net::URLFetcher* fetcher = CreateFetcher(GURL(url)).release();
-        fetchers_[fetcher->GetOriginalURL()] = std::make_pair(token, fetcher);
-        fetcher->Start();
+        network::SimpleURLLoader* loader =
+            CreateAndStartLoader(GURL(url)).release();
+        loaders_[loader] = token;
       }
     }
   }
@@ -199,8 +201,8 @@
   GetCheckConnectionInfoCompleted(false);
 }
 
-std::unique_ptr<net::URLFetcher>
-GaiaCookieManagerService::ExternalCcResultFetcher::CreateFetcher(
+std::unique_ptr<network::SimpleURLLoader>
+GaiaCookieManagerService::ExternalCcResultFetcher::CreateAndStartLoader(
     const GURL& url) {
   net::NetworkTrafficAnnotationTag traffic_annotation =
       net::DefineNetworkTrafficAnnotation(
@@ -229,47 +231,63 @@
               "support for child accounts). It makes sense to control top "
               "level features that use the GaiaCookieManager."
           })");
-  std::unique_ptr<net::URLFetcher> fetcher = net::URLFetcher::Create(
-      0, url, net::URLFetcher::GET, this, traffic_annotation);
-  fetcher->SetRequestContext(helper_->request_context());
-  fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
-                        net::LOAD_DO_NOT_SAVE_COOKIES);
-  data_use_measurement::DataUseUserData::AttachToFetcher(
-      fetcher.get(), data_use_measurement::DataUseUserData::SIGNIN);
+
+  auto request = std::make_unique<network::ResourceRequest>();
+  request->url = url;
+  request->load_flags =
+      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  // TODO(https://crbug.com/808498) re-add data use measurement once
+  // SimpleURLLoader supports it: data_use_measurement::DataUseUserData::SIGNIN
+
+  std::unique_ptr<network::SimpleURLLoader> loader =
+      network::SimpleURLLoader::Create(std::move(request), traffic_annotation);
 
   // Fetchers are sometimes cancelled because a network change was detected,
   // especially at startup and after sign-in on ChromeOS.
-  fetcher->SetAutomaticallyRetryOnNetworkChanges(1);
-  return fetcher;
+  loader->SetRetryOptions(1, network::SimpleURLLoader::RETRY_ON_NETWORK_CHANGE);
+
+  loader->DownloadToStringOfUnboundedSizeUntilCrashAndDie(
+      helper_->GetURLLoaderFactory().get(),
+      base::BindOnce(&ExternalCcResultFetcher::OnURLLoadComplete,
+                     base::Unretained(this), loader.get()));
+
+  return loader;
 }
 
-void GaiaCookieManagerService::ExternalCcResultFetcher::OnURLFetchComplete(
-    const net::URLFetcher* source) {
-  const GURL& url = source->GetOriginalURL();
-  const net::URLRequestStatus& status = source->GetStatus();
-  int response_code = source->GetResponseCode();
-  if (status.is_success() && response_code == net::HTTP_OK &&
-      fetchers_.count(url) > 0) {
-    std::string data;
-    source->GetResponseAsString(&data);
-    // Only up to the first 16 characters of the response are important to GAIA.
-    // Truncate if needed to keep amount data sent back to GAIA down.
-    if (data.size() > 16)
-      data.resize(16);
-    results_[fetchers_[url].first] = data;
+void GaiaCookieManagerService::ExternalCcResultFetcher::OnURLLoadComplete(
+    const network::SimpleURLLoader* source,
+    std::unique_ptr<std::string> body) {
+  if (source->NetError() != net::OK || !source->ResponseInfo() ||
+      !source->ResponseInfo()->headers ||
+      source->ResponseInfo()->headers->response_code() != net::HTTP_OK) {
+    return;
+  }
 
-    // Clean up tracking of this fetcher.  The rest will be cleaned up after
-    // the timer expires in CleanupTransientState().
-    DCHECK_EQ(source, fetchers_[url].second);
-    fetchers_.erase(url);
-    delete source;
+  LoaderToToken::iterator it = loaders_.find(source);
+  if (it == loaders_.end())
+    return;
 
-    // If all expected responses have been received, cancel the timer and
-    // report the result.
-    if (fetchers_.empty()) {
-      CleanupTransientState();
-      GetCheckConnectionInfoCompleted(true);
-    }
+  std::string data;
+  if (body)
+    data = std::move(*body);
+
+  // Only up to the first 16 characters of the response are important to GAIA.
+  // Truncate if needed to keep amount data sent back to GAIA down.
+  if (data.size() > 16)
+    data.resize(16);
+  results_[it->second] = data;
+
+  // Clean up tracking of this fetcher.  The rest will be cleaned up after
+  // the timer expires in CleanupTransientState().
+  DCHECK_EQ(source, it->first);
+  loaders_.erase(it);
+  delete source;
+
+  // If all expected responses have been received, cancel the timer and
+  // report the result.
+  if (loaders_.empty()) {
+    CleanupTransientState();
+    GetCheckConnectionInfoCompleted(true);
   }
 }
 
@@ -284,11 +302,10 @@
   timer_.Stop();
   helper_->gaia_auth_fetcher_.reset();
 
-  for (URLToTokenAndFetcher::const_iterator it = fetchers_.begin();
-       it != fetchers_.end(); ++it) {
-    delete it->second.second;
+  for (const auto& loader_token_pair : loaders_) {
+    delete loader_token_pair.first;
   }
-  fetchers_.clear();
+  loaders_.clear();
 }
 
 void GaiaCookieManagerService::ExternalCcResultFetcher::
@@ -490,6 +507,11 @@
   fetcher_timer_.Stop();
 }
 
+scoped_refptr<network::SharedURLLoaderFactory>
+GaiaCookieManagerService::GetURLLoaderFactory() {
+  return signin_client_->GetURLLoaderFactory();
+}
+
 std::string GaiaCookieManagerService::GetSourceForRequest(
     const GaiaCookieManagerService::GaiaCookieRequest& request) {
   std::string source = request.source().empty() ? GetDefaultSourceForRequest()
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.h b/components/signin/core/browser/gaia_cookie_manager_service.h
index d8c3cbc5..31a08a6 100644
--- a/components/signin/core/browser/gaia_cookie_manager_service.h
+++ b/components/signin/core/browser/gaia_cookie_manager_service.h
@@ -20,15 +20,15 @@
 #include "google_apis/gaia/gaia_auth_util.h"
 #include "google_apis/gaia/ubertoken_fetcher.h"
 #include "net/base/backoff_entry.h"
-#include "net/url_request/url_fetcher_delegate.h"
 
 class GaiaAuthFetcher;
 class GaiaCookieRequest;
 class GoogleServiceAuthError;
 class OAuth2TokenService;
 
-namespace net {
-class URLFetcher;
+namespace network {
+class SharedURLLoaderFactory;
+class SimpleURLLoader;
 }
 
 // Merges a Google account known to Chrome into the cookie jar.  When merging
@@ -108,13 +108,11 @@
 
   // Class to retrieve the external connection check results from gaia.
   // Declared publicly for unit tests.
-  class ExternalCcResultFetcher : public GaiaAuthConsumer,
-                                  public net::URLFetcherDelegate {
+  class ExternalCcResultFetcher : public GaiaAuthConsumer {
    public:
-    // Maps connection URLs, as returned by StartGetCheckConnectionInfo() to
-    // token and URLFetcher used to fetch the URL.
-    typedef std::map<GURL, std::pair<std::string, net::URLFetcher*>>
-        URLToTokenAndFetcher;
+    // Maps connection check SimpleURLLoader to corresponding token.
+    typedef std::map<const network::SimpleURLLoader*, std::string>
+        LoaderToToken;
 
     // Maps tokens to the fetched result for that token.
     typedef std::map<std::string, std::string> ResultMap;
@@ -132,8 +130,8 @@
     // Are external URLs still being checked?
     bool IsRunning();
 
-    // Returns a copy of the internal token to fetcher map.
-    URLToTokenAndFetcher get_fetcher_map_for_testing() { return fetchers_; }
+    // Returns a copy of the internal loader to token map.
+    LoaderToToken get_loader_map_for_testing() { return loaders_; }
 
     // Simulate a timeout for tests.
     void TimeoutForTests();
@@ -144,11 +142,13 @@
     void OnGetCheckConnectionInfoError(
         const GoogleServiceAuthError& error) override;
 
-    // Creates and initializes a URL fetcher for doing a connection check.
-    std::unique_ptr<net::URLFetcher> CreateFetcher(const GURL& url);
+    // Creates and initializes a loader for doing a connection check.
+    std::unique_ptr<network::SimpleURLLoader> CreateAndStartLoader(
+        const GURL& url);
 
-    // Overridden from URLFetcherDelgate.
-    void OnURLFetchComplete(const net::URLFetcher* source) override;
+    // Called back from SimpleURLLoader.
+    void OnURLLoadComplete(const network::SimpleURLLoader* source,
+                           std::unique_ptr<std::string> body);
 
     // Any fetches still ongoing after this call are considered timed out.
     void Timeout();
@@ -159,7 +159,7 @@
 
     GaiaCookieManagerService* helper_;
     base::OneShotTimer timer_;
-    URLToTokenAndFetcher fetchers_;
+    LoaderToToken loaders_;
     ResultMap results_;
     base::Time m_external_cc_result_start_time_;
 
@@ -237,6 +237,8 @@
     return signin_client_->GetURLRequestContext();
   }
 
+  scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory();
+
   // Returns the source value to use for GaiaFetcher requests.  This is
   // virtual to allow tests and fake classes to override.
   virtual std::string GetSourceForRequest(
diff --git a/components/signin/core/browser/gaia_cookie_manager_service_unittest.cc b/components/signin/core/browser/gaia_cookie_manager_service_unittest.cc
index 1b49ff2..8713ea5 100644
--- a/components/signin/core/browser/gaia_cookie_manager_service_unittest.cc
+++ b/components/signin/core/browser/gaia_cookie_manager_service_unittest.cc
@@ -28,6 +28,7 @@
 #include "google_apis/gaia/gaia_urls.h"
 #include "net/url_request/test_url_fetcher_factory.h"
 #include "net/url_request/url_request_test_util.h"
+#include "services/network/test/test_url_loader_factory.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -164,14 +165,15 @@
     fetcher->delegate()->OnURLFetchComplete(fetcher);
   }
 
-  void SimulateGetCheckConnctionInfoResult(net::URLFetcher* fetcher,
-                                           const std::string& result) {
-    net::TestURLFetcher* test_fetcher =
-        static_cast<net::TestURLFetcher*>(fetcher);
-    test_fetcher->set_status(net::URLRequestStatus());
-    test_fetcher->set_response_code(200);
-    test_fetcher->SetResponseString(result);
-    test_fetcher->delegate()->OnURLFetchComplete(fetcher);
+  void SimulateGetCheckConnectionInfoResult(const std::string& url,
+                                            const std::string& result) {
+    signin_client_->test_url_loader_factory()->AddResponse(url, result);
+    base::RunLoop().RunUntilIdle();
+  }
+
+  bool IsLoadPending(const std::string& url) {
+    return signin_client_->test_url_loader_factory()->IsPending(
+        GURL(url).spec());
   }
 
   const GoogleServiceAuthError& no_error() { return no_error_; }
@@ -713,18 +715,16 @@
       " {\"carryBackToken\": \"bl\", \"url\": \"http://www.bl.com\"}]");
 
   // Simulate responses for the two connection URLs.
-  GaiaCookieManagerService::ExternalCcResultFetcher::URLToTokenAndFetcher
-      fetchers = result_fetcher.get_fetcher_map_for_testing();
-  ASSERT_EQ(2u, fetchers.size());
-  ASSERT_EQ(1u, fetchers.count(GURL("http://www.yt.com")));
-  ASSERT_EQ(1u, fetchers.count(GURL("http://www.bl.com")));
+  GaiaCookieManagerService::ExternalCcResultFetcher::LoaderToToken loaders =
+      result_fetcher.get_loader_map_for_testing();
+  ASSERT_EQ(2u, loaders.size());
+  ASSERT_TRUE(IsLoadPending("http://www.yt.com"));
+  ASSERT_TRUE(IsLoadPending("http://www.bl.com"));
 
   ASSERT_EQ("bl:null,yt:null", result_fetcher.GetExternalCcResult());
-  SimulateGetCheckConnctionInfoResult(
-      fetchers[GURL("http://www.yt.com")].second, "yt_result");
+  SimulateGetCheckConnectionInfoResult("http://www.yt.com", "yt_result");
   ASSERT_EQ("bl:null,yt:yt_result", result_fetcher.GetExternalCcResult());
-  SimulateGetCheckConnctionInfoResult(
-      fetchers[GURL("http://www.bl.com")].second, "bl_result");
+  SimulateGetCheckConnectionInfoResult("http://www.bl.com", "bl_result");
   ASSERT_EQ("bl:bl_result,yt:yt_result", result_fetcher.GetExternalCcResult());
 }
 
@@ -742,23 +742,22 @@
       "[{\"carryBackToken\": \"yt\", \"url\": \"http://www.yt.com\"},"
       " {\"carryBackToken\": \"bl\", \"url\": \"http://www.bl.com\"}]");
 
-  GaiaCookieManagerService::ExternalCcResultFetcher::URLToTokenAndFetcher
-      fetchers = result_fetcher.get_fetcher_map_for_testing();
-  ASSERT_EQ(2u, fetchers.size());
-  ASSERT_EQ(1u, fetchers.count(GURL("http://www.yt.com")));
-  ASSERT_EQ(1u, fetchers.count(GURL("http://www.bl.com")));
+  GaiaCookieManagerService::ExternalCcResultFetcher::LoaderToToken loaders =
+      result_fetcher.get_loader_map_for_testing();
+  ASSERT_EQ(2u, loaders.size());
+  ASSERT_TRUE(IsLoadPending("http://www.yt.com"));
+  ASSERT_TRUE(IsLoadPending("http://www.bl.com"));
 
   // Simulate response only for "yt".
   ASSERT_EQ("bl:null,yt:null", result_fetcher.GetExternalCcResult());
-  SimulateGetCheckConnctionInfoResult(
-      fetchers[GURL("http://www.yt.com")].second, "yt_result");
+  SimulateGetCheckConnectionInfoResult("http://www.yt.com", "yt_result");
   ASSERT_EQ("bl:null,yt:yt_result", result_fetcher.GetExternalCcResult());
 
   // Now timeout.
   result_fetcher.TimeoutForTests();
   ASSERT_EQ("bl:null,yt:yt_result", result_fetcher.GetExternalCcResult());
-  fetchers = result_fetcher.get_fetcher_map_for_testing();
-  ASSERT_EQ(0u, fetchers.size());
+  loaders = result_fetcher.get_loader_map_for_testing();
+  ASSERT_EQ(0u, loaders.size());
 }
 
 TEST_F(GaiaCookieManagerServiceTest, ExternalCcResultFetcherTruncate) {
@@ -774,14 +773,14 @@
       fetcher,
       "[{\"carryBackToken\": \"yt\", \"url\": \"http://www.yt.com\"}]");
 
-  GaiaCookieManagerService::ExternalCcResultFetcher::URLToTokenAndFetcher
-      fetchers = result_fetcher.get_fetcher_map_for_testing();
-  ASSERT_EQ(1u, fetchers.size());
-  ASSERT_EQ(1u, fetchers.count(GURL("http://www.yt.com")));
+  GaiaCookieManagerService::ExternalCcResultFetcher::LoaderToToken loaders =
+      result_fetcher.get_loader_map_for_testing();
+  ASSERT_EQ(1u, loaders.size());
+  ASSERT_TRUE(IsLoadPending("http://www.yt.com"));
 
   // Simulate response for "yt" with a string that is too long.
-  SimulateGetCheckConnctionInfoResult(
-      fetchers[GURL("http://www.yt.com")].second, "1234567890123456trunc");
+  SimulateGetCheckConnectionInfoResult("http://www.yt.com",
+                                       "1234567890123456trunc");
   ASSERT_EQ("yt:1234567890123456", result_fetcher.GetExternalCcResult());
 }
 
@@ -802,10 +801,10 @@
       "[{\"carryBackToken\": \"bl\", \"url\": \"http://www.bl.com\"}]");
   GaiaCookieManagerService::ExternalCcResultFetcher* result_fetcher =
       helper.external_cc_result_fetcher_for_testing();
-  GaiaCookieManagerService::ExternalCcResultFetcher::URLToTokenAndFetcher
-      fetchers = result_fetcher->get_fetcher_map_for_testing();
-  ASSERT_EQ(1u, fetchers.size());
-  ASSERT_EQ(1u, fetchers.count(GURL("http://www.bl.com")));
+  GaiaCookieManagerService::ExternalCcResultFetcher::LoaderToToken loaders =
+      result_fetcher->get_loader_map_for_testing();
+  ASSERT_EQ(1u, loaders.size());
+  ASSERT_TRUE(IsLoadPending("http://www.bl.com"));
 }
 
 TEST_F(GaiaCookieManagerServiceTest, UbertokenSuccessFetchesExternalCCOnce) {
diff --git a/components/signin/core/browser/signin_header_helper.cc b/components/signin/core/browser/signin_header_helper.cc
index 720d726..b5ecb9349 100644
--- a/components/signin/core/browser/signin_header_helper.cc
+++ b/components/signin/core/browser/signin_header_helper.cc
@@ -65,6 +65,27 @@
 DiceResponseParams::EnableSyncInfo::EnableSyncInfo(const EnableSyncInfo&) =
     default;
 
+RequestAdapter::RequestAdapter(net::URLRequest* request) : request_(request) {}
+
+RequestAdapter::~RequestAdapter() = default;
+
+const GURL& RequestAdapter::GetUrl() {
+  return request_->url();
+}
+
+bool RequestAdapter::HasHeader(const std::string& name) {
+  return request_->extra_request_headers().HasHeader(name);
+}
+
+void RequestAdapter::RemoveRequestHeaderByName(const std::string& name) {
+  return request_->RemoveRequestHeaderByName(name);
+}
+
+void RequestAdapter::SetExtraHeaderByName(const std::string& name,
+                                          const std::string& value) {
+  return request_->SetExtraRequestHeaderByName(name, value, false);
+}
+
 std::string BuildMirrorRequestCookieIfPossible(
     const GURL& url,
     const std::string& account_id,
@@ -76,7 +97,7 @@
 }
 
 bool SigninHeaderHelper::AppendOrRemoveRequestHeader(
-    net::URLRequest* request,
+    RequestAdapter* request,
     const GURL& redirect_url,
     const char* header_name,
     const std::string& header_value) {
@@ -84,15 +105,14 @@
     // If the request is being redirected, and it has the account consistency
     // header, and current url is a Google URL, and the redirected one is not,
     // remove the header.
-    if (!redirect_url.is_empty() &&
-        request->extra_request_headers().HasHeader(header_name) &&
-        IsUrlEligibleForRequestHeader(request->url()) &&
+    if (!redirect_url.is_empty() && request->HasHeader(header_name) &&
+        IsUrlEligibleForRequestHeader(request->GetUrl()) &&
         !IsUrlEligibleForRequestHeader(redirect_url)) {
       request->RemoveRequestHeaderByName(header_name);
     }
     return false;
   }
-  request->SetExtraRequestHeaderByName(header_name, header_value, false);
+  request->SetExtraHeaderByName(header_name, header_value);
   return true;
 }
 
@@ -134,13 +154,13 @@
 }
 
 void AppendOrRemoveMirrorRequestHeader(
-    net::URLRequest* request,
+    RequestAdapter* request,
     const GURL& redirect_url,
     const std::string& account_id,
     AccountConsistencyMethod account_consistency,
     const content_settings::CookieSettings* cookie_settings,
     int profile_mode_mask) {
-  const GURL& url = redirect_url.is_empty() ? request->url() : redirect_url;
+  const GURL& url = redirect_url.is_empty() ? request->GetUrl() : redirect_url;
   ChromeConnectedHeaderHelper chrome_connected_helper(account_consistency);
   std::string chrome_connected_header_value;
   if (chrome_connected_helper.ShouldBuildRequestHeader(url, cookie_settings)) {
@@ -153,7 +173,7 @@
 }
 
 bool AppendOrRemoveDiceRequestHeader(
-    net::URLRequest* request,
+    RequestAdapter* request,
     const GURL& redirect_url,
     const std::string& account_id,
     bool sync_enabled,
@@ -161,7 +181,7 @@
     AccountConsistencyMethod account_consistency,
     const content_settings::CookieSettings* cookie_settings) {
 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
-  const GURL& url = redirect_url.is_empty() ? request->url() : redirect_url;
+  const GURL& url = redirect_url.is_empty() ? request->GetUrl() : redirect_url;
   DiceHeaderHelper dice_helper(
       !account_id.empty() && sync_has_auth_error && sync_enabled,
       account_consistency);
diff --git a/components/signin/core/browser/signin_header_helper.h b/components/signin/core/browser/signin_header_helper.h
index 7e10bf1..41b321be 100644
--- a/components/signin/core/browser/signin_header_helper.h
+++ b/components/signin/core/browser/signin_header_helper.h
@@ -145,12 +145,30 @@
   DISALLOW_COPY_AND_ASSIGN(DiceResponseParams);
 };
 
+class RequestAdapter {
+ public:
+  explicit RequestAdapter(net::URLRequest* request);
+  virtual ~RequestAdapter();
+
+  virtual const GURL& GetUrl();
+  virtual bool HasHeader(const std::string& name);
+  virtual void RemoveRequestHeaderByName(const std::string& name);
+  virtual void SetExtraHeaderByName(const std::string& name,
+                                    const std::string& value);
+
+ protected:
+  net::URLRequest* const request_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(RequestAdapter);
+};
+
 // Base class for managing the signin headers (Dice and Chrome-Connected).
 class SigninHeaderHelper {
  public:
   // Appends or remove the header to a network request if necessary.
   // Returns whether the request has the request header.
-  bool AppendOrRemoveRequestHeader(net::URLRequest* request,
+  bool AppendOrRemoveRequestHeader(RequestAdapter* request,
                                    const GURL& redirect_url,
                                    const char* header_name,
                                    const std::string& header_value);
@@ -192,7 +210,7 @@
 // the exception of requests from gaia webview.
 // Removes the header in case it should not be transfered to a redirected url.
 void AppendOrRemoveMirrorRequestHeader(
-    net::URLRequest* request,
+    RequestAdapter* request,
     const GURL& redirect_url,
     const std::string& account_id,
     AccountConsistencyMethod account_consistency,
@@ -204,7 +222,7 @@
 // Removes the header in case it should not be transfered to a redirected url.
 // Returns whether the request has the Dice request header.
 bool AppendOrRemoveDiceRequestHeader(
-    net::URLRequest* request,
+    RequestAdapter* request,
     const GURL& redirect_url,
     const std::string& account_id,
     bool sync_enabled,
diff --git a/components/signin/core/browser/signin_header_helper_unittest.cc b/components/signin/core/browser/signin_header_helper_unittest.cc
index 870bd70..8c98342b 100644
--- a/components/signin/core/browser/signin_header_helper_unittest.cc
+++ b/components/signin/core/browser/signin_header_helper_unittest.cc
@@ -58,11 +58,12 @@
     std::unique_ptr<net::URLRequest> url_request =
         url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr,
                                            TRAFFIC_ANNOTATION_FOR_TESTS);
+    RequestAdapter request_adapter(url_request.get());
     AppendOrRemoveMirrorRequestHeader(
-        url_request.get(), GURL(), account_id, account_consistency_,
+        &request_adapter, GURL(), account_id, account_consistency_,
         cookie_settings_.get(), PROFILE_MODE_DEFAULT);
     AppendOrRemoveDiceRequestHeader(
-        url_request.get(), GURL(), account_id, sync_enabled_,
+        &request_adapter, GURL(), account_id, sync_enabled_,
         sync_has_auth_error_, account_consistency_, cookie_settings_.get());
     return url_request;
   }
@@ -182,8 +183,9 @@
       url_request_context_.CreateRequest(GURL("https://www.google.com"),
                                          net::DEFAULT_PRIORITY, nullptr,
                                          TRAFFIC_ANNOTATION_FOR_TESTS);
+  RequestAdapter request_adapter(url_request.get());
   AppendOrRemoveMirrorRequestHeader(
-      url_request.get(), GURL(), "0123456789", account_consistency_,
+      &request_adapter, GURL(), "0123456789", account_consistency_,
       cookie_settings_.get(), PROFILE_MODE_DEFAULT);
   CheckAccountConsistencyHeaderRequest(url_request.get(),
                                        kChromeConnectedHeader, "");
@@ -196,8 +198,9 @@
       url_request_context_.CreateRequest(GURL("https://www.google.com"),
                                          net::DEFAULT_PRIORITY, nullptr,
                                          TRAFFIC_ANNOTATION_FOR_TESTS);
+  RequestAdapter request_adapter(url_request.get());
   AppendOrRemoveMirrorRequestHeader(
-      url_request.get(), GURL(), "0123456789", account_consistency_,
+      &request_adapter, GURL(), "0123456789", account_consistency_,
       cookie_settings_.get(), PROFILE_MODE_DEFAULT);
   CheckAccountConsistencyHeaderRequest(
       url_request.get(), kChromeConnectedHeader,
@@ -453,8 +456,9 @@
   std::unique_ptr<net::URLRequest> url_request =
       url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr,
                                          TRAFFIC_ANNOTATION_FOR_TESTS);
+  RequestAdapter request_adapter(url_request.get());
   AppendOrRemoveMirrorRequestHeader(
-      url_request.get(), redirect_url, account_id, account_consistency_,
+      &request_adapter, redirect_url, account_id, account_consistency_,
       cookie_settings_.get(), PROFILE_MODE_DEFAULT);
   EXPECT_TRUE(
       url_request->extra_request_headers().HasHeader(kChromeConnectedHeader));
@@ -470,8 +474,9 @@
   std::unique_ptr<net::URLRequest> url_request =
       url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr,
                                          TRAFFIC_ANNOTATION_FOR_TESTS);
+  RequestAdapter request_adapter(url_request.get());
   AppendOrRemoveMirrorRequestHeader(
-      url_request.get(), redirect_url, account_id, account_consistency_,
+      &request_adapter, redirect_url, account_id, account_consistency_,
       cookie_settings_.get(), PROFILE_MODE_DEFAULT);
   EXPECT_FALSE(
       url_request->extra_request_headers().HasHeader(kChromeConnectedHeader));
@@ -490,8 +495,9 @@
                                          TRAFFIC_ANNOTATION_FOR_TESTS);
   url_request->SetExtraRequestHeaderByName(kChromeConnectedHeader, fake_header,
                                            false);
+  RequestAdapter request_adapter(url_request.get());
   AppendOrRemoveMirrorRequestHeader(
-      url_request.get(), redirect_url, account_id, account_consistency_,
+      &request_adapter, redirect_url, account_id, account_consistency_,
       cookie_settings_.get(), PROFILE_MODE_DEFAULT);
   std::string header;
   EXPECT_TRUE(url_request->extra_request_headers().GetHeader(
diff --git a/components/signin/core/browser/signin_manager.cc b/components/signin/core/browser/signin_manager.cc
index afc3a99..ef85f96 100644
--- a/components/signin/core/browser/signin_manager.cc
+++ b/components/signin/core/browser/signin_manager.cc
@@ -393,8 +393,7 @@
 }
 
 void SigninManager::MergeSigninCredentialIntoCookieJar() {
-#if !defined(OS_IOS)
-  if (account_consistency_ != signin::AccountConsistencyMethod::kMirror)
+  if (account_consistency_ == signin::AccountConsistencyMethod::kMirror)
     return;
 
   if (!IsAuthenticated())
@@ -402,7 +401,6 @@
 
   cookie_manager_service_->AddAccountToCookie(GetAuthenticatedAccountId(),
                                               "ChromiumSigninManager");
-#endif  // !defined(OS_IOS)
 }
 
 void SigninManager::CompletePendingSignin() {
diff --git a/components/sync/device_info/device_info_sync_bridge_unittest.cc b/components/sync/device_info/device_info_sync_bridge_unittest.cc
index 0d3c20f..e9c937cf 100644
--- a/components/sync/device_info/device_info_sync_bridge_unittest.cc
+++ b/components/sync/device_info/device_info_sync_bridge_unittest.cc
@@ -17,7 +17,6 @@
 #include "components/sync/model/data_batch.h"
 #include "components/sync/model/data_type_error_handler_mock.h"
 #include "components/sync/model/entity_data.h"
-#include "components/sync/model/fake_model_type_change_processor.h"
 #include "components/sync/model/metadata_batch.h"
 #include "components/sync/model/mock_model_type_change_processor.h"
 #include "components/sync/model/model_type_store_test_util.h"
diff --git a/components/sync/driver/startup_controller.cc b/components/sync/driver/startup_controller.cc
index 3263325..710f68b4a 100644
--- a/components/sync/driver/startup_controller.cc
+++ b/components/sync/driver/startup_controller.cc
@@ -57,12 +57,15 @@
 
 }  // namespace
 
-StartupController::StartupController(const SyncPrefs* sync_prefs,
-                                     base::RepeatingCallback<bool()> can_start,
-                                     base::RepeatingClosure start_engine)
+StartupController::StartupController(
+    const SyncPrefs* sync_prefs,
+    base::RepeatingCallback<ModelTypeSet()> get_preferred_data_types,
+    base::RepeatingCallback<bool()> can_start,
+    base::RepeatingClosure start_engine)
     : sync_prefs_(sync_prefs),
-      can_start_(std::move(can_start)),
-      start_engine_(std::move(start_engine)),
+      get_preferred_data_types_callback_(std::move(get_preferred_data_types)),
+      can_start_callback_(std::move(can_start)),
+      start_engine_callback_(std::move(start_engine)),
       bypass_setup_complete_(false),
       received_start_request_(false),
       setup_in_progress_(false),
@@ -70,14 +73,13 @@
 
 StartupController::~StartupController() {}
 
-void StartupController::Reset(const ModelTypeSet& registered_types) {
+void StartupController::Reset() {
   received_start_request_ = false;
   bypass_setup_complete_ = false;
   start_up_time_ = base::Time();
   start_engine_time_ = base::Time();
   // Don't let previous timers affect us post-reset.
   weak_factory_.InvalidateWeakPtrs();
-  registered_types_ = registered_types;
 }
 
 void StartupController::SetSetupInProgress(bool setup_in_progress) {
@@ -94,7 +96,7 @@
   }
 
   if (deferred_option == STARTUP_DEFERRED && IsDeferredStartupEnabled() &&
-      sync_prefs_->GetPreferredDataTypes(registered_types_).Has(SESSIONS)) {
+      get_preferred_data_types_callback_.Run().Has(SESSIONS)) {
     if (first_start) {
       base::SequencedTaskRunnerHandle::Get()->PostDelayedTask(
           FROM_HERE,
@@ -107,12 +109,12 @@
 
   if (start_engine_time_.is_null()) {
     start_engine_time_ = base::Time::Now();
-    start_engine_.Run();
+    start_engine_callback_.Run();
   }
 }
 
 void StartupController::TryStart() {
-  if (!can_start_.Run()) {
+  if (!can_start_callback_.Run()) {
     return;
   }
 
@@ -158,12 +160,12 @@
   TryStart();
 }
 
-std::string StartupController::GetEngineInitializationStateString() const {
+StartupController::State StartupController::GetState() const {
   if (!start_engine_time_.is_null())
-    return "Started";
+    return State::STARTED;
   if (!start_up_time_.is_null())
-    return "Deferred";
-  return "Not started";
+    return State::STARTING_DEFERRED;
+  return State::NOT_STARTED;
 }
 
 void StartupController::OnDataTypeRequestsSyncStartup(ModelType type) {
diff --git a/components/sync/driver/startup_controller.h b/components/sync/driver/startup_controller.h
index eb4988b4..ccce7aad 100644
--- a/components/sync/driver/startup_controller.h
+++ b/components/sync/driver/startup_controller.h
@@ -5,8 +5,6 @@
 #ifndef COMPONENTS_SYNC_DRIVER_STARTUP_CONTROLLER_H_
 #define COMPONENTS_SYNC_DRIVER_STARTUP_CONTROLLER_H_
 
-#include <string>
-
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
@@ -20,9 +18,22 @@
 // pertaining to initialization of the SyncEngine.
 class StartupController {
  public:
-  StartupController(const SyncPrefs* sync_prefs,
-                    base::RepeatingCallback<bool()> can_start,
-                    base::RepeatingClosure start_engine);
+  enum class State {
+    // Startup has not been triggered yet.
+    NOT_STARTED,
+    // Startup has been triggered but is deferred. The actual startup will
+    // happen once the deferred delay expires (or when immediate startup is
+    // requested, whichever happens first).
+    STARTING_DEFERRED,
+    // Startup has happened, i.e. |start_engine| has been run.
+    STARTED
+  };
+
+  StartupController(
+      const SyncPrefs* sync_prefs,
+      base::RepeatingCallback<ModelTypeSet()> get_preferred_data_types,
+      base::RepeatingCallback<bool()> can_start,
+      base::RepeatingClosure start_engine);
   ~StartupController();
 
   // Starts up sync if it is requested by the user and preconditions are met.
@@ -45,14 +56,15 @@
   // touch values that are explicitly set and reset by higher layers to
   // tell this class whether a setup UI dialog is being shown to the user.
   // See setup_in_progress_.
-  void Reset(const ModelTypeSet& registered_types);
+  void Reset();
 
   // Sets the setup in progress flag and tries to start sync if it's true.
   void SetSetupInProgress(bool setup_in_progress);
 
+  State GetState() const;
+
   bool IsSetupInProgress() const { return setup_in_progress_; }
   base::Time start_engine_time() const { return start_engine_time_; }
-  std::string GetEngineInitializationStateString() const;
 
  private:
   enum StartUpDeferredOption { STARTUP_DEFERRED, STARTUP_IMMEDIATE };
@@ -65,16 +77,16 @@
 
   const SyncPrefs* sync_prefs_;
 
+  const base::RepeatingCallback<ModelTypeSet()>
+      get_preferred_data_types_callback_;
+
   // A function that can be invoked repeatedly to determine whether sync can be
   // started. |start_engine_| should not be invoked unless this returns true.
-  const base::RepeatingCallback<bool()> can_start_;
+  const base::RepeatingCallback<bool()> can_start_callback_;
 
   // The callback we invoke when it's time to call expensive
   // startup routines for the sync engine.
-  const base::RepeatingClosure start_engine_;
-
-  // Used to compute preferred_types from SyncPrefs as-needed.
-  ModelTypeSet registered_types_;
+  const base::RepeatingClosure start_engine_callback_;
 
   // If true, will bypass the FirstSetupComplete check when triggering sync
   // startup. Set in TryStartImmediately.
diff --git a/components/sync/driver/startup_controller_unittest.cc b/components/sync/driver/startup_controller_unittest.cc
index 53d3e87..049af22 100644
--- a/components/sync/driver/startup_controller_unittest.cc
+++ b/components/sync/driver/startup_controller_unittest.cc
@@ -16,17 +16,10 @@
 
 namespace syncer {
 
-// These are coupled to the implementation of StartupController's
-// GetEngineInitializationStateString which is used by about:sync. We use it
-// as a convenient way to verify internal state and that the class is
-// outputting the correct values for the debug string.
-static const char kStateStringStarted[] = "Started";
-static const char kStateStringDeferred[] = "Deferred";
-static const char kStateStringNotStarted[] = "Not started";
-
 class StartupControllerTest : public testing::Test {
  public:
-  StartupControllerTest() : can_start_(false), started_(false) {}
+  StartupControllerTest()
+      : preferred_types_(UserTypes()), can_start_(false), started_(false) {}
 
   void SetUp() override {
     base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
@@ -36,33 +29,35 @@
     sync_prefs_ = std::make_unique<SyncPrefs>(&pref_service_);
     controller_ = std::make_unique<StartupController>(
         sync_prefs_.get(),
-        base::Bind(&StartupControllerTest::CanStart, base::Unretained(this)),
-        base::Bind(&StartupControllerTest::FakeStartBackend,
-                   base::Unretained(this)));
-    controller_->Reset(UserTypes());
+        base::BindRepeating(&StartupControllerTest::GetPreferredDataTypes,
+                            base::Unretained(this)),
+        base::BindRepeating(&StartupControllerTest::CanStart,
+                            base::Unretained(this)),
+        base::BindRepeating(&StartupControllerTest::FakeStartBackend,
+                            base::Unretained(this)));
+    controller_->Reset();
+  }
+
+  void SetPreferredDataTypes(const ModelTypeSet& types) {
+    preferred_types_ = types;
   }
 
   void SetCanStart(bool can_start) { can_start_ = can_start; }
 
   void ExpectStarted() {
     EXPECT_TRUE(started());
-    EXPECT_EQ(kStateStringStarted,
-              controller()->GetEngineInitializationStateString());
+    EXPECT_EQ(StartupController::State::STARTED, controller()->GetState());
   }
 
   void ExpectStartDeferred() {
-    const bool deferred_start =
-        !base::CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kSyncDisableDeferredStartup);
-    EXPECT_EQ(!deferred_start, started());
-    EXPECT_EQ(deferred_start ? kStateStringDeferred : kStateStringStarted,
-              controller()->GetEngineInitializationStateString());
+    EXPECT_FALSE(started());
+    EXPECT_EQ(StartupController::State::STARTING_DEFERRED,
+              controller()->GetState());
   }
 
   void ExpectNotStarted() {
     EXPECT_FALSE(started());
-    EXPECT_EQ(kStateStringNotStarted,
-              controller()->GetEngineInitializationStateString());
+    EXPECT_EQ(StartupController::State::NOT_STARTED, controller()->GetState());
   }
 
   bool started() const { return started_; }
@@ -71,13 +66,11 @@
   SyncPrefs* sync_prefs() { return sync_prefs_.get(); }
 
  private:
+  ModelTypeSet GetPreferredDataTypes() { return preferred_types_; }
   bool CanStart() { return can_start_; }
+  void FakeStartBackend() { started_ = true; }
 
-  void FakeStartBackend() {
-    started_ = true;
-    sync_prefs()->SetFirstSetupComplete();
-  }
-
+  ModelTypeSet preferred_types_;
   bool can_start_;
   bool started_;
   base::MessageLoop message_loop_;
@@ -150,9 +143,7 @@
   types.Remove(PROXY_TABS);
   types.Remove(TYPED_URLS);
   types.Remove(SUPERVISED_USER_SETTINGS);
-  sync_prefs()->SetKeepEverythingSynced(false);
-  sync_prefs()->SetPreferredDataTypes(UserTypes(), types);
-  controller()->Reset(UserTypes());
+  SetPreferredDataTypes(types);
 
   sync_prefs()->SetFirstSetupComplete();
   SetCanStart(true);
@@ -204,7 +195,7 @@
   controller()->SetSetupInProgress(true);
 
   // This could happen if the UI triggers a stop-syncing permanently call.
-  controller()->Reset(UserTypes());
+  controller()->Reset();
 
   // From the UI's point of view, setup is still in progress.
   EXPECT_TRUE(controller()->IsSetupInProgress());
diff --git a/components/sync/user_events/user_event_service_impl_unittest.cc b/components/sync/user_events/user_event_service_impl_unittest.cc
index dd838ac..b8517606 100644
--- a/components/sync/user_events/user_event_service_impl_unittest.cc
+++ b/components/sync/user_events/user_event_service_impl_unittest.cc
@@ -5,6 +5,7 @@
 #include "components/sync/user_events/user_event_service_impl.h"
 
 #include <utility>
+#include <vector>
 
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/field_trial.h"
@@ -12,8 +13,8 @@
 #include "components/sync/base/model_type.h"
 #include "components/sync/driver/fake_sync_service.h"
 #include "components/sync/driver/sync_driver_switches.h"
+#include "components/sync/model/mock_model_type_change_processor.h"
 #include "components/sync/model/model_type_store_test_util.h"
-#include "components/sync/model/recording_model_type_change_processor.h"
 #include "components/sync/protocol/sync.pb.h"
 #include "components/sync/user_events/user_event_sync_bridge.h"
 #include "components/variations/variations_associated_data.h"
@@ -21,6 +22,7 @@
 
 using base::test::ScopedFeatureList;
 using sync_pb::UserEventSpecifics;
+using testing::_;
 
 namespace syncer {
 
@@ -61,6 +63,13 @@
   return specifics;
 }
 
+MATCHER_P(HasFieldTrialVariationIds, expected_variation_id, "") {
+  const UserEventSpecifics& specifics = arg->specifics.user_event();
+  return specifics.field_trial_event().variation_ids_size() == 1 &&
+         specifics.field_trial_event().variation_ids(0) ==
+             expected_variation_id;
+}
+
 // TODO(vitaliii): Merge this into FakeSyncService and use it instead.
 class TestSyncService : public FakeSyncService {
  public:
@@ -95,24 +104,25 @@
  protected:
   UserEventServiceImplTest()
       : field_trial_list_(nullptr),
-        sync_service_(true, false, {HISTORY_DELETE_DIRECTIVES}) {}
+        sync_service_(true, false, {HISTORY_DELETE_DIRECTIVES}) {
+    ON_CALL(mock_processor_, IsTrackingMetadata())
+        .WillByDefault(testing::Return(true));
+  }
 
   std::unique_ptr<UserEventSyncBridge> MakeBridge() {
     return std::make_unique<UserEventSyncBridge>(
         ModelTypeStoreTestUtil::FactoryForInMemoryStoreForTest(),
-        RecordingModelTypeChangeProcessor::CreateProcessorAndAssignRawPointer(
-            &processor_),
-        &mapper_, &sync_service_);
+        mock_processor_.CreateForwardingProcessor(), &mapper_, &sync_service_);
   }
 
   TestSyncService* sync_service() { return &sync_service_; }
-  const RecordingModelTypeChangeProcessor& processor() { return *processor_; }
+  MockModelTypeChangeProcessor* mock_processor() { return &mock_processor_; }
 
  private:
   base::MessageLoop message_loop_;
   base::FieldTrialList field_trial_list_;
   TestSyncService sync_service_;
-  RecordingModelTypeChangeProcessor* processor_;
+  testing::NiceMock<MockModelTypeChangeProcessor> mock_processor_;
   TestGlobalIdMapper mapper_;
 };
 
@@ -134,8 +144,8 @@
 
 TEST_F(UserEventServiceImplTest, ShouldRecord) {
   UserEventServiceImpl service(sync_service(), MakeBridge());
+  EXPECT_CALL(*mock_processor(), Put(_, _, _));
   service.RecordUserEvent(AsTest(Event()));
-  EXPECT_EQ(1u, processor().put_multimap().size());
 }
 
 TEST_F(UserEventServiceImplTest, ShouldRecordNoHistory) {
@@ -143,17 +153,19 @@
   UserEventServiceImpl service(&no_history_sync_service, MakeBridge());
 
   // Only record events without navigation ids when history sync is off.
+  EXPECT_CALL(*mock_processor(), Put(_, _, _)).Times(0);
   service.RecordUserEvent(WithNav(AsTest(Event())));
-  EXPECT_EQ(0u, processor().put_multimap().size());
+  EXPECT_CALL(*mock_processor(), Put(_, _, _));
   service.RecordUserEvent(AsTest(Event()));
 }
 
 TEST_F(UserEventServiceImplTest, ShouldRecordUserConsentNoHistory) {
   TestSyncService no_history_sync_service(true, false, ModelTypeSet());
   UserEventServiceImpl service(&no_history_sync_service, MakeBridge());
-  service.RecordUserEvent(AsConsent(Event()));
+
   // UserConsent recording doesn't need history sync to be enabled.
-  EXPECT_EQ(1u, processor().put_multimap().size());
+  EXPECT_CALL(*mock_processor(), Put(_, _, _));
+  service.RecordUserEvent(AsConsent(Event()));
 }
 
 TEST_F(UserEventServiceImplTest, ShouldRecordPassphrase) {
@@ -162,10 +174,11 @@
   UserEventServiceImpl service(&passphrase_sync_service, MakeBridge());
 
   // Only record events without navigation ids when a passphrase is used.
+  EXPECT_CALL(*mock_processor(), Put(_, _, _)).Times(0);
   service.RecordUserEvent(WithNav(AsTest(Event())));
-  EXPECT_EQ(0u, processor().put_multimap().size());
+
+  EXPECT_CALL(*mock_processor(), Put(_, _, _));
   service.RecordUserEvent(AsTest(Event()));
-  EXPECT_EQ(1u, processor().put_multimap().size());
 }
 
 TEST_F(UserEventServiceImplTest, ShouldRecordEngineOff) {
@@ -175,59 +188,62 @@
                                MakeBridge());
 
   // Only record events without navigation ids when the engine is off.
+  EXPECT_CALL(*mock_processor(), Put(_, _, _)).Times(0);
   service.RecordUserEvent(WithNav(AsTest(Event())));
-  EXPECT_EQ(0u, processor().put_multimap().size());
+
+  EXPECT_CALL(*mock_processor(), Put(_, _, _));
   service.RecordUserEvent(AsTest(Event()));
-  EXPECT_EQ(1u, processor().put_multimap().size());
 }
 
 TEST_F(UserEventServiceImplTest, ShouldRecordEmpty) {
   UserEventServiceImpl service(sync_service(), MakeBridge());
 
   // All untyped events should always be ignored.
+  EXPECT_CALL(*mock_processor(), Put(_, _, _)).Times(0);
   service.RecordUserEvent(Event());
-  EXPECT_EQ(0u, processor().put_multimap().size());
   service.RecordUserEvent(WithNav(Event()));
-  EXPECT_EQ(0u, processor().put_multimap().size());
 }
 
 TEST_F(UserEventServiceImplTest, ShouldRecordHasNavigationId) {
   UserEventServiceImpl service(sync_service(), MakeBridge());
 
   // Verify logic for types that might or might not have a navigation id.
+  EXPECT_CALL(*mock_processor(), Put(_, _, _));
   service.RecordUserEvent(AsTest(Event()));
-  EXPECT_EQ(1u, processor().put_multimap().size());
+  EXPECT_CALL(*mock_processor(), Put(_, _, _));
   service.RecordUserEvent(WithNav(AsTest(Event())));
-  EXPECT_EQ(2u, processor().put_multimap().size());
 
   // Verify logic for types that must have a navigation id.
+  EXPECT_CALL(*mock_processor(), Put(_, _, _)).Times(0);
   service.RecordUserEvent(AsDetection(Event()));
-  EXPECT_EQ(2u, processor().put_multimap().size());
+  EXPECT_CALL(*mock_processor(), Put(_, _, _));
   service.RecordUserEvent(WithNav(AsDetection(Event())));
-  EXPECT_EQ(3u, processor().put_multimap().size());
 
   // Verify logic for types that cannot have a navigation id.
+  EXPECT_CALL(*mock_processor(), Put(_, _, _));
   service.RecordUserEvent(AsTrial(Event()));
-  EXPECT_EQ(4u, processor().put_multimap().size());
+  EXPECT_CALL(*mock_processor(), Put(_, _, _)).Times(0);
   service.RecordUserEvent(WithNav(AsTrial(Event())));
-  EXPECT_EQ(4u, processor().put_multimap().size());
 }
 
 TEST_F(UserEventServiceImplTest, SessionIdIsDifferent) {
+  std::vector<int64_t> put_session_ids;
+  ON_CALL(*mock_processor(), Put(_, _, _))
+      .WillByDefault([&](const std::string& storage_key,
+                         const std::unique_ptr<EntityData> entity_data,
+                         MetadataChangeList* metadata_change_list) {
+        put_session_ids.push_back(
+            entity_data->specifics.user_event().session_id());
+      });
+
   UserEventServiceImpl service1(sync_service(), MakeBridge());
   service1.RecordUserEvent(AsTest(Event()));
-  ASSERT_EQ(1u, processor().put_multimap().size());
-  auto put1 = processor().put_multimap().begin();
-  int64_t session_id1 = put1->second->specifics.user_event().session_id();
 
   UserEventServiceImpl service2(sync_service(), MakeBridge());
   service2.RecordUserEvent(AsTest(Event()));
-  // The object processor() points to has changed to be |service2|'s processor.
-  ASSERT_EQ(1u, processor().put_multimap().size());
-  auto put2 = processor().put_multimap().begin();
-  int64_t session_id2 = put2->second->specifics.user_event().session_id();
 
-  EXPECT_NE(session_id1, session_id2);
+  ASSERT_EQ(2U, put_session_ids.size());
+  EXPECT_NE(put_session_ids[0], put_session_ids[1]);
 }
 
 TEST_F(UserEventServiceImplTest, FieldTrial) {
@@ -236,12 +252,8 @@
   base::FieldTrialList::CreateFieldTrial("trial", "group");
   base::FieldTrialList::FindFullName("trial");
 
+  EXPECT_CALL(*mock_processor(), Put(_, HasFieldTrialVariationIds(123u), _));
   UserEventServiceImpl service(sync_service(), MakeBridge());
-  ASSERT_EQ(1u, processor().put_multimap().size());
-  const UserEventSpecifics specifics =
-      processor().put_multimap().begin()->second->specifics.user_event();
-  ASSERT_EQ(1, specifics.field_trial_event().variation_ids_size());
-  EXPECT_EQ(123u, specifics.field_trial_event().variation_ids(0));
 }
 
 }  // namespace
diff --git a/components/ukm/content/source_url_recorder.cc b/components/ukm/content/source_url_recorder.cc
index 3ca8625..41fd57fd 100644
--- a/components/ukm/content/source_url_recorder.cc
+++ b/components/ukm/content/source_url_recorder.cc
@@ -68,7 +68,19 @@
   base::flat_map<int64_t, GURL> pending_navigations_;
 
   // Holds pending DocumentCreated events.
-  using PendingEvent = std::pair<int64_t, bool>;
+  struct PendingEvent {
+    PendingEvent() = delete;
+    PendingEvent(int64_t source_id,
+                 bool is_main_frame,
+                 bool is_cross_origin_frame)
+        : source_id(source_id),
+          is_main_frame(is_main_frame),
+          is_cross_origin_frame(is_cross_origin_frame) {}
+
+    int64_t source_id;
+    bool is_main_frame;
+    bool is_cross_origin_frame;
+  };
   std::vector<PendingEvent> pending_document_created_events_;
 
   int64_t last_committed_source_id_;
@@ -138,8 +150,17 @@
 
 void SourceUrlRecorderWebContentsObserver::SetDocumentSourceId(
     int64_t source_id) {
+  content::RenderFrameHost* main_frame = web_contents()->GetMainFrame();
+  content::RenderFrameHost* current_frame = bindings_.GetCurrentTargetFrame();
+  bool is_main_frame = main_frame == current_frame;
+  bool is_cross_origin_frame =
+      is_main_frame ? false
+                    : !main_frame->GetLastCommittedOrigin().IsSameOriginWith(
+                          current_frame->GetLastCommittedOrigin());
+
   pending_document_created_events_.emplace_back(
-      source_id, !bindings_.GetCurrentTargetFrame()->GetParent());
+      source_id, !bindings_.GetCurrentTargetFrame()->GetParent(),
+      is_cross_origin_frame);
   MaybeFlushPendingEvents();
 }
 
@@ -154,9 +175,10 @@
   while (!pending_document_created_events_.empty()) {
     auto record = pending_document_created_events_.back();
 
-    ukm::builders::DocumentCreated(record.first)
+    ukm::builders::DocumentCreated(record.source_id)
         .SetNavigationSourceId(last_committed_source_id_)
-        .SetIsMainFrame(record.second)
+        .SetIsMainFrame(record.is_main_frame)
+        .SetIsCrossOriginFrame(record.is_cross_origin_frame)
         .Record(ukm_recorder);
 
     pending_document_created_events_.pop_back();
diff --git a/components/viz/common/gpu/vulkan_in_process_context_provider.cc b/components/viz/common/gpu/vulkan_in_process_context_provider.cc
index bc66d7f..37ab613 100644
--- a/components/viz/common/gpu/vulkan_in_process_context_provider.cc
+++ b/components/viz/common/gpu/vulkan_in_process_context_provider.cc
@@ -53,27 +53,26 @@
   const uint32_t extension_flags =
       kEXT_debug_report_GrVkExtensionFlag | kKHR_surface_GrVkExtensionFlag |
       kKHR_swapchain_GrVkExtensionFlag | kKHR_xcb_surface_GrVkExtensionFlag;
-  GrVkBackendContext* backend_context = new GrVkBackendContext();
-  backend_context->fInstance = device_queue_->GetVulkanInstance();
-  backend_context->fPhysicalDevice = device_queue_->GetVulkanPhysicalDevice();
-  backend_context->fDevice = device_queue_->GetVulkanDevice();
-  backend_context->fQueue = device_queue_->GetVulkanQueue();
-  backend_context->fGraphicsQueueIndex = device_queue_->GetVulkanQueueIndex();
-  backend_context->fMinAPIVersion = VK_MAKE_VERSION(1, 0, 8);
-  backend_context->fExtensions = extension_flags;
-  backend_context->fFeatures = feature_flags;
+  GrVkBackendContext backend_context;
+  backend_context.fInstance = device_queue_->GetVulkanInstance();
+  backend_context.fPhysicalDevice = device_queue_->GetVulkanPhysicalDevice();
+  backend_context.fDevice = device_queue_->GetVulkanDevice();
+  backend_context.fQueue = device_queue_->GetVulkanQueue();
+  backend_context.fGraphicsQueueIndex = device_queue_->GetVulkanQueueIndex();
+  backend_context.fMinAPIVersion = VK_MAKE_VERSION(1, 0, 8);
+  backend_context.fExtensions = extension_flags;
+  backend_context.fFeatures = feature_flags;
 
   gpu::VulkanFunctionPointers* vulkan_function_pointers =
       gpu::GetVulkanFunctionPointers();
   auto interface = sk_make_sp<GrVkInterface>(
       make_unified_getter(vulkan_function_pointers->vkGetInstanceProcAddr,
                           vulkan_function_pointers->vkGetDeviceProcAddr),
-      backend_context->fInstance, backend_context->fDevice,
-      backend_context->fExtensions);
-  backend_context->fInterface.reset(interface.release());
-  backend_context->fOwnsInstanceAndDevice = false;
-  backend_context_.reset(backend_context);
-  gr_context_ = GrContext::MakeVulkan(backend_context_);
+      backend_context.fInstance, backend_context.fDevice,
+      backend_context.fExtensions);
+  backend_context.fInterface.reset(interface.release());
+  backend_context.fOwnsInstanceAndDevice = false;
+  gr_context_ = GrContext::MakeVulkan(backend_context);
   return true;
 }
 
@@ -84,7 +83,6 @@
   if (device_queue_) {
     device_queue_->Destroy();
     device_queue_.reset();
-    backend_context_.reset();
   }
 }
 
diff --git a/components/viz/common/gpu/vulkan_in_process_context_provider.h b/components/viz/common/gpu/vulkan_in_process_context_provider.h
index 6a79746..426950f 100644
--- a/components/viz/common/gpu/vulkan_in_process_context_provider.h
+++ b/components/viz/common/gpu/vulkan_in_process_context_provider.h
@@ -45,7 +45,6 @@
   sk_sp<GrContext> gr_context_;
   gpu::VulkanImplementation* vulkan_implementation_;
   std::unique_ptr<gpu::VulkanDeviceQueue> device_queue_;
-  sk_sp<GrVkBackendContext> backend_context_;
 #endif
 
   DISALLOW_COPY_AND_ASSIGN(VulkanInProcessContextProvider);
diff --git a/components/viz/service/display/scoped_render_pass_texture.cc b/components/viz/service/display/scoped_render_pass_texture.cc
index 3d9a0ab..1357cc2 100644
--- a/components/viz/service/display/scoped_render_pass_texture.cc
+++ b/components/viz/service/display/scoped_render_pass_texture.cc
@@ -4,6 +4,8 @@
 
 #include "components/viz/service/display/scoped_render_pass_texture.h"
 
+#include <algorithm>
+
 #include "base/bits.h"
 #include "base/logging.h"
 #include "components/viz/common/gpu/context_provider.h"
diff --git a/components/viz/service/main/viz_main_impl.cc b/components/viz/service/main/viz_main_impl.cc
index 563051b..651d522 100644
--- a/components/viz/service/main/viz_main_impl.cc
+++ b/components/viz/service/main/viz_main_impl.cc
@@ -45,8 +45,16 @@
 
 namespace {
 
-std::unique_ptr<base::Thread> CreateAndStartCompositorThread() {
-  auto thread = std::make_unique<base::Thread>("VizCompositorThread");
+std::unique_ptr<viz::CompositorThreadType> CreateAndStartCompositorThread() {
+  const char* thread_name = "VizCompositorThread";
+
+#if defined(OS_ANDROID)
+  auto thread = std::make_unique<base::android::JavaHandlerThread>(
+      thread_name, base::ThreadPriority::DISPLAY);
+  thread->Start();
+  return thread;
+#else
+  auto thread = std::make_unique<base::Thread>(thread_name);
   base::Thread::Options thread_options;
 #if defined(OS_WIN)
   // Windows needs a UI message loop for child HWND. Other platforms can use the
@@ -54,11 +62,12 @@
   thread_options.message_loop_type = base::MessageLoop::TYPE_UI;
 #endif
 
-#if defined(OS_ANDROID) || defined(OS_CHROMEOS)
+#if defined(OS_CHROMEOS)
   thread_options.priority = base::ThreadPriority::DISPLAY;
 #endif
   CHECK(thread->StartWithOptions(thread_options));
   return thread;
+#endif
 }
 
 std::unique_ptr<base::Thread> CreateAndStartIOThread() {
diff --git a/components/viz/service/main/viz_main_impl.h b/components/viz/service/main/viz_main_impl.h
index 5c73b6e95..ab71e3a 100644
--- a/components/viz/service/main/viz_main_impl.h
+++ b/components/viz/service/main/viz_main_impl.h
@@ -8,6 +8,7 @@
 #include "base/power_monitor/power_monitor.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread.h"
+#include "build/build_config.h"
 #include "components/discardable_memory/client/client_discardable_shared_memory_manager.h"
 #include "gpu/ipc/in_process_command_buffer.h"
 #include "gpu/ipc/service/gpu_init.h"
@@ -17,6 +18,10 @@
 #include "services/viz/privileged/interfaces/viz_main.mojom.h"
 #include "ui/gfx/font_render_params.h"
 
+#if defined(OS_ANDROID)
+#include "base/android/java_handler_thread.h"
+#endif
+
 namespace gpu {
 class SyncPointManager;
 }  // namespace gpu
@@ -35,6 +40,12 @@
 class GpuServiceImpl;
 class ServerSharedBitmapManager;
 
+#if defined(OS_ANDROID)
+using CompositorThreadType = base::android::JavaHandlerThread;
+#else
+using CompositorThreadType = base::Thread;
+#endif
+
 class VizMainImpl : public gpu::GpuSandboxHelper, public mojom::VizMain {
  public:
   struct LogMessage {
@@ -164,7 +175,7 @@
   const scoped_refptr<base::SingleThreadTaskRunner> gpu_thread_task_runner_;
 
   // The main thread for the display compositor.
-  std::unique_ptr<base::Thread> compositor_thread_;
+  std::unique_ptr<CompositorThreadType> compositor_thread_;
   scoped_refptr<base::SingleThreadTaskRunner> compositor_thread_task_runner_;
 
   std::unique_ptr<ukm::MojoUkmRecorder> ukm_recorder_;
diff --git a/components/zucchini/README.md b/components/zucchini/README.md
index 42f3b3e..b864704 100644
--- a/components/zucchini/README.md
+++ b/components/zucchini/README.md
@@ -145,6 +145,17 @@
 undesirable noise in raw content. Notably, the projection encodes references
 based on their associated label.
 
+## Interfaces
+
+zucchini_lib: Core Zucchini library that operate on buffers to generate and
+apply patches.
+
+zucchini_io: Wrapper on zucchini_lib that handles file I/O, using memory-mapped
+I/O to interface with zucchini_lib.
+
+zucchini: Stand-alone executable that parses command-line arguments, and passes
+the results to zucchini_io. Also implements various helper flows.
+
 ## Zucchini Ensemble Patch Format
 
 ### Types
diff --git a/components/zucchini/element_detection_unittest.cc b/components/zucchini/element_detection_unittest.cc
index 6dbfa3f..769c839 100644
--- a/components/zucchini/element_detection_unittest.cc
+++ b/components/zucchini/element_detection_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "components/zucchini/element_detection.h"
 
+#include <map>
 #include <vector>
 
 #include "base/bind.h"
diff --git a/components/zucchini/fuzzers/apply_fuzzer.cc b/components/zucchini/fuzzers/apply_fuzzer.cc
index 4e9b342..baad9784 100644
--- a/components/zucchini/fuzzers/apply_fuzzer.cc
+++ b/components/zucchini/fuzzers/apply_fuzzer.cc
@@ -54,6 +54,6 @@
   zucchini::MutableBufferView new_image(new_data.data(), new_size);
 
   // Fuzz target.
-  zucchini::Apply(old_image, *patch_reader, new_image);
+  zucchini::ApplyBuffer(old_image, *patch_reader, new_image);
   // No need to check whether output exist, or if so, whether it's valid.
 }
diff --git a/components/zucchini/fuzzers/raw_gen_fuzzer.cc b/components/zucchini/fuzzers/raw_gen_fuzzer.cc
index b27042e..de63d95 100644
--- a/components/zucchini/fuzzers/raw_gen_fuzzer.cc
+++ b/components/zucchini/fuzzers/raw_gen_fuzzer.cc
@@ -56,7 +56,7 @@
   zucchini::EnsemblePatchWriter patch_writer(old_image, new_image);
 
   // Fuzz Target.
-  zucchini::GenerateRaw(old_image, new_image, &patch_writer);
+  zucchini::GenerateBufferRaw(old_image, new_image, &patch_writer);
 
   // Check that the patch size is sane. Crash the fuzzer if this isn't the case
   // as it is a failure in Zucchini's patch performance that is worth
diff --git a/components/zucchini/fuzzers/ztf_gen_fuzzer.cc b/components/zucchini/fuzzers/ztf_gen_fuzzer.cc
index 785aed4..ee2d47c 100644
--- a/components/zucchini/fuzzers/ztf_gen_fuzzer.cc
+++ b/components/zucchini/fuzzers/ztf_gen_fuzzer.cc
@@ -57,7 +57,7 @@
   zucchini::EnsemblePatchWriter patch_writer(old_image, new_image);
 
   // Fuzz Target.
-  zucchini::GenerateEnsemble(old_image, new_image, &patch_writer);
+  zucchini::GenerateBuffer(old_image, new_image, &patch_writer);
 
   // Write to buffer to avoid IO.
   size_t patch_size = patch_writer.SerializedSize();
diff --git a/components/zucchini/integration_test.cc b/components/zucchini/integration_test.cc
index c4c7004..e7df927 100644
--- a/components/zucchini/integration_test.cc
+++ b/components/zucchini/integration_test.cc
@@ -49,8 +49,8 @@
 
   // Generate patch from "old" to "new".
   ASSERT_EQ(status::kStatusSuccess,
-            raw ? GenerateRaw(old_region, new_region, &patch_writer)
-                : GenerateEnsemble(old_region, new_region, &patch_writer));
+            raw ? GenerateBufferRaw(old_region, new_region, &patch_writer)
+                : GenerateBuffer(old_region, new_region, &patch_writer));
 
   size_t patch_size = patch_writer.SerializedSize();
   EXPECT_GE(patch_size, 80U);  // Minimum size is empty patch.
@@ -73,9 +73,9 @@
 
   // Apply patch to "old" to get "patched new", ensure it's identical to "new".
   std::vector<uint8_t> patched_new_buffer(new_region.size());
-  ASSERT_EQ(status::kStatusSuccess,
-            Apply(old_region, *patch_reader,
-                  {patched_new_buffer.data(), patched_new_buffer.size()}));
+  ASSERT_EQ(status::kStatusSuccess, ApplyBuffer(old_region, *patch_reader,
+                                                {patched_new_buffer.data(),
+                                                 patched_new_buffer.size()}));
 
   // Note that |new_region| and |patched_new_buffer| are the same size.
   EXPECT_TRUE(std::equal(new_region.begin(), new_region.end(),
diff --git a/components/zucchini/main_utils.cc b/components/zucchini/main_utils.cc
index b6b564280..6a09b32 100644
--- a/components/zucchini/main_utils.cc
+++ b/components/zucchini/main_utils.cc
@@ -70,7 +70,7 @@
     {"apply", "-apply <old_file> <patch_file> <new_file> [-keep]", 3,
      &MainApply},
     {"read", "-read <exe> [-dump]", 1, &MainRead},
-    {"detect", "-detect <archive_file> [-dd=format#]", 1, &MainDetect},
+    {"detect", "-detect <archive_file>", 1, &MainDetect},
     {"match", "-match <old_file> <new_file> [-impose=#+#=#+#,#+#=#+#,...]", 2,
      &MainMatch},
     {"crc32", "-crc32 <file>", 1, &MainCrc32},
diff --git a/components/zucchini/mapped_file.cc b/components/zucchini/mapped_file.cc
index 13c1afd..497b42a1 100644
--- a/components/zucchini/mapped_file.cc
+++ b/components/zucchini/mapped_file.cc
@@ -12,7 +12,7 @@
 
 namespace zucchini {
 
-MappedFileReader::MappedFileReader(base::File&& file) {
+MappedFileReader::MappedFileReader(base::File file) {
   if (!file.IsValid()) {
     error_ = "Invalid file.";
     return;  // |buffer_| will be uninitialized, and therefore invalid.
@@ -23,7 +23,7 @@
 }
 
 MappedFileWriter::MappedFileWriter(const base::FilePath& file_path,
-                                   base::File&& file,
+                                   base::File file,
                                    size_t length)
     : file_path_(file_path), delete_behavior_(kManualDeleteOnClose) {
   if (!file.IsValid()) {
diff --git a/components/zucchini/mapped_file.h b/components/zucchini/mapped_file.h
index 540f947..e8cd5907 100644
--- a/components/zucchini/mapped_file.h
+++ b/components/zucchini/mapped_file.h
@@ -23,7 +23,7 @@
  public:
   // Maps |file| to memory for reading. Also validates |file|. Errors are
   // available via HasError() and error().
-  explicit MappedFileReader(base::File&& file);
+  explicit MappedFileReader(base::File file);
 
   const uint8_t* data() const { return buffer_.data(); }
   size_t length() const { return buffer_.length(); }
@@ -47,7 +47,7 @@
   // UNIX systems, but can be empty if auto delete is not needed. Errors are
   // available via HasError() and error().
   MappedFileWriter(const base::FilePath& file_path,
-                   base::File&& file,
+                   base::File file,
                    size_t length);
   ~MappedFileWriter();
 
diff --git a/components/zucchini/zucchini.h b/components/zucchini/zucchini.h
index e9093eb..9847440 100644
--- a/components/zucchini/zucchini.h
+++ b/components/zucchini/zucchini.h
@@ -11,7 +11,11 @@
 #include "components/zucchini/patch_reader.h"
 #include "components/zucchini/patch_writer.h"
 
-// Definitions, structures, and interfaces for the Zucchini library.
+// Core Zucchini library, consisting of:
+// - Global constants.
+// - Patch gen and apply functions, where "old" and "new" data are represented
+//   as buffers, and patch data represented as EnsemblePatchWriter or
+//   EnsemblePatchReader.
 
 namespace zucchini {
 
@@ -36,9 +40,9 @@
 // Generates ensemble patch from |old_image| to |new_image| using the default
 // element detection and matching heuristics, writes the results to
 // |patch_writer|, and returns a status::Code.
-status::Code GenerateEnsemble(ConstBufferView old_image,
-                              ConstBufferView new_image,
-                              EnsemblePatchWriter* patch_writer);
+status::Code GenerateBuffer(ConstBufferView old_image,
+                            ConstBufferView new_image,
+                            EnsemblePatchWriter* patch_writer);
 
 // Same as GenerateEnsemble(), but if |imposed_matches| is non-empty, then
 // overrides default element detection and matching heuristics with custom
@@ -46,23 +50,22 @@
 //   "#+#=#+#,#+#=#+#,..."  (e.g., "1+2=3+4", "1+2=3+4,5+6=7+8"),
 // where "#+#=#+#" encodes a match as 4 unsigned integers:
 //   [offset in "old", size in "old", offset in "new", size in "new"].
-status::Code GenerateEnsembleWithImposedMatches(
-    ConstBufferView old_image,
-    ConstBufferView new_image,
-    std::string imposed_matches,
-    EnsemblePatchWriter* patch_writer);
+status::Code GenerateBufferImposed(ConstBufferView old_image,
+                                   ConstBufferView new_image,
+                                   std::string imposed_matches,
+                                   EnsemblePatchWriter* patch_writer);
 
 // Generates raw patch from |old_image| to |new_image|, and writes it to
 // |patch_writer|.
-status::Code GenerateRaw(ConstBufferView old_image,
-                         ConstBufferView new_image,
-                         EnsemblePatchWriter* patch_writer);
+status::Code GenerateBufferRaw(ConstBufferView old_image,
+                               ConstBufferView new_image,
+                               EnsemblePatchWriter* patch_writer);
 
 // Applies |patch_reader| to |old_image| to build |new_image|, which refers to
 // preallocated memory of sufficient size.
-status::Code Apply(ConstBufferView old_image,
-                   const EnsemblePatchReader& patch_reader,
-                   MutableBufferView new_image);
+status::Code ApplyBuffer(ConstBufferView old_image,
+                         const EnsemblePatchReader& patch_reader,
+                         MutableBufferView new_image);
 
 }  // namespace zucchini
 
diff --git a/components/zucchini/zucchini_apply.cc b/components/zucchini/zucchini_apply.cc
index af4eab9..f6226bc 100644
--- a/components/zucchini/zucchini_apply.cc
+++ b/components/zucchini/zucchini_apply.cc
@@ -188,9 +188,9 @@
 
 /******** Exported Functions ********/
 
-status::Code Apply(ConstBufferView old_image,
-                   const EnsemblePatchReader& patch_reader,
-                   MutableBufferView new_image) {
+status::Code ApplyBuffer(ConstBufferView old_image,
+                         const EnsemblePatchReader& patch_reader,
+                         MutableBufferView new_image) {
   if (!patch_reader.CheckOldFile(old_image)) {
     LOG(ERROR) << "Invalid old_image.";
     return status::kStatusInvalidOldImage;
diff --git a/components/zucchini/zucchini_commands.cc b/components/zucchini/zucchini_commands.cc
index 62dd20d2..1abe08f 100644
--- a/components/zucchini/zucchini_commands.cc
+++ b/components/zucchini/zucchini_commands.cc
@@ -38,67 +38,11 @@
 
 zucchini::status::Code MainGen(MainParams params) {
   CHECK_EQ(3U, params.file_paths.size());
-
-  // TODO(huangs): Move implementation to zucchini_integration.cc.
-  using base::File;
-  File old_file(params.file_paths[0], File::FLAG_OPEN | File::FLAG_READ);
-  zucchini::MappedFileReader old_image(std::move(old_file));
-  if (old_image.HasError()) {
-    LOG(ERROR) << "Error with file " << params.file_paths[0].value() << ": "
-               << old_image.error();
-    return zucchini::status::kStatusFileReadError;
-  }
-  File new_file(params.file_paths[1], File::FLAG_OPEN | File::FLAG_READ);
-  zucchini::MappedFileReader new_image(std::move(new_file));
-  if (new_image.HasError()) {
-    LOG(ERROR) << "Error with file " << params.file_paths[1].value() << ": "
-               << new_image.error();
-    return zucchini::status::kStatusFileReadError;
-  }
-  zucchini::EnsemblePatchWriter patch_writer(old_image.region(),
-                                             new_image.region());
-
-  zucchini::status::Code result = zucchini::status::kStatusSuccess;
-  if (params.command_line.HasSwitch(kSwitchRaw)) {
-    result = GenerateRaw(old_image.region(), new_image.region(), &patch_writer);
-  } else {
-    // May be empty.
-    std::string imposed_matches =
-        params.command_line.GetSwitchValueASCII(kSwitchImpose);
-    result = GenerateEnsembleWithImposedMatches(
-        old_image.region(), new_image.region(), std::move(imposed_matches),
-        &patch_writer);
-  }
-
-  if (result != zucchini::status::kStatusSuccess) {
-    params.out << "Fatal error encountered when generating patch." << std::endl;
-    return result;
-  }
-
-  // By default, delete patch on destruction, to avoid having lingering files in
-  // case of a failure. On Windows deletion can be done by the OS.
-  File patch_file(params.file_paths[2], File::FLAG_CREATE_ALWAYS |
-                                            File::FLAG_READ | File::FLAG_WRITE |
-                                            File::FLAG_SHARE_DELETE |
-                                            File::FLAG_CAN_DELETE_ON_CLOSE);
-  zucchini::MappedFileWriter patch(params.file_paths[2], std::move(patch_file),
-                                   patch_writer.SerializedSize());
-  if (patch.HasError()) {
-    LOG(ERROR) << "Error with file " << params.file_paths[2].value() << ": "
-               << patch.error();
-    return zucchini::status::kStatusFileWriteError;
-  }
-
-  if (params.command_line.HasSwitch(kSwitchKeep))
-    patch.Keep();
-
-  if (!patch_writer.SerializeInto(patch.region()))
-    return zucchini::status::kStatusPatchWriteError;
-
-  // Successfully created patch. Explicitly request file to be kept.
-  if (!patch.Keep())
-    return zucchini::status::kStatusFileWriteError;
-  return zucchini::status::kStatusSuccess;
+  return zucchini::Generate(
+      params.file_paths[0], params.file_paths[1], params.file_paths[2],
+      params.command_line.HasSwitch(kSwitchKeep),
+      params.command_line.HasSwitch(kSwitchRaw),
+      params.command_line.GetSwitchValueASCII(kSwitchImpose));
 }
 
 zucchini::status::Code MainApply(MainParams params) {
diff --git a/components/zucchini/zucchini_gen.cc b/components/zucchini/zucchini_gen.cc
index 29be8147..19da0af 100644
--- a/components/zucchini/zucchini_gen.cc
+++ b/components/zucchini/zucchini_gen.cc
@@ -319,13 +319,13 @@
                           reference_bytes_mixer.get(), patch_writer);
 }
 
-status::Code GenerateEnsembleCommon(ConstBufferView old_image,
-                                    ConstBufferView new_image,
-                                    std::unique_ptr<EnsembleMatcher> matcher,
-                                    EnsemblePatchWriter* patch_writer) {
+status::Code GenerateBufferCommon(ConstBufferView old_image,
+                                  ConstBufferView new_image,
+                                  std::unique_ptr<EnsembleMatcher> matcher,
+                                  EnsemblePatchWriter* patch_writer) {
   if (!matcher->RunMatch(old_image, new_image)) {
     LOG(INFO) << "RunMatch() failed, generating raw patch.";
-    return GenerateRaw(old_image, new_image, patch_writer);
+    return GenerateBufferRaw(old_image, new_image, patch_writer);
   }
 
   const std::vector<ElementMatch>& matches = matcher->matches();
@@ -335,7 +335,7 @@
   size_t num_elements = matches.size();
   if (num_elements == 0) {
     LOG(INFO) << "No nontrival matches, generating raw patch.";
-    return GenerateRaw(old_image, new_image, patch_writer);
+    return GenerateBufferRaw(old_image, new_image, patch_writer);
   }
 
   // "Gaps" are |new_image| bytes not covered by new_elements in |matches|.
@@ -421,30 +421,29 @@
 
 /******** Exported Functions ********/
 
-status::Code GenerateEnsemble(ConstBufferView old_image,
-                              ConstBufferView new_image,
-                              EnsemblePatchWriter* patch_writer) {
-  return GenerateEnsembleCommon(
+status::Code GenerateBuffer(ConstBufferView old_image,
+                            ConstBufferView new_image,
+                            EnsemblePatchWriter* patch_writer) {
+  return GenerateBufferCommon(
       old_image, new_image, std::make_unique<HeuristicEnsembleMatcher>(nullptr),
       patch_writer);
 }
 
-status::Code GenerateEnsembleWithImposedMatches(
-    ConstBufferView old_image,
-    ConstBufferView new_image,
-    std::string imposed_matches,
-    EnsemblePatchWriter* patch_writer) {
+status::Code GenerateBufferImposed(ConstBufferView old_image,
+                                   ConstBufferView new_image,
+                                   std::string imposed_matches,
+                                   EnsemblePatchWriter* patch_writer) {
   if (imposed_matches.empty())
-    return GenerateEnsemble(old_image, new_image, patch_writer);
+    return GenerateBuffer(old_image, new_image, patch_writer);
 
-  return GenerateEnsembleCommon(
+  return GenerateBufferCommon(
       old_image, new_image,
       std::make_unique<ImposedEnsembleMatcher>(imposed_matches), patch_writer);
 }
 
-status::Code GenerateRaw(ConstBufferView old_image,
-                         ConstBufferView new_image,
-                         EnsemblePatchWriter* patch_writer) {
+status::Code GenerateBufferRaw(ConstBufferView old_image,
+                               ConstBufferView new_image,
+                               EnsemblePatchWriter* patch_writer) {
   ImageIndex old_image_index(old_image);
   EncodedView old_view(old_image_index);
   std::vector<offset_t> old_sa =
diff --git a/components/zucchini/zucchini_integration.cc b/components/zucchini/zucchini_integration.cc
index 1149658..97790a34 100644
--- a/components/zucchini/zucchini_integration.cc
+++ b/components/zucchini/zucchini_integration.cc
@@ -19,92 +19,172 @@
   FileNames() : is_dummy(true) {
     // Use fake names.
     old_name = old_name.AppendASCII("old_name");
-    patch_name = patch_name.AppendASCII("patch_name");
     new_name = new_name.AppendASCII("new_name");
+    patch_name = patch_name.AppendASCII("patch_name");
   }
 
   FileNames(const base::FilePath& old_name,
-            const base::FilePath& patch_name,
-            const base::FilePath& new_name)
+            const base::FilePath& new_name,
+            const base::FilePath& patch_name)
       : old_name(old_name),
-        patch_name(patch_name),
         new_name(new_name),
+        patch_name(patch_name),
         is_dummy(false) {}
 
   base::FilePath old_name;
-  base::FilePath patch_name;
   base::FilePath new_name;
+  base::FilePath patch_name;
 
   // A flag to decide whether the filenames are only for error output.
   const bool is_dummy;
 };
 
-status::Code ApplyCommon(base::File&& old_file_handle,
-                         base::File&& patch_file_handle,
-                         base::File&& new_file_handle,
-                         const FileNames& names,
-                         bool force_keep) {
-  MappedFileReader patch_file(std::move(patch_file_handle));
-  if (patch_file.HasError()) {
-    LOG(ERROR) << "Error with file " << names.patch_name.value() << ": "
-               << patch_file.error();
+status::Code GenerateCommon(base::File old_file,
+                            base::File new_file,
+                            base::File patch_file,
+                            const FileNames& names,
+                            bool force_keep,
+                            bool is_raw,
+                            std::string imposed_matches) {
+  MappedFileReader mapped_old(std::move(old_file));
+  if (mapped_old.HasError()) {
+    LOG(ERROR) << "Error with file " << names.old_name.value() << ": "
+               << mapped_old.error();
     return status::kStatusFileReadError;
   }
 
-  auto patch_reader =
-      zucchini::EnsemblePatchReader::Create(patch_file.region());
+  MappedFileReader mapped_new(std::move(new_file));
+  if (mapped_new.HasError()) {
+    LOG(ERROR) << "Error with file " << names.new_name.value() << ": "
+               << mapped_new.error();
+    return status::kStatusFileReadError;
+  }
+
+  status::Code result = status::kStatusSuccess;
+  EnsemblePatchWriter patch_writer(mapped_old.region(), mapped_new.region());
+  if (is_raw) {
+    result = GenerateBufferRaw(mapped_old.region(), mapped_new.region(),
+                               &patch_writer);
+  } else {
+    result = GenerateBufferImposed(mapped_old.region(), mapped_new.region(),
+                                   std::move(imposed_matches), &patch_writer);
+  }
+  if (result != status::kStatusSuccess) {
+    LOG(ERROR) << "Fatal error encountered when generating patch.";
+    return result;
+  }
+
+  // By default, delete patch on destruction, to avoid having lingering files in
+  // case of a failure. On Windows deletion can be done by the OS.
+  MappedFileWriter mapped_patch(names.patch_name, std::move(patch_file),
+                                patch_writer.SerializedSize());
+  if (mapped_patch.HasError()) {
+    LOG(ERROR) << "Error with file " << names.patch_name.value() << ": "
+               << mapped_patch.error();
+    return status::kStatusFileWriteError;
+  }
+  if (force_keep)
+    mapped_patch.Keep();
+
+  if (!patch_writer.SerializeInto(mapped_patch.region()))
+    return status::kStatusPatchWriteError;
+
+  // Successfully created patch. Explicitly request file to be kept.
+  if (!mapped_patch.Keep())
+    return status::kStatusFileWriteError;
+  return status::kStatusSuccess;
+}
+
+status::Code ApplyCommon(base::File old_file,
+                         base::File patch_file,
+                         base::File new_file,
+                         const FileNames& names,
+                         bool force_keep) {
+  MappedFileReader mapped_patch(std::move(patch_file));
+  if (mapped_patch.HasError()) {
+    LOG(ERROR) << "Error with file " << names.patch_name.value() << ": "
+               << mapped_patch.error();
+    return status::kStatusFileReadError;
+  }
+
+  auto patch_reader = EnsemblePatchReader::Create(mapped_patch.region());
   if (!patch_reader.has_value()) {
     LOG(ERROR) << "Error reading patch header.";
     return status::kStatusPatchReadError;
   }
 
-  MappedFileReader old_file(std::move(old_file_handle));
-  if (old_file.HasError()) {
+  MappedFileReader mapped_old(std::move(old_file));
+  if (mapped_old.HasError()) {
     LOG(ERROR) << "Error with file " << names.old_name.value() << ": "
-               << old_file.error();
+               << mapped_old.error();
     return status::kStatusFileReadError;
   }
 
-  zucchini::PatchHeader header = patch_reader->header();
+  PatchHeader header = patch_reader->header();
   // By default, delete output on destruction, to avoid having lingering files
   // in case of a failure. On Windows deletion can be done by the OS.
-  base::FilePath file_path;
-  if (!names.is_dummy)
-    file_path = base::FilePath(names.new_name);
-
-  MappedFileWriter new_file(file_path, std::move(new_file_handle),
-                            header.new_size);
-  if (new_file.HasError()) {
+  MappedFileWriter mapped_new(names.new_name, std::move(new_file),
+                              header.new_size);
+  if (mapped_new.HasError()) {
     LOG(ERROR) << "Error with file " << names.new_name.value() << ": "
-               << new_file.error();
+               << mapped_new.error();
     return status::kStatusFileWriteError;
   }
-
   if (force_keep)
-    new_file.Keep();
+    mapped_new.Keep();
 
-  zucchini::status::Code result =
-      zucchini::Apply(old_file.region(), *patch_reader, new_file.region());
+  status::Code result =
+      ApplyBuffer(mapped_old.region(), *patch_reader, mapped_new.region());
   if (result != status::kStatusSuccess) {
     LOG(ERROR) << "Fatal error encountered while applying patch.";
     return result;
   }
 
-  // Successfully patch |new_file|. Explicitly request file to be kept.
-  if (!new_file.Keep())
+  // Successfully patch |mapped_new|. Explicitly request file to be kept.
+  if (!mapped_new.Keep())
     return status::kStatusFileWriteError;
   return status::kStatusSuccess;
 }
 
 }  // namespace
 
-status::Code Apply(base::File&& old_file_handle,
-                   base::File&& patch_file_handle,
-                   base::File&& new_file_handle,
+status::Code Generate(base::File old_file,
+                      base::File new_file,
+                      base::File patch_file,
+                      bool force_keep,
+                      bool is_raw,
+                      std::string imposed_matches) {
+  const FileNames file_names;
+  return GenerateCommon(std::move(old_file), std::move(new_file),
+                        std::move(patch_file), file_names, force_keep, is_raw,
+                        std::move(imposed_matches));
+}
+
+status::Code Generate(const base::FilePath& old_path,
+                      const base::FilePath& new_path,
+                      const base::FilePath& patch_path,
+                      bool force_keep,
+                      bool is_raw,
+                      std::string imposed_matches) {
+  using base::File;
+  File old_file(old_path, File::FLAG_OPEN | File::FLAG_READ);
+  File new_file(new_path, File::FLAG_OPEN | File::FLAG_READ);
+  File patch_file(patch_path, File::FLAG_CREATE_ALWAYS | File::FLAG_READ |
+                                  File::FLAG_WRITE | File::FLAG_SHARE_DELETE |
+                                  File::FLAG_CAN_DELETE_ON_CLOSE);
+  const FileNames file_names(old_path, new_path, patch_path);
+  return GenerateCommon(std::move(old_file), std::move(new_file),
+                        std::move(patch_file), file_names, force_keep, is_raw,
+                        std::move(imposed_matches));
+}
+
+status::Code Apply(base::File old_file,
+                   base::File patch_file,
+                   base::File new_file,
                    bool force_keep) {
   const FileNames file_names;
-  return ApplyCommon(std::move(old_file_handle), std::move(patch_file_handle),
-                     std::move(new_file_handle), file_names, force_keep);
+  return ApplyCommon(std::move(old_file), std::move(patch_file),
+                     std::move(new_file), file_names, force_keep);
 }
 
 status::Code Apply(const base::FilePath& old_path,
@@ -117,7 +197,7 @@
   File new_file(new_path, File::FLAG_CREATE_ALWAYS | File::FLAG_READ |
                               File::FLAG_WRITE | File::FLAG_SHARE_DELETE |
                               File::FLAG_CAN_DELETE_ON_CLOSE);
-  const FileNames file_names(old_path, patch_path, new_path);
+  const FileNames file_names(old_path, new_path, patch_path);
   return ApplyCommon(std::move(old_file), std::move(patch_file),
                      std::move(new_file), file_names, force_keep);
 }
diff --git a/components/zucchini/zucchini_integration.h b/components/zucchini/zucchini_integration.h
index ce98b281..2ae6091 100644
--- a/components/zucchini/zucchini_integration.h
+++ b/components/zucchini/zucchini_integration.h
@@ -5,28 +5,59 @@
 #ifndef COMPONENTS_ZUCCHINI_ZUCCHINI_INTEGRATION_H_
 #define COMPONENTS_ZUCCHINI_ZUCCHINI_INTEGRATION_H_
 
+#include <string>
+
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "components/zucchini/zucchini.h"
 
+// Zucchini integration interface to wrap core Zucchini library with file I/O.
+
 namespace zucchini {
 
-// Applies the patch in |patch_file| to the bytes in |old_file| and writes the
-// result to |new_file|. Since this uses memory mapped files, crashes are
-// expected in case of I/O errors. On Windows, |new_file| is kept iff returned
+// Generates a patch to transform |old_file| to |new_file|, and writes the
+// result to |patch_file|. Since this uses memory mapped files, crashes are
+// expected in case of I/O errors. On Windows, |patch_file| is kept iff returned
 // code is kStatusSuccess or if |force_keep == true|, and is deleted otherwise.
 // For UNIX systems the caller needs to do cleanup since it has ownership of the
-// base::File params and Zucchini has no knowledge of which base::FilePath to
+// base::File params, and Zucchini has no knowledge of which base::FilePath to
+// delete. If |is_raw == true| then uses Raw Zucchini. If |imposed_matches| is
+// non-empty, then overrides default element detection and matching heuristics
+// with custom element matching encoded in |imposed_matches|, which should be
+// formatted as:
+//   "#+#=#+#,#+#=#+#,..."  (e.g., "1+2=3+4", "1+2=3+4,5+6=7+8"),
+// where "#+#=#+#" encodes a match as 4 unsigned integers:
+//   [offset in "old", size in "old", offset in "new", size in "new"].
+status::Code Generate(base::File old_file,
+                      base::File new_file,
+                      base::File patch_file,
+                      bool force_keep = false,
+                      bool is_raw = false,
+                      std::string imposed_matches = "");
+
+// Alternative Generate() interface that takes base::FilePath as arguments.
+// Performs proper cleanup in Windows and UNIX if failure occurs.
+status::Code Generate(const base::FilePath& old_path,
+                      const base::FilePath& new_path,
+                      const base::FilePath& patch_path,
+                      bool force_keep = false,
+                      bool is_raw = false,
+                      std::string imposed_matches = "");
+
+// Applies the patch in |patch_file| to |old_file|, and writes the result to
+// |new_file|. Since this uses memory mapped files, crashes are expected in case
+// of I/O errors. On Windows, |new_file| is kept iff returned code is
+// kStatusSuccess or if |force_keep == true|, and is deleted otherwise. For UNIX
+// systems the caller needs to do cleanup since it has ownership of the
+// base::File params, and Zucchini has no knowledge of which base::FilePath to
 // delete.
-status::Code Apply(base::File&& old_file,
-                   base::File&& patch_file,
-                   base::File&& new_file,
+status::Code Apply(base::File old_file,
+                   base::File patch_file,
+                   base::File new_file,
                    bool force_keep = false);
 
-// Applies the patch in |patch_path| to the bytes in |old_path| and writes the
-// result to |new_path|. Since this uses memory mapped files, crashes are
-// expected in case of I/O errors. |new_path| is kept iff returned code is
-// kStatusSuccess or if |force_keep == true|, and is deleted otherwise.
+// Alternative Apply() interface that takes base::FilePath as arguments.
+// Performs proper cleanup in Windows and UNIX if failure occurs.
 status::Code Apply(const base::FilePath& old_path,
                    const base::FilePath& patch_path,
                    const base::FilePath& new_path,
diff --git a/content/app/strings/content_strings.grd b/content/app/strings/content_strings.grd
index cd38af1a..c41154f 100644
--- a/content/app/strings/content_strings.grd
+++ b/content/app/strings/content_strings.grd
@@ -476,9 +476,6 @@
         <message name="IDS_AX_ROLE_BUTTON" desc="Accessibility role description for a button">
           button
         </message>
-        <message name="IDS_AX_ROLE_CELL" desc="Accessibility role description for a cell, like in a table or grid">
-          cell
-        </message>
         <message name="IDS_AX_ROLE_COLOR_WELL" desc="Accessibility role description for a color picker">
           color picker
         </message>
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc
index e6c9e4d..c35476d 100644
--- a/content/browser/accessibility/browser_accessibility_android.cc
+++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -510,7 +510,7 @@
       // No role description.
       break;
     case ax::mojom::Role::kCell:
-      message_id = IDS_AX_ROLE_CELL;
+      // No role description.
       break;
     case ax::mojom::Role::kCheckBox:
       message_id = IDS_AX_ROLE_CHECK_BOX;
diff --git a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
index ca76793..e88c8160 100644
--- a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/command_line.h"
 #include "base/guid.h"
 #include "base/run_loop.h"
+#include "base/strings/string_number_conversions.h"
 #include "content/browser/background_fetch/background_fetch_request_info.h"
 #include "content/browser/background_fetch/background_fetch_test_base.h"
 #include "content/browser/background_fetch/background_fetch_test_data_manager.h"
@@ -44,6 +45,8 @@
 const char kInitialTitle[] = "Initial Title";
 const char kUpdatedTitle[] = "Updated Title";
 
+constexpr size_t kResponseFileSize = 42u;
+
 void DidCreateRegistration(
     base::Closure quit_closure,
     blink::mojom::BackgroundFetchError* out_error,
@@ -84,7 +87,7 @@
         base::Time::Now(), BackgroundFetchResult::FailureReason::UNKNOWN));
   } else {
     request_info->SetResult(std::make_unique<BackgroundFetchResult>(
-        base::Time::Now(), base::FilePath(), 42u /* file_size */));
+        base::Time::Now(), base::FilePath(), kResponseFileSize));
   }
 }
 
@@ -110,6 +113,17 @@
          s1.completed_requests == s2.completed_requests;
 }
 
+std::vector<ServiceWorkerFetchRequest> CreateValidRequests(
+    const url::Origin& origin,
+    size_t num_requests = 1u) {
+  std::vector<ServiceWorkerFetchRequest> requests(num_requests);
+  for (size_t i = 0; i < requests.size(); i++) {
+    // Creates a URL of the form: `http://example.com/x`
+    requests[i].url = GURL(origin.GetURL().spec() + base::NumberToString(i));
+  }
+  return requests;
+}
+
 }  // namespace
 
 class BackgroundFetchDataManagerTest : public BackgroundFetchTestBase {
@@ -885,21 +899,66 @@
                           2 /* completed_requests */}));
 }
 
+TEST_F(BackgroundFetchDataManagerTest, DownloadTotalUpdated) {
+  int64_t sw_id = RegisterServiceWorker();
+  ASSERT_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, sw_id);
+
+  BackgroundFetchRegistrationId registration_id(
+      sw_id, origin(), kExampleDeveloperId, kExampleUniqueId);
+  auto requests = CreateValidRequests(origin(), 3u /* num_requests */);
+
+  BackgroundFetchOptions options;
+  blink::mojom::BackgroundFetchError error;
+  CreateRegistration(registration_id, requests, options, &error);
+  EXPECT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
+
+  auto registration =
+      GetRegistration(sw_id, origin(), kExampleDeveloperId, &error);
+  ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
+  EXPECT_EQ(registration->download_total, 0u);
+
+  scoped_refptr<BackgroundFetchRequestInfo> request_info;
+  PopNextRequest(registration_id, &request_info);
+  AnnotateRequestInfoWithFakeDownloadManagerData(request_info.get(),
+                                                 true /* succeeded */);
+  MarkRequestAsComplete(registration_id, request_info.get());
+
+  registration = GetRegistration(sw_id, origin(), kExampleDeveloperId, &error);
+  ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
+  EXPECT_EQ(registration->download_total, kResponseFileSize);
+
+  PopNextRequest(registration_id, &request_info);
+  AnnotateRequestInfoWithFakeDownloadManagerData(request_info.get(),
+                                                 true /* succeeded */);
+  MarkRequestAsComplete(registration_id, request_info.get());
+
+  registration = GetRegistration(sw_id, origin(), kExampleDeveloperId, &error);
+  ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
+  EXPECT_EQ(registration->download_total, 2 * kResponseFileSize);
+
+  PopNextRequest(registration_id, &request_info);
+  AnnotateRequestInfoWithFakeDownloadManagerData(request_info.get(),
+                                                 false /* succeeded */);
+  MarkRequestAsComplete(registration_id, request_info.get());
+
+  registration = GetRegistration(sw_id, origin(), kExampleDeveloperId, &error);
+  ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
+  // |download_total| is unchanged.
+  EXPECT_EQ(registration->download_total, 2 * kResponseFileSize);
+}
+
 TEST_F(BackgroundFetchDataManagerTest, WriteToCache) {
   int64_t sw_id = RegisterServiceWorker();
   ASSERT_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, sw_id);
 
   BackgroundFetchRegistrationId registration_id(
       sw_id, origin(), kExampleDeveloperId, kExampleUniqueId);
-  ServiceWorkerFetchRequest request1;
-  request1.url = GURL(origin().GetURL().spec() + "1");
-  ServiceWorkerFetchRequest request2;
-  request2.url = GURL(origin().GetURL().spec() + "2");
+  auto requests = CreateValidRequests(origin(), 2u /* num_requests */);
 
   BackgroundFetchOptions options;
   blink::mojom::BackgroundFetchError error;
 
-  CreateRegistration(registration_id, {request1, request2}, options, &error);
+  CreateRegistration(registration_id, requests, options, &error);
   EXPECT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
 
   scoped_refptr<BackgroundFetchRequestInfo> request_info;
@@ -913,8 +972,8 @@
   EXPECT_TRUE(HasCache(kExampleUniqueId));
   EXPECT_FALSE(HasCache("foo"));
 
-  EXPECT_TRUE(MatchCache(request1));
-  EXPECT_FALSE(MatchCache(request2));
+  EXPECT_TRUE(MatchCache(requests[0]));
+  EXPECT_FALSE(MatchCache(requests[1]));
 
   PopNextRequest(registration_id, &request_info);
   ASSERT_TRUE(request_info);
@@ -922,12 +981,12 @@
   AnnotateRequestInfoWithFakeDownloadManagerData(request_info.get(),
                                                  true /* success */);
   MarkRequestAsComplete(registration_id, request_info.get());
-  EXPECT_TRUE(MatchCache(request1));
-  EXPECT_TRUE(MatchCache(request2));
+  EXPECT_TRUE(MatchCache(requests[0]));
+  EXPECT_TRUE(MatchCache(requests[1]));
 
   RestartDataManagerFromPersistentStorage();
-  EXPECT_TRUE(MatchCache(request1));
-  EXPECT_TRUE(MatchCache(request2));
+  EXPECT_TRUE(MatchCache(requests[0]));
+  EXPECT_TRUE(MatchCache(requests[1]));
 }
 
 TEST_F(BackgroundFetchDataManagerTest, CacheDeleted) {
@@ -1021,14 +1080,11 @@
 
   BackgroundFetchRegistrationId registration_id(
       sw_id, origin(), kExampleDeveloperId, kExampleUniqueId);
-  ServiceWorkerFetchRequest request1;
-  request1.url = GURL(origin().GetURL().spec() + "1");
-  ServiceWorkerFetchRequest request2;
-  request2.url = GURL(origin().GetURL().spec() + "2");
+  auto requests = CreateValidRequests(origin(), 2u /* num_requests */);
 
   BackgroundFetchOptions options;
   blink::mojom::BackgroundFetchError error;
-  CreateRegistration(registration_id, {request1, request2}, options, &error);
+  CreateRegistration(registration_id, requests, options, &error);
   EXPECT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
 
   bool succeeded = false;
@@ -1066,8 +1122,8 @@
   ASSERT_EQ(settled_fetches.size(), 2u);
 
   // Sanity check that the responses are written to / read from the cache.
-  EXPECT_TRUE(MatchCache(request1));
-  EXPECT_TRUE(MatchCache(request2));
+  EXPECT_TRUE(MatchCache(requests[0]));
+  EXPECT_TRUE(MatchCache(requests[1]));
   EXPECT_EQ(settled_fetches[0].response.cache_storage_cache_name,
             kExampleUniqueId);
   EXPECT_EQ(settled_fetches[1].response.cache_storage_cache_name,
diff --git a/content/browser/background_fetch/storage/mark_request_complete_task.cc b/content/browser/background_fetch/storage/mark_request_complete_task.cc
index 6c05096..8b6f7da 100644
--- a/content/browser/background_fetch/storage/mark_request_complete_task.cc
+++ b/content/browser/background_fetch/storage/mark_request_complete_task.cc
@@ -4,6 +4,7 @@
 
 #include "content/browser/background_fetch/storage/mark_request_complete_task.h"
 
+#include "base/barrier_closure.h"
 #include "content/browser/background_fetch/background_fetch_data_manager.h"
 #include "content/browser/background_fetch/storage/database_helpers.h"
 #include "content/browser/cache_storage/cache_storage_manager.h"
@@ -32,10 +33,15 @@
 MarkRequestCompleteTask::~MarkRequestCompleteTask() = default;
 
 void MarkRequestCompleteTask::Start() {
-  StoreResponse();
+  base::RepeatingClosure barrier_closure = base::BarrierClosure(
+      2u, base::BindOnce(&MarkRequestCompleteTask::CheckAndCallFinished,
+                         weak_factory_.GetWeakPtr()));
+
+  StoreResponse(barrier_closure);
+  UpdateMetadata(barrier_closure);
 }
 
-void MarkRequestCompleteTask::StoreResponse() {
+void MarkRequestCompleteTask::StoreResponse(base::OnceClosure done_closure) {
   auto response = std::make_unique<ServiceWorkerResponse>();
 
   is_response_successful_ = data_manager()->FillServiceWorkerResponse(
@@ -43,7 +49,7 @@
 
   // A valid non-empty url is needed if we want to write to the cache.
   if (!request_info_->fetch_request().url.is_valid()) {
-    CreateAndStoreCompletedRequest();
+    CreateAndStoreCompletedRequest(std::move(done_closure));
     return;
   }
 
@@ -51,16 +57,18 @@
       registration_id_.origin(), CacheStorageOwner::kBackgroundFetch,
       registration_id_.unique_id() /* cache_name */,
       base::BindOnce(&MarkRequestCompleteTask::DidOpenCache,
-                     weak_factory_.GetWeakPtr(), std::move(response)));
+                     weak_factory_.GetWeakPtr(), std::move(response),
+                     std::move(done_closure)));
 }
 
 void MarkRequestCompleteTask::DidOpenCache(
     std::unique_ptr<ServiceWorkerResponse> response,
+    base::OnceClosure done_closure,
     CacheStorageCacheHandle handle,
     blink::mojom::CacheStorageError error) {
   if (error != blink::mojom::CacheStorageError::kSuccess) {
     // TODO(crbug.com/780025): Log failures to UMA.
-    CreateAndStoreCompletedRequest();
+    CreateAndStoreCompletedRequest(std::move(done_closure));
     return;
   }
   DCHECK(handle.value());
@@ -73,17 +81,20 @@
   handle.value()->Put(
       std::move(request), std::move(response),
       base::BindOnce(&MarkRequestCompleteTask::DidWriteToCache,
-                     weak_factory_.GetWeakPtr(), std::move(handle)));
+                     weak_factory_.GetWeakPtr(), std::move(handle),
+                     std::move(done_closure)));
 }
 
 void MarkRequestCompleteTask::DidWriteToCache(
     CacheStorageCacheHandle handle,
+    base::OnceClosure done_closure,
     blink::mojom::CacheStorageError error) {
   // TODO(crbug.com/780025): Log failures to UMA.
-  CreateAndStoreCompletedRequest();
+  CreateAndStoreCompletedRequest(std::move(done_closure));
 }
 
-void MarkRequestCompleteTask::CreateAndStoreCompletedRequest() {
+void MarkRequestCompleteTask::CreateAndStoreCompletedRequest(
+    base::OnceClosure done_closure) {
   completed_request_.set_unique_id(registration_id_.unique_id());
   completed_request_.set_request_index(request_info_->request_index());
   completed_request_.set_serialized_request(
@@ -97,11 +108,12 @@
       {{CompletedRequestKey(completed_request_.unique_id(),
                             completed_request_.request_index()),
         completed_request_.SerializeAsString()}},
-      base::BindRepeating(&MarkRequestCompleteTask::DidStoreCompletedRequest,
-                          weak_factory_.GetWeakPtr()));
+      base::BindOnce(&MarkRequestCompleteTask::DidStoreCompletedRequest,
+                     weak_factory_.GetWeakPtr(), std::move(done_closure)));
 }
 
 void MarkRequestCompleteTask::DidStoreCompletedRequest(
+    base::OnceClosure done_closure,
     ServiceWorkerStatusCode status) {
   switch (ToDatabaseStatus(status)) {
     case DatabaseStatus::kOk:
@@ -109,7 +121,7 @@
     case DatabaseStatus::kFailed:
     case DatabaseStatus::kNotFound:
       // TODO(crbug.com/780025): Log failures to UMA.
-      Finished();  // Destroys |this|.
+      std::move(done_closure).Run();
       return;
   }
 
@@ -119,24 +131,70 @@
       {ActiveRequestKey(completed_request_.unique_id(),
                         completed_request_.request_index())},
       base::BindOnce(&MarkRequestCompleteTask::DidDeleteActiveRequest,
-                     weak_factory_.GetWeakPtr()));
+                     weak_factory_.GetWeakPtr(), std::move(done_closure)));
 }
 
 void MarkRequestCompleteTask::DidDeleteActiveRequest(
+    base::OnceClosure done_closure,
+    ServiceWorkerStatusCode status) {
+  // TODO(crbug.com/780025): Log failures to UMA.
+  std::move(done_closure).Run();
+}
+
+void MarkRequestCompleteTask::UpdateMetadata(base::OnceClosure done_closure) {
+  if (!request_info_->IsResultSuccess() || request_info_->GetFileSize() == 0u) {
+    std::move(done_closure).Run();
+    return;
+  }
+
+  service_worker_context()->GetRegistrationUserData(
+      registration_id_.service_worker_registration_id(),
+      {RegistrationKey(registration_id_.unique_id())},
+      base::BindOnce(&MarkRequestCompleteTask::DidGetMetadata,
+                     weak_factory_.GetWeakPtr(), std::move(done_closure)));
+}
+
+void MarkRequestCompleteTask::DidGetMetadata(
+    base::OnceClosure done_closure,
+    const std::vector<std::string>& data,
     ServiceWorkerStatusCode status) {
   switch (ToDatabaseStatus(status)) {
     case DatabaseStatus::kNotFound:
     case DatabaseStatus::kFailed:
       // TODO(crbug.com/780025): Log failures to UMA.
-      break;
+      std::move(done_closure).Run();
+      return;
     case DatabaseStatus::kOk:
-      std::move(callback_).Run();
+      DCHECK_EQ(1u, data.size());
       break;
   }
 
-  Finished();  // Destroys |this|.
+  proto::BackgroundFetchMetadata metadata;
+  if (!metadata.ParseFromString(data.front())) {
+    NOTREACHED() << "Database is corrupt";  // TODO(crbug.com/780027): Nuke it.
+  }
 
-  // TODO(rayankans): Update download stats.
+  metadata.mutable_registration()->set_download_total(
+      metadata.registration().download_total() + request_info_->GetFileSize());
+
+  service_worker_context()->StoreRegistrationUserData(
+      registration_id_.service_worker_registration_id(),
+      registration_id_.origin().GetURL(),
+      {{RegistrationKey(registration_id_.unique_id()),
+        metadata.SerializeAsString()}},
+      base::BindOnce(&MarkRequestCompleteTask::DidStoreMetadata,
+                     weak_factory_.GetWeakPtr(), std::move(done_closure)));
+}
+
+void MarkRequestCompleteTask::DidStoreMetadata(base::OnceClosure done_closure,
+                                               ServiceWorkerStatusCode status) {
+  // TODO(crbug.com/780025): Log failures to UMA.
+  std::move(done_closure).Run();
+}
+
+void MarkRequestCompleteTask::CheckAndCallFinished() {
+  std::move(callback_).Run();
+  Finished();
 }
 
 }  // namespace background_fetch
diff --git a/content/browser/background_fetch/storage/mark_request_complete_task.h b/content/browser/background_fetch/storage/mark_request_complete_task.h
index 5e39ef1d..38c6160 100644
--- a/content/browser/background_fetch/storage/mark_request_complete_task.h
+++ b/content/browser/background_fetch/storage/mark_request_complete_task.h
@@ -38,20 +38,35 @@
   void Start() override;
 
  private:
-  void StoreResponse();
+  void StoreResponse(base::OnceClosure done_closure);
 
   void DidOpenCache(std::unique_ptr<ServiceWorkerResponse> response,
+                    base::OnceClosure done_closure,
                     CacheStorageCacheHandle handle,
                     blink::mojom::CacheStorageError error);
 
   void DidWriteToCache(CacheStorageCacheHandle handle,
+                       base::OnceClosure done_closure,
                        blink::mojom::CacheStorageError error);
 
-  void CreateAndStoreCompletedRequest();
+  void CreateAndStoreCompletedRequest(base::OnceClosure done_closure);
 
-  void DidStoreCompletedRequest(ServiceWorkerStatusCode status);
+  void DidStoreCompletedRequest(base::OnceClosure done_closure,
+                                ServiceWorkerStatusCode status);
 
-  void DidDeleteActiveRequest(ServiceWorkerStatusCode status);
+  void DidDeleteActiveRequest(base::OnceClosure done_closure,
+                              ServiceWorkerStatusCode status);
+
+  void UpdateMetadata(base::OnceClosure done_closure);
+
+  void DidGetMetadata(base::OnceClosure done_closure,
+                      const std::vector<std::string>& data,
+                      ServiceWorkerStatusCode status);
+
+  void DidStoreMetadata(base::OnceClosure done_closure,
+                        ServiceWorkerStatusCode status);
+
+  void CheckAndCallFinished();
 
   BackgroundFetchRegistrationId registration_id_;
   scoped_refptr<BackgroundFetchRequestInfo> request_info_;
diff --git a/content/browser/loader/cross_site_document_resource_handler.cc b/content/browser/loader/cross_site_document_resource_handler.cc
index abeffa4..baf23cba 100644
--- a/content/browser/loader/cross_site_document_resource_handler.cc
+++ b/content/browser/loader/cross_site_document_resource_handler.cc
@@ -573,11 +573,7 @@
   if (!info || info->GetChildID() == -1)
     return false;
 
-  // Don't block plugin requests with universal access (e.g., Flash).  Such
-  // requests are made without CORS, and thus dont have an Origin request
-  // header.  Other plugin requests (e.g., NaCl) are made using CORS and have an
-  // Origin request header.  If they fail the CORS check above, they should be
-  // blocked.
+  // Don't block plugin requests.
   // TODO(lukasza): Only disable CORB for plugins with universal access (see
   // PepperURLLoaderHost::has_universal_access_), because only such plugins may
   // have their own CORS-like mechanisms - e.g. crossdomain.xml in Flash).  We
diff --git a/content/browser/renderer_host/input/fling_scheduler_android.cc b/content/browser/renderer_host/input/fling_scheduler_android.cc
index fb3fb8fb..94ca5bf 100644
--- a/content/browser/renderer_host/input/fling_scheduler_android.cc
+++ b/content/browser/renderer_host/input/fling_scheduler_android.cc
@@ -29,7 +29,7 @@
     // If the root window does not have a Compositor (happens on Android
     // WebView), we'll never receive an OnAnimate call. In this case fall back
     // to BeginFrames coming from the host.
-    if (!window->GetCompositor()) {
+    if (!window || !window->GetCompositor()) {
       host_->SetNeedsBeginFrameForFlingProgress();
       return;
     }
diff --git a/content/browser/shared_worker/shared_worker_connector_impl.cc b/content/browser/shared_worker/shared_worker_connector_impl.cc
index 4b08ffd8..2fe70f5 100644
--- a/content/browser/shared_worker/shared_worker_connector_impl.cc
+++ b/content/browser/shared_worker/shared_worker_connector_impl.cc
@@ -33,19 +33,31 @@
     mojom::SharedWorkerInfoPtr info,
     mojom::SharedWorkerClientPtr client,
     blink::mojom::SharedWorkerCreationContextType creation_context_type,
-    mojo::ScopedMessagePipeHandle message_port) {
+    mojo::ScopedMessagePipeHandle message_port,
+    blink::mojom::BlobURLTokenPtr blob_url_token) {
   RenderProcessHost* host = RenderProcessHost::FromID(process_id_);
   // The render process was already terminated.
   if (!host) {
     client->OnScriptLoadFailed();
     return;
   }
+  scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory;
+  if (blob_url_token) {
+    if (!info->url.SchemeIsBlob()) {
+      mojo::ReportBadMessage("SWCI_BLOB_URL_TOKEN_FOR_NON_BLOB_URL");
+      return;
+    }
+    blob_url_loader_factory =
+        ChromeBlobStorageContext::URLLoaderFactoryForToken(
+            host->GetBrowserContext(), std::move(blob_url_token));
+  }
   SharedWorkerServiceImpl* service =
       static_cast<StoragePartitionImpl*>(host->GetStoragePartition())
           ->GetSharedWorkerService();
   service->ConnectToWorker(process_id_, frame_id_, std::move(info),
                            std::move(client), creation_context_type,
-                           blink::MessagePortChannel(std::move(message_port)));
+                           blink::MessagePortChannel(std::move(message_port)),
+                           std::move(blob_url_loader_factory));
 }
 
 }  // namespace content
diff --git a/content/browser/shared_worker/shared_worker_connector_impl.h b/content/browser/shared_worker/shared_worker_connector_impl.h
index 2c609c6..bd85820d 100644
--- a/content/browser/shared_worker/shared_worker_connector_impl.h
+++ b/content/browser/shared_worker/shared_worker_connector_impl.h
@@ -27,7 +27,8 @@
       mojom::SharedWorkerInfoPtr info,
       mojom::SharedWorkerClientPtr client,
       blink::mojom::SharedWorkerCreationContextType creation_context_type,
-      mojo::ScopedMessagePipeHandle message_port) override;
+      mojo::ScopedMessagePipeHandle message_port,
+      blink::mojom::BlobURLTokenPtr blob_url_token) override;
 
   const int process_id_;
   const int frame_id_;
diff --git a/content/browser/shared_worker/shared_worker_script_loader.cc b/content/browser/shared_worker/shared_worker_script_loader.cc
index d612e3c..194482b 100644
--- a/content/browser/shared_worker/shared_worker_script_loader.cc
+++ b/content/browser/shared_worker/shared_worker_script_loader.cc
@@ -76,8 +76,6 @@
     return;
   }
 
-  // TODO(falken): Support blob urls.
-
   LoadFromNetwork();
 }
 
diff --git a/content/browser/shared_worker/shared_worker_service_impl.cc b/content/browser/shared_worker/shared_worker_service_impl.cc
index 469c8b3..b78e52de 100644
--- a/content/browser/shared_worker/shared_worker_service_impl.cc
+++ b/content/browser/shared_worker/shared_worker_service_impl.cc
@@ -88,6 +88,8 @@
     std::unique_ptr<URLLoaderFactoryBundleInfo>
         factory_bundle_for_renderer_info,
     scoped_refptr<ServiceWorkerContextWrapper> context,
+    std::unique_ptr<network::SharedURLLoaderFactoryInfo>
+        blob_url_loader_factory_info,
     int process_id,
     base::OnceCallback<void(mojom::ServiceWorkerProviderInfoForSharedWorkerPtr,
                             network::mojom::URLLoaderFactoryAssociatedPtrInfo,
@@ -100,27 +102,37 @@
   base::WeakPtr<ServiceWorkerProviderHost> host =
       context->PreCreateHostForSharedWorker(process_id, &provider_info);
 
-  // Create the factory bundle for SharedWorkerScriptLoaderFactory to use to
-  // load the script.
-  scoped_refptr<URLLoaderFactoryBundle> factory_bundle =
-      base::MakeRefCounted<URLLoaderFactoryBundle>(
-          std::move(factory_bundle_for_browser_info));
+  // Create the URL loader factory for SharedWorkerScriptLoaderFactory to use to
+  // load the main script.
+  scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory;
+  if (blob_url_loader_factory_info) {
+    // If we have a blob_url_loader_factory just use that directly rather than
+    // creating a new URLLoaderFactoryBundle.
+    url_loader_factory = network::SharedURLLoaderFactory::Create(
+        std::move(blob_url_loader_factory_info));
+  } else {
+    // Create a factory bundle to use.
+    scoped_refptr<URLLoaderFactoryBundle> factory_bundle =
+        base::MakeRefCounted<URLLoaderFactoryBundle>(
+            std::move(factory_bundle_for_browser_info));
+    url_loader_factory = factory_bundle;
 
-  // Add the network factory to the bundle. The factory from
-  // CloneNetworkFactory() doesn't support reconnection to the network service
-  // after a crash, but it's OK since it's used for a single shared worker
-  // startup.
-  network::mojom::URLLoaderFactoryPtr network_factory_ptr;
-  loader_factory_getter->CloneNetworkFactory(
-      mojo::MakeRequest(&network_factory_ptr));
-  factory_bundle->SetDefaultFactory(std::move(network_factory_ptr));
+    // Add the network factory to the bundle. The factory from
+    // CloneNetworkFactory() doesn't support reconnection to the network service
+    // after a crash, but it's OK since it's used for a single shared worker
+    // startup.
+    network::mojom::URLLoaderFactoryPtr network_factory_ptr;
+    loader_factory_getter->CloneNetworkFactory(
+        mojo::MakeRequest(&network_factory_ptr));
+    factory_bundle->SetDefaultFactory(std::move(network_factory_ptr));
+  }
 
   // Create the SharedWorkerScriptLoaderFactory.
   network::mojom::URLLoaderFactoryAssociatedPtrInfo script_loader_factory;
   mojo::MakeStrongAssociatedBinding(
       std::make_unique<SharedWorkerScriptLoaderFactory>(
           context.get(), host->AsWeakPtr(), context->resource_context(),
-          std::move(factory_bundle)),
+          std::move(url_loader_factory)),
       mojo::MakeRequest(&script_loader_factory));
 
   // We continue in StartWorker.
@@ -179,7 +191,8 @@
     mojom::SharedWorkerInfoPtr info,
     mojom::SharedWorkerClientPtr client,
     blink::mojom::SharedWorkerCreationContextType creation_context_type,
-    const blink::MessagePortChannel& message_port) {
+    const blink::MessagePortChannel& message_port,
+    scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   RenderFrameHostImpl* render_frame_host =
@@ -231,7 +244,7 @@
   }
 
   CreateWorker(std::move(instance), std::move(client), process_id, frame_id,
-               message_port);
+               message_port, std::move(blob_url_loader_factory));
 }
 
 void SharedWorkerServiceImpl::DestroyHost(SharedWorkerHost* host) {
@@ -254,9 +267,12 @@
     mojom::SharedWorkerClientPtr client,
     int process_id,
     int frame_id,
-    const blink::MessagePortChannel& message_port) {
+    const blink::MessagePortChannel& message_port,
+    scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
+  DCHECK(!blob_url_loader_factory || instance->url().SchemeIsBlob());
+
   bool constructor_uses_file_url =
       instance->constructor_origin().scheme() == url::kFileScheme;
 
@@ -297,6 +313,8 @@
                 ->url_loader_factory_getter(),
             std::move(factory_bundle_for_browser),
             std::move(factory_bundle_for_renderer), service_worker_context_,
+            blob_url_loader_factory ? blob_url_loader_factory->Clone()
+                                    : nullptr,
             process_id,
             base::BindOnce(&SharedWorkerServiceImpl::StartWorker,
                            weak_factory_.GetWeakPtr(), std::move(instance),
diff --git a/content/browser/shared_worker/shared_worker_service_impl.h b/content/browser/shared_worker/shared_worker_service_impl.h
index 557e72ac2..46810fa5 100644
--- a/content/browser/shared_worker/shared_worker_service_impl.h
+++ b/content/browser/shared_worker/shared_worker_service_impl.h
@@ -53,7 +53,8 @@
       mojom::SharedWorkerInfoPtr info,
       mojom::SharedWorkerClientPtr client,
       blink::mojom::SharedWorkerCreationContextType creation_context_type,
-      const blink::MessagePortChannel& port);
+      const blink::MessagePortChannel& port,
+      scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory);
 
   void DestroyHost(SharedWorkerHost* host);
 
@@ -63,11 +64,13 @@
   friend class SharedWorkerServiceImplTest;
   friend class SharedWorkerHostTest;
 
-  void CreateWorker(std::unique_ptr<SharedWorkerInstance> instance,
-                    mojom::SharedWorkerClientPtr client,
-                    int process_id,
-                    int frame_id,
-                    const blink::MessagePortChannel& message_port);
+  void CreateWorker(
+      std::unique_ptr<SharedWorkerInstance> instance,
+      mojom::SharedWorkerClientPtr client,
+      int process_id,
+      int frame_id,
+      const blink::MessagePortChannel& message_port,
+      scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory);
   void StartWorker(std::unique_ptr<SharedWorkerInstance> instance,
                    base::WeakPtr<SharedWorkerHost> host,
                    mojom::SharedWorkerClientPtr client,
diff --git a/content/browser/shared_worker/shared_worker_service_impl_unittest.cc b/content/browser/shared_worker/shared_worker_service_impl_unittest.cc
index 2afa116..cf56ef37 100644
--- a/content/browser/shared_worker/shared_worker_service_impl_unittest.cc
+++ b/content/browser/shared_worker/shared_worker_service_impl_unittest.cc
@@ -114,7 +114,7 @@
 
   connector->Connect(std::move(info), std::move(client_proxy),
                      blink::mojom::SharedWorkerCreationContextType::kSecure,
-                     std::move(message_pipe.handle1));
+                     std::move(message_pipe.handle1), nullptr);
 }
 
 }  // namespace
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index c01282c..61284d4 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -465,6 +465,11 @@
   WebRuntimeFeatures::EnableAutoplayIgnoresWebAudio(
       base::FeatureList::IsEnabled(media::kAutoplayIgnoreWebAudio));
 
+#if defined(OS_ANDROID)
+  WebRuntimeFeatures::EnableMediaControlsExpandGesture(
+      base::FeatureList::IsEnabled(media::kMediaControlsExpandGesture));
+#endif
+
   // Enable explicitly enabled features, and then disable explicitly disabled
   // ones.
   for (const std::string& feature :
diff --git a/content/common/content_security_policy/csp_context.cc b/content/common/content_security_policy/csp_context.cc
index 7791627..aa19c5fd 100644
--- a/content/common/content_security_policy/csp_context.cc
+++ b/content/common/content_security_policy/csp_context.cc
@@ -65,11 +65,11 @@
 }
 
 void CSPContext::ModifyRequestUrlForCsp(GURL* url) {
-  if (url->scheme() == "http") {
+  if (url->SchemeIs(url::kHttpScheme)) {
+    // Updating the URL's scheme also implicitly updates the URL's port from 80
+    // to 443 if needed.
     GURL::Replacements replacements;
-    replacements.SetSchemeStr("https");
-    if (url->port() == "80")
-      replacements.SetPortStr("443");
+    replacements.SetSchemeStr(url::kHttpsScheme);
     *url = url->ReplaceComponents(replacements);
   }
 }
diff --git a/content/common/shared_worker/shared_worker_connector.mojom b/content/common/shared_worker/shared_worker_connector.mojom
index 39cd78c..a3f52a3 100644
--- a/content/common/shared_worker/shared_worker_connector.mojom
+++ b/content/common/shared_worker/shared_worker_connector.mojom
@@ -6,6 +6,7 @@
 
 import "content/common/shared_worker/shared_worker_client.mojom";
 import "content/common/shared_worker/shared_worker_info.mojom";
+import "third_party/blink/public/mojom/blob/blob_url_store.mojom";
 import "third_party/blink/public/mojom/shared_worker/shared_worker_creation_context_type.mojom";
 
 // This interface is exposed to enable a client to create and connect to a
@@ -13,8 +14,13 @@
 interface SharedWorkerConnector {
   // Connect to (and create if necessary) a SharedWorker specified by |info|.
   // The SharedWorker will be terminated if all clients go away.
+  // |blob_url_token| should be non-null when the worker is loaded from a blob:
+  // URL. The token will then be used to look up the blob associated with the
+  // blob URL. Without this by the time the worker code starts fetching
+  // the URL the blob URL might no longer be valid.
   Connect(SharedWorkerInfo info,
           SharedWorkerClient client,
           blink.mojom.SharedWorkerCreationContextType creation_context_type,
-          handle<message_pipe> message_port);
+          handle<message_pipe> message_port,
+          blink.mojom.BlobURLToken? blob_url_token);
 };
diff --git a/content/public/android/java/src/org/chromium/content/browser/LauncherThread.java b/content/public/android/java/src/org/chromium/content/browser/LauncherThread.java
index dd98f13..b710a0b4 100644
--- a/content/public/android/java/src/org/chromium/content/browser/LauncherThread.java
+++ b/content/public/android/java/src/org/chromium/content/browser/LauncherThread.java
@@ -6,6 +6,7 @@
 
 import android.os.Handler;
 import android.os.Looper;
+import android.os.Process;
 
 import org.chromium.base.JavaHandlerThread;
 import org.chromium.base.VisibleForTesting;
@@ -16,7 +17,7 @@
 @JNINamespace("content::android")
 public final class LauncherThread {
     private static final JavaHandlerThread sThread =
-            new JavaHandlerThread("Chrome_ProcessLauncherThread");
+            new JavaHandlerThread("Chrome_ProcessLauncherThread", Process.THREAD_PRIORITY_DEFAULT);
     private static final Handler sThreadHandler;
     // Can be overritten in tests.
     private static Handler sHandler;
diff --git a/content/public/browser/site_isolation_policy.cc b/content/public/browser/site_isolation_policy.cc
index ed59354e..391224b 100644
--- a/content/public/browser/site_isolation_policy.cc
+++ b/content/public/browser/site_isolation_policy.cc
@@ -87,6 +87,8 @@
   if (!params->is_corb_enabled)
     return;
 
+  params->corb_excluded_resource_type = RESOURCE_TYPE_PLUGIN_RESOURCE;
+
   const char* initiator_scheme_exception =
       GetContentClient()
           ->browser()
diff --git a/content/public/common/previews_state.h b/content/public/common/previews_state.h
index fcf4941..3b0d8d9d 100644
--- a/content/public/common/previews_state.h
+++ b/content/public/common/previews_state.h
@@ -38,7 +38,9 @@
                           // the resource. Server transformations may
                           // still happen if the page is heavy.
   NOSCRIPT_ON = 1 << 6,   // Request that script be disabled for page load.
-  PREVIEWS_STATE_LAST = NOSCRIPT_ON
+  RESOURCE_LOADING_HINTS_ON =
+      1 << 7,  // Request that resource loading hints be used during pageload.
+  PREVIEWS_STATE_LAST = RESOURCE_LOADING_HINTS_ON
 };
 
 // Combination of all previews that are guaranteed not to provide partial
@@ -61,6 +63,8 @@
                             blink::WebURLRequest::kPreviewsNoTransform);
 STATIC_ASSERT_PREVIEWS_ENUM(PREVIEWS_OFF, blink::WebURLRequest::kPreviewsOff);
 STATIC_ASSERT_PREVIEWS_ENUM(NOSCRIPT_ON, blink::WebURLRequest::kNoScriptOn);
+STATIC_ASSERT_PREVIEWS_ENUM(RESOURCE_LOADING_HINTS_ON,
+                            blink::WebURLRequest::kResourceLoadingHintsOn);
 STATIC_ASSERT_PREVIEWS_ENUM(PREVIEWS_STATE_LAST,
                             blink::WebURLRequest::kPreviewsStateLast);
 
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index cc2645a..bb97586 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -737,7 +737,6 @@
     "//third_party/opus",
     "//third_party/webrtc/api:libjingle_logging_api",
     "//third_party/webrtc/api:libjingle_peerconnection_api",
-    "//third_party/webrtc/api:optional",
     "//third_party/webrtc/api:rtc_stats_api",
     "//third_party/webrtc/api/audio:aec3_factory",
     "//third_party/webrtc/api/audio_codecs:audio_codecs_api",
diff --git a/content/renderer/media/stream/media_stream_center.cc b/content/renderer/media/stream/media_stream_center.cc
index 11bfa542..a5e056f 100644
--- a/content/renderer/media/stream/media_stream_center.cc
+++ b/content/renderer/media/stream/media_stream_center.cc
@@ -18,8 +18,10 @@
 #include "content/renderer/media/stream/media_stream_source.h"
 #include "content/renderer/media/stream/media_stream_video_source.h"
 #include "content/renderer/media/stream/media_stream_video_track.h"
+#include "content/renderer/media/stream/processed_local_audio_source.h"
 #include "content/renderer/media/stream/webaudio_media_stream_source.h"
 #include "content/renderer/media/webrtc_local_audio_source_provider.h"
+#include "media/base/sample_format.h"
 #include "third_party/blink/public/platform/web_media_constraints.h"
 #include "third_party/blink/public/platform/web_media_stream.h"
 #include "third_party/blink/public/platform/web_media_stream_source.h"
@@ -189,4 +191,28 @@
   source->StopSource();
 }
 
+void MediaStreamCenter::GetSourceSettings(
+    const blink::WebMediaStreamSource& web_source,
+    blink::WebMediaStreamTrack::Settings& settings) {
+  MediaStreamAudioSource* const source =
+      MediaStreamAudioSource::From(web_source);
+  if (!source)
+    return;
+
+  media::AudioParameters audio_parameters = source->GetAudioParameters();
+  settings.sample_rate = audio_parameters.sample_rate();
+  // kSampleFormatS16 is the format used for all audio input streams.
+  settings.sample_size =
+      media::SampleFormatToBitsPerChannel(media::kSampleFormatS16);
+  settings.channel_count = audio_parameters.channels();
+  settings.latency = audio_parameters.GetBufferDuration().InSecondsF();
+
+  ProcessedLocalAudioSource* const processed_source =
+      ProcessedLocalAudioSource::From(source);
+  settings.volume = processed_source
+                        ? static_cast<double>(processed_source->Volume()) /
+                              processed_source->MaxVolume()
+                        : 1.0;
+}
+
 }  // namespace content
diff --git a/content/renderer/media/stream/media_stream_center.h b/content/renderer/media/stream/media_stream_center.h
index 9c92ba4..a548a8db 100644
--- a/content/renderer/media/stream/media_stream_center.h
+++ b/content/renderer/media/stream/media_stream_center.h
@@ -44,6 +44,10 @@
   void DidStopMediaStreamSource(
       const blink::WebMediaStreamSource& web_source) override;
 
+  void GetSourceSettings(
+      const blink::WebMediaStreamSource& web_source,
+      blink::WebMediaStreamTrack::Settings& settings) override;
+
   DISALLOW_COPY_AND_ASSIGN(MediaStreamCenter);
 };
 
diff --git a/content/renderer/shared_worker/shared_worker_repository.cc b/content/renderer/shared_worker/shared_worker_repository.cc
index 562ef5b..a6dbd11 100644
--- a/content/renderer/shared_worker/shared_worker_repository.cc
+++ b/content/renderer/shared_worker/shared_worker_repository.cc
@@ -26,6 +26,7 @@
     blink::mojom::IPAddressSpace creation_address_space,
     blink::mojom::SharedWorkerCreationContextType creation_context_type,
     blink::MessagePortChannel channel,
+    mojo::ScopedMessagePipeHandle blob_url_token,
     std::unique_ptr<blink::WebSharedWorkerConnectListener> listener) {
   // Lazy bind the connector.
   if (!connector_)
@@ -40,8 +41,11 @@
             std::make_unique<SharedWorkerClientImpl>(std::move(listener)),
             mojo::MakeRequest(&client));
 
-  connector_->Connect(std::move(info), std::move(client), creation_context_type,
-                      channel.ReleaseHandle());
+  connector_->Connect(
+      std::move(info), std::move(client), creation_context_type,
+      channel.ReleaseHandle(),
+      blink::mojom::BlobURLTokenPtr(blink::mojom::BlobURLTokenPtrInfo(
+          std::move(blob_url_token), blink::mojom::BlobURLToken::Version_)));
 }
 
 void SharedWorkerRepository::DocumentDetached(DocumentID document_id) {
diff --git a/content/renderer/shared_worker/shared_worker_repository.h b/content/renderer/shared_worker/shared_worker_repository.h
index d0a8ce2..066976b 100644
--- a/content/renderer/shared_worker/shared_worker_repository.h
+++ b/content/renderer/shared_worker/shared_worker_repository.h
@@ -44,6 +44,7 @@
       blink::mojom::IPAddressSpace,
       blink::mojom::SharedWorkerCreationContextType,
       blink::MessagePortChannel channel,
+      mojo::ScopedMessagePipeHandle blob_url_token,
       std::unique_ptr<blink::WebSharedWorkerConnectListener> listener) override;
   void DocumentDetached(DocumentID document_id) override;
 
diff --git a/content/test/data/accessibility/aria/aria-col-attr-expected-android.txt b/content/test/data/accessibility/aria/aria-col-attr-expected-android.txt
index 5386067..bc07bdf 100644
--- a/content/test/data/accessibility/aria/aria-col-attr-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-col-attr-expected-android.txt
@@ -5,12 +5,12 @@
 ++++++android.view.View role_description='column header' collection_item heading name='cell 4' row_span=1 column_index=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='cell 5' row_span=1 column_index=2 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='cell 2' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='cell 3' row_index=1 row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='cell 4' row_index=1 row_span=1 column_index=2 column_span=1
-++++++android.view.View role_description='cell' collection_item name='cell 5' row_index=1 row_span=1 column_index=3 column_span=1
+++++++android.view.View collection_item name='cell 2' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='cell 3' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='cell 4' row_index=1 row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='cell 5' row_index=1 row_span=1 column_index=3 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/aria/aria-columnheader-expected-android.txt b/content/test/data/accessibility/aria/aria-columnheader-expected-android.txt
index eb45165..3b583e30 100644
--- a/content/test/data/accessibility/aria/aria-columnheader-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-columnheader-expected-android.txt
@@ -4,11 +4,11 @@
 ++++++android.view.View role_description='column header' collection_item heading name='Browser' row_span=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='Rendering Engine' row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Chrome' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Chrome' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Safari' row_index=2 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='WebKit' row_index=2 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Safari' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='WebKit' row_index=2 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/aria/aria-grid-expected-android.txt b/content/test/data/accessibility/aria/aria-grid-expected-android.txt
index fe41420..29086526 100644
--- a/content/test/data/accessibility/aria/aria-grid-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-grid-expected-android.txt
@@ -4,8 +4,8 @@
 ++++++android.view.View role_description='column header' collection_item heading name='Browser' row_span=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='Rendering Engine' row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Chrome' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Chrome' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/aria/aria-gridcell-expected-android.txt b/content/test/data/accessibility/aria/aria-gridcell-expected-android.txt
index fe41420..29086526 100644
--- a/content/test/data/accessibility/aria/aria-gridcell-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-gridcell-expected-android.txt
@@ -4,8 +4,8 @@
 ++++++android.view.View role_description='column header' collection_item heading name='Browser' row_span=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='Rendering Engine' row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Chrome' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Chrome' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/aria/aria-row-attr-expected-android.txt b/content/test/data/accessibility/aria/aria-row-attr-expected-android.txt
index d1a00a7..7979a4d 100644
--- a/content/test/data/accessibility/aria/aria-row-attr-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-row-attr-expected-android.txt
@@ -5,9 +5,9 @@
 ++++++android.view.View role_description='column header' collection_item heading name='cell 3' row_span=1 column_index=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='cell 4' row_span=1 column_index=2 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='cell 2' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='cell 3' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='cell 2' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='cell 3' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/aria/aria-row-expected-android.txt b/content/test/data/accessibility/aria/aria-row-expected-android.txt
index eb45165..3b583e30 100644
--- a/content/test/data/accessibility/aria/aria-row-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-row-expected-android.txt
@@ -4,11 +4,11 @@
 ++++++android.view.View role_description='column header' collection_item heading name='Browser' row_span=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='Rendering Engine' row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Chrome' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Chrome' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Safari' row_index=2 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='WebKit' row_index=2 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Safari' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='WebKit' row_index=2 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/aria/aria-rowheader-expected-android.txt b/content/test/data/accessibility/aria/aria-rowheader-expected-android.txt
index 1c96dc1..7a7e0615 100644
--- a/content/test/data/accessibility/aria/aria-rowheader-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-rowheader-expected-android.txt
@@ -2,13 +2,13 @@
 ++android.widget.GridView role_description='table' collection row_count=2 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Browser' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Chrome' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Safari' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='Chrome' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Safari' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Rendering Engine' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='WebKit' row_index=1 row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='WebKit' row_index=1 row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-android.txt b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-android.txt
index b8cbd44..30a2e8d 100644
--- a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-android.txt
@@ -3,52 +3,52 @@
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='B' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection row_count=3 column_count=1
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='B' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection row_count=3 column_count=1
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='B' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection row_count=3 column_count=1
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='B' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection row_count=3 column_count=1
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='B' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='B' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
@@ -56,8 +56,8 @@
 ++android.widget.GridView role_description='table' collection row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='B' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='B' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
@@ -65,8 +65,8 @@
 ++android.widget.GridView role_description='table' collection row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='B' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='B' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
@@ -74,8 +74,8 @@
 ++android.widget.GridView role_description='table' collection row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='B' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='B' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
@@ -83,9 +83,9 @@
 ++android.widget.GridView role_description='table' collection row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/aria/aria-sort-html-table-expected-android.txt b/content/test/data/accessibility/aria/aria-sort-html-table-expected-android.txt
index 16c7299..059d3e7 100644
--- a/content/test/data/accessibility/aria/aria-sort-html-table-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-sort-html-table-expected-android.txt
@@ -3,52 +3,52 @@
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='B' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection name='Data table' row_count=3 column_count=1
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='B' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection name='Data table' row_count=3 column_count=1
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='B' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection name='Data table' row_count=3 column_count=1
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='B' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection name='Data table' row_count=3 column_count=1
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='table' collection name='Data table' row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='B' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='B' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
@@ -56,8 +56,8 @@
 ++android.widget.GridView role_description='table' collection name='Data table' row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='B' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='B' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
@@ -65,8 +65,8 @@
 ++android.widget.GridView role_description='table' collection name='Data table' row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='B' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='B' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
@@ -74,8 +74,8 @@
 ++android.widget.GridView role_description='table' collection name='Data table' row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='B' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='B' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
@@ -83,8 +83,8 @@
 ++android.widget.GridView role_description='table' collection name='Data table' row_count=1 column_count=3
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Alphabet' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='A' row_span=1 column_index=2 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='A' row_span=1 column_index=2 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++++android.view.View
@@ -93,9 +93,9 @@
 ++++android.view.View
 ++++++android.view.View role_description='column header' collection_item heading name='Alphabet' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='A' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='A' row_index=1 row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='B' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=2 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++android.view.View name='Alphabet'
\ No newline at end of file
+++android.view.View name='Alphabet'
diff --git a/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt b/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt
index b93368432..7726e75 100644
--- a/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt
+++ b/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt
@@ -1,13 +1,13 @@
 android.webkit.WebView focusable focused scrollable
 ++android.widget.GridView role_description='tree grid' collection row_count=2 column_count=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Cell at level 1' row_span=1 column_span=1
+++++++android.view.View collection_item name='Cell at level 1' row_span=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Cell at level 2' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='Cell at level 2' row_index=1 row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
 ++android.widget.GridView role_description='tree grid' collection row_count=1 column_count=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Cell at level 1' row_span=1 column_span=1
+++++++android.view.View collection_item name='Cell at level 1' row_span=1 column_span=1
 ++++android.view.View
 ++++android.view.View
diff --git a/content/test/data/accessibility/html/caption-expected-android.txt b/content/test/data/accessibility/html/caption-expected-android.txt
index 1d55412..7a99728 100644
--- a/content/test/data/accessibility/html/caption-expected-android.txt
+++ b/content/test/data/accessibility/html/caption-expected-android.txt
@@ -5,11 +5,11 @@
 ++++++android.view.View role_description='column header' collection_item heading name='Browser' row_span=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='Engine' row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Chrome' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Chrome' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='Blink' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Safari' row_index=2 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='WebKit' row_index=2 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Safari' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='WebKit' row_index=2 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/html/table-simple-expected-android.txt b/content/test/data/accessibility/html/table-simple-expected-android.txt
index ad3fbee..73ed419 100644
--- a/content/test/data/accessibility/html/table-simple-expected-android.txt
+++ b/content/test/data/accessibility/html/table-simple-expected-android.txt
@@ -4,11 +4,11 @@
 ++++++android.view.View role_description='column header' collection_item heading name='Pair' row_span=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='Single' row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='AB' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='B' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='AB' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='B' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='CD' row_index=2 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='D' row_index=2 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='CD' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='D' row_index=2 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/html/table-th-colheader-expected-android.txt b/content/test/data/accessibility/html/table-th-colheader-expected-android.txt
index 73e1a333..5447bc7 100644
--- a/content/test/data/accessibility/html/table-th-colheader-expected-android.txt
+++ b/content/test/data/accessibility/html/table-th-colheader-expected-android.txt
@@ -4,8 +4,8 @@
 ++++++android.view.View role_description='column header' collection_item heading name='Firstname' row_span=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='Lastname' row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='Jill' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Smith' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Jill' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='Smith' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/html/table-th-rowheader-expected-android.txt b/content/test/data/accessibility/html/table-th-rowheader-expected-android.txt
index 13402f3..e3fa3e5 100644
--- a/content/test/data/accessibility/html/table-th-rowheader-expected-android.txt
+++ b/content/test/data/accessibility/html/table-th-rowheader-expected-android.txt
@@ -2,10 +2,10 @@
 ++android.widget.GridView role_description='table' collection row_count=2 column_count=2
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Firstname' row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Jill' row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Jill' row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++++android.view.View role_description='row header' collection_item heading name='Lastname' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='Smith' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='Smith' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-android.txt b/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-android.txt
index 8a4456f..597ebe0 100644
--- a/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-android.txt
+++ b/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-android.txt
@@ -4,14 +4,14 @@
 ++++++android.view.View role_description='column header' collection_item heading name='Sum' row_span=1 column_span=1
 ++++++android.view.View role_description='column header' collection_item heading name='Subtraction' row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='10' row_index=1 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='7' row_index=1 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='10' row_index=1 row_span=1 column_span=1
+++++++android.view.View collection_item name='7' row_index=1 row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='2' row_index=2 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='4' row_index=2 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='2' row_index=2 row_span=1 column_span=1
+++++++android.view.View collection_item name='4' row_index=2 row_span=1 column_index=1 column_span=1
 ++++android.view.View
-++++++android.view.View role_description='cell' collection_item name='12' row_index=3 row_span=1 column_span=1
-++++++android.view.View role_description='cell' collection_item name='3' row_index=3 row_span=1 column_index=1 column_span=1
+++++++android.view.View collection_item name='12' row_index=3 row_span=1 column_span=1
+++++++android.view.View collection_item name='3' row_index=3 row_span=1 column_index=1 column_span=1
 ++++android.view.View
 ++++android.view.View
-++++android.view.View
\ No newline at end of file
+++++android.view.View
diff --git a/docs/linux_debugging.md b/docs/linux_debugging.md
index d2baee6..aff0dd77 100644
--- a/docs/linux_debugging.md
+++ b/docs/linux_debugging.md
@@ -273,7 +273,7 @@
 splitting symbols from the object files. In GN, set `use_debug_fission=false` in
 your "gn args".
 
-### Source level debug with -fdebug-prefix-map
+### Source level debug with -fdebug-compilation-dir
 
 When you enable GN config `strip_absolute_paths_from_debug_symbols`, this is
 enabled by default for goma on Linux build, you need to add following command
diff --git a/docs/speed/apk_size_regressions.md b/docs/speed/apk_size_regressions.md
index f66429ab..4354530 100644
--- a/docs/speed/apk_size_regressions.md
+++ b/docs/speed/apk_size_regressions.md
@@ -29,8 +29,13 @@
 
      tools/binary_size/diagnose_bloat.py AFTER_GIT_REV --reference-rev BEFORE_GIT_REV --subrepo v8 --all
 
-You can usually find the before and after revs in the roll commit message
+ * You can usually find the before and after revs in the roll commit message
 ([example](https://chromium.googlesource.com/chromium/src/+/10c40fd863f4ae106650bba93b845f25c9b733b1))
+    * Note that you may need to click through the link for the list of changes
+      in order to find the actual first commit hash and use that one instead
+      since some rollers (including v8) use extra commits for tagging not in
+      master. In the linked example `BEFORE_GIT_REV` would actually be
+      `876f37c` and not `c1dec05f`.
 
 ### Monochrome.apk Alerts
 
diff --git a/extensions/browser/app_window/app_window.cc b/extensions/browser/app_window/app_window.cc
index 4ac5af1..089d386 100644
--- a/extensions/browser/app_window/app_window.cc
+++ b/extensions/browser/app_window/app_window.cc
@@ -320,9 +320,7 @@
     else if (new_params.state == ui::SHOW_STATE_MINIMIZED)
       Minimize();
 
-    // Panels are not activated by default.
-    Show(window_type_is_panel() || !new_params.focused ? SHOW_INACTIVE
-                                                       : SHOW_ACTIVE);
+    Show(new_params.focused ? SHOW_ACTIVE : SHOW_INACTIVE);
   }
 
   OnNativeWindowChanged();
@@ -879,14 +877,6 @@
 
 void AppWindow::RunFileChooser(content::RenderFrameHost* render_frame_host,
                                const content::FileChooserParams& params) {
-  if (window_type_is_panel()) {
-    // Panels can't host a file dialog, abort. TODO(stevenjb): allow file
-    // dialogs to be unhosted but still close with the owning web contents.
-    // crbug.com/172502.
-    LOG(WARNING) << "File dialog opened by panel.";
-    return;
-  }
-
   app_delegate_->RunFileChooser(render_frame_host, params);
 }
 
diff --git a/extensions/browser/app_window/app_window.h b/extensions/browser/app_window/app_window.h
index 6be617e..2b900665 100644
--- a/extensions/browser/app_window/app_window.h
+++ b/extensions/browser/app_window/app_window.h
@@ -91,7 +91,7 @@
   // Enum values should not be changed since they are used by UMA.
   enum WindowType {
     WINDOW_TYPE_DEFAULT = 0,  // Default app window.
-    WINDOW_TYPE_PANEL = 1,    // OS controlled panel window (Ash only).
+    DEPRECATED_WINDOW_TYPE_PANEL = 1,
     WINDOW_TYPE_COUNT = 2,
   };
 
@@ -218,9 +218,10 @@
       const std::vector<DraggableRegion>& regions);
 
   // The constructor and Init methods are public for constructing a AppWindow
-  // with a non-standard render interface (e.g. v1 apps using Ash Panels).
-  // Normally AppWindow::Create should be used.
-  // Takes ownership of |app_delegate| and |delegate|.
+  // with a non-standard render interface (e.g.
+  // lock_screen_apps::StateController, ChromeAppWindowClient). Normally
+  // AppWindow::Create should be used. Takes ownership of |app_delegate| and
+  // |delegate|.
   AppWindow(content::BrowserContext* context,
             AppDelegate* app_delegate,
             const Extension* extension);
@@ -237,9 +238,6 @@
   const std::string& extension_id() const { return extension_id_; }
   content::WebContents* web_contents() const;
   WindowType window_type() const { return window_type_; }
-  bool window_type_is_panel() const {
-    return window_type_ == WINDOW_TYPE_PANEL;
-  }
   content::BrowserContext* browser_context() const { return browser_context_; }
   const gfx::Image& custom_app_icon() const { return custom_app_icon_; }
   const GURL& app_icon_url() const { return app_icon_url_; }
@@ -290,7 +288,7 @@
   void UpdateDraggableRegions(const std::vector<DraggableRegion>& regions);
 
   // Updates the app image to |image|. Called internally from the image loader
-  // callback. Also called externally for v1 apps using Ash Panels.
+  // callback.
   void UpdateAppIcon(const gfx::Image& image);
 
   // Enable or disable fullscreen mode. |type| specifies which type of
diff --git a/extensions/browser/extension_host.cc b/extensions/browser/extension_host.cc
index 8017d64..b1bd458 100644
--- a/extensions/browser/extension_host.cc
+++ b/extensions/browser/extension_host.cc
@@ -64,7 +64,6 @@
       document_element_available_(false),
       initial_url_(url),
       extension_host_type_(host_type) {
-  // Not used for panels, see PanelHost.
   DCHECK(host_type == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE ||
          host_type == VIEW_TYPE_EXTENSION_DIALOG ||
          host_type == VIEW_TYPE_EXTENSION_POPUP);
diff --git a/extensions/components/native_app_window/native_app_window_views.cc b/extensions/components/native_app_window/native_app_window_views.cc
index bf95f76..59e4f97 100644
--- a/extensions/components/native_app_window/native_app_window_views.cc
+++ b/extensions/components/native_app_window/native_app_window_views.cc
@@ -218,7 +218,7 @@
 
 bool NativeAppWindowViews::CanMaximize() const {
   return resizable_ && !size_constraints_.HasMaximumSize() &&
-         !app_window_->window_type_is_panel() && !WidgetHasHitTestMask();
+         !WidgetHasHitTestMask();
 }
 
 bool NativeAppWindowViews::CanMinimize() const {
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index 554a8bf0..7bc4600 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -411,7 +411,7 @@
 void FeatureInfo::InitializeFeatures() {
   // Figure out what extensions to turn on.
   std::string extensions_string(gl::GetGLExtensionsFromCurrentContext());
-  gl::ExtensionSet extensions(gl::MakeExtensionSet(extensions_string));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(extensions_string));
 
   const char* version_str =
       reinterpret_cast<const char*>(glGetString(GL_VERSION));
@@ -427,7 +427,7 @@
   // the GL_NV_pixel_buffer_object extension is exposed by ANGLE when using the
   // passthrough command decoder
   bool pixel_buffers_exposed =
-      enable_es3 || gl::HasExtension(extensions, "GL_NV_pixel_buffer_object");
+      enable_es3 || gfx::HasExtension(extensions, "GL_NV_pixel_buffer_object");
 
   // Both decoders may bind pixel buffers if exposing an ES3 or WebGL 2 context
   // and the passthrough command decoder may also bind PBOs if
@@ -464,7 +464,7 @@
   // so the extension string is always exposed.
   AddExtensionString("GL_OES_vertex_array_object");
 
-  if (gl::HasExtension(extensions, "GL_ANGLE_translated_shader_source")) {
+  if (gfx::HasExtension(extensions, "GL_ANGLE_translated_shader_source")) {
     feature_flags_.angle_translated_shader_source = true;
   }
 
@@ -474,15 +474,15 @@
   bool enable_dxt3 = false;
   bool enable_dxt5 = false;
   bool have_s3tc =
-      gl::HasExtension(extensions, "GL_EXT_texture_compression_s3tc");
+      gfx::HasExtension(extensions, "GL_EXT_texture_compression_s3tc");
   bool have_dxt3 =
       have_s3tc ||
-      gl::HasExtension(extensions, "GL_ANGLE_texture_compression_dxt3");
+      gfx::HasExtension(extensions, "GL_ANGLE_texture_compression_dxt3");
   bool have_dxt5 =
       have_s3tc ||
-      gl::HasExtension(extensions, "GL_ANGLE_texture_compression_dxt5");
+      gfx::HasExtension(extensions, "GL_ANGLE_texture_compression_dxt5");
 
-  if (gl::HasExtension(extensions, "GL_EXT_texture_compression_dxt1") ||
+  if (gfx::HasExtension(extensions, "GL_EXT_texture_compression_dxt1") ||
       have_s3tc) {
     enable_dxt1 = true;
   }
@@ -533,7 +533,7 @@
   }
 
   bool have_astc =
-      gl::HasExtension(extensions, "GL_KHR_texture_compression_astc_ldr");
+      gfx::HasExtension(extensions, "GL_KHR_texture_compression_astc_ldr");
   if (have_astc) {
     feature_flags_.ext_texture_format_astc = true;
     AddExtensionString("GL_KHR_texture_compression_astc_ldr");
@@ -556,8 +556,8 @@
   }
 
   bool have_atc =
-      gl::HasExtension(extensions, "GL_AMD_compressed_ATC_texture") ||
-      gl::HasExtension(extensions, "GL_ATI_texture_compression_atitc");
+      gfx::HasExtension(extensions, "GL_AMD_compressed_ATC_texture") ||
+      gfx::HasExtension(extensions, "GL_ATI_texture_compression_atitc");
   if (have_atc) {
     feature_flags_.ext_texture_format_atc = true;
 
@@ -572,7 +572,7 @@
   }
 
   // Check if we should enable GL_EXT_texture_filter_anisotropic.
-  if (gl::HasExtension(extensions, "GL_EXT_texture_filter_anisotropic")) {
+  if (gfx::HasExtension(extensions, "GL_EXT_texture_filter_anisotropic")) {
     AddExtensionString("GL_EXT_texture_filter_anisotropic");
     validators_.texture_parameter.AddValue(GL_TEXTURE_MAX_ANISOTROPY_EXT);
     validators_.g_l_state.AddValue(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT);
@@ -593,9 +593,9 @@
   bool enable_depth_texture = false;
   GLenum depth_texture_format = GL_NONE;
   if (!workarounds_.disable_depth_texture &&
-      (gl::HasExtension(extensions, "GL_ARB_depth_texture") ||
-       gl::HasExtension(extensions, "GL_OES_depth_texture") ||
-       gl::HasExtension(extensions, "GL_ANGLE_depth_texture") ||
+      (gfx::HasExtension(extensions, "GL_ARB_depth_texture") ||
+       gfx::HasExtension(extensions, "GL_OES_depth_texture") ||
+       gfx::HasExtension(extensions, "GL_ANGLE_depth_texture") ||
        gl_version_info_->is_desktop_core_profile)) {
     // Note that we don't expose depth_texture extenion on top of ES3 if
     // the depth_texture extension isn't exposed by the ES3 driver.
@@ -604,7 +604,7 @@
     enable_depth_texture = true;
     depth_texture_format = GL_DEPTH_COMPONENT;
     feature_flags_.angle_depth_texture =
-        gl::HasExtension(extensions, "GL_ANGLE_depth_texture");
+        gfx::HasExtension(extensions, "GL_ANGLE_depth_texture");
   }
 
   if (enable_depth_texture) {
@@ -619,8 +619,8 @@
   }
 
   GLenum depth_stencil_texture_format = GL_NONE;
-  if (gl::HasExtension(extensions, "GL_EXT_packed_depth_stencil") ||
-      gl::HasExtension(extensions, "GL_OES_packed_depth_stencil") ||
+  if (gfx::HasExtension(extensions, "GL_EXT_packed_depth_stencil") ||
+      gfx::HasExtension(extensions, "GL_OES_packed_depth_stencil") ||
       gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile) {
     AddExtensionString("GL_OES_packed_depth_stencil");
     feature_flags_.packed_depth24_stencil8 = true;
@@ -652,9 +652,9 @@
   }
 
   if (gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile ||
-      gl::HasExtension(extensions, "GL_OES_vertex_array_object") ||
-      gl::HasExtension(extensions, "GL_ARB_vertex_array_object") ||
-      gl::HasExtension(extensions, "GL_APPLE_vertex_array_object")) {
+      gfx::HasExtension(extensions, "GL_OES_vertex_array_object") ||
+      gfx::HasExtension(extensions, "GL_ARB_vertex_array_object") ||
+      gfx::HasExtension(extensions, "GL_APPLE_vertex_array_object")) {
     feature_flags_.native_vertex_array_object = true;
   }
 
@@ -666,7 +666,7 @@
   }
 
   if (gl_version_info_->is_es3 ||
-      gl::HasExtension(extensions, "GL_OES_element_index_uint") ||
+      gfx::HasExtension(extensions, "GL_OES_element_index_uint") ||
       gl::HasDesktopGLFeatures()) {
     AddExtensionString("GL_OES_element_index_uint");
     validators_.index_type.AddValue(GL_UNSIGNED_INT);
@@ -675,8 +675,8 @@
   bool has_srgb_framebuffer_support = false;
   if (gl_version_info_->IsAtLeastGL(3, 2) ||
       (gl_version_info_->IsAtLeastGL(2, 0) &&
-       (gl::HasExtension(extensions, "GL_EXT_framebuffer_sRGB") ||
-        gl::HasExtension(extensions, "GL_ARB_framebuffer_sRGB")))) {
+       (gfx::HasExtension(extensions, "GL_EXT_framebuffer_sRGB") ||
+        gfx::HasExtension(extensions, "GL_ARB_framebuffer_sRGB")))) {
     feature_flags_.desktop_srgb_support = true;
     has_srgb_framebuffer_support = true;
   }
@@ -687,8 +687,8 @@
   // <format> in this case. So, even with GLES3 explicitly check for
   // GL_EXT_sRGB.
   if ((((gl_version_info_->is_es3 ||
-         gl::HasExtension(extensions, "GL_OES_rgb8_rgba8")) &&
-        gl::HasExtension(extensions, "GL_EXT_sRGB")) ||
+         gfx::HasExtension(extensions, "GL_OES_rgb8_rgba8")) &&
+        gfx::HasExtension(extensions, "GL_EXT_sRGB")) ||
        feature_flags_.desktop_srgb_support) &&
       IsWebGL1OrES2Context()) {
     feature_flags_.ext_srgb = true;
@@ -713,7 +713,7 @@
     // and the desktop extension GL_ARB_framebuffer_sRGB (part of the core in
     // 3.0).
     if (feature_flags_.desktop_srgb_support ||
-        gl::HasExtension(extensions, "GL_EXT_sRGB_write_control")) {
+        gfx::HasExtension(extensions, "GL_EXT_sRGB_write_control")) {
       feature_flags_.ext_srgb_write_control = true;
       AddExtensionString("GL_EXT_sRGB_write_control");
       validators_.capability.AddValue(GL_FRAMEBUFFER_SRGB_EXT);
@@ -721,7 +721,7 @@
   }
 
   // The extension GL_EXT_texture_sRGB_decode is the same on desktop and GLES.
-  if (gl::HasExtension(extensions, "GL_EXT_texture_sRGB_decode") &&
+  if (gfx::HasExtension(extensions, "GL_EXT_texture_sRGB_decode") &&
       !IsWebGLContext()) {
     AddExtensionString("GL_EXT_texture_sRGB_decode");
     validators_.texture_parameter.AddValue(GL_TEXTURE_SRGB_DECODE_EXT);
@@ -733,18 +733,18 @@
     // The draft extension EXT_texture_compression_s3tc_srgb also supports it
     // and is used if available (e.g. if ANGLE exposes it).
     have_s3tc_srgb =
-        gl::HasExtension(extensions, "GL_NV_sRGB_formats") ||
-        gl::HasExtension(extensions, "GL_EXT_texture_compression_s3tc_srgb");
+        gfx::HasExtension(extensions, "GL_NV_sRGB_formats") ||
+        gfx::HasExtension(extensions, "GL_EXT_texture_compression_s3tc_srgb");
   } else {
     // On desktop, strictly-speaking, S3TC+sRGB is only available if both
     // EXT_texture_sRGB and EXT_texture_compression_s3tc_srgb are available.
     //
     // However, on macOS, S3TC+sRGB is supported on OpenGL 4.1 with only
     // EXT_texture_compression_s3tc_srgb, so we allow that as well.
-    if (gl::HasExtension(extensions, "GL_EXT_texture_sRGB") ||
+    if (gfx::HasExtension(extensions, "GL_EXT_texture_sRGB") ||
         gl_version_info_->IsAtLeastGL(4, 1)) {
       have_s3tc_srgb =
-          gl::HasExtension(extensions, "GL_EXT_texture_compression_s3tc");
+          gfx::HasExtension(extensions, "GL_EXT_texture_compression_s3tc");
     }
   }
 
@@ -785,16 +785,16 @@
   // glTexStorage2D. WebGL never uses both BGRA and glTexStorage2D together
   // because WebGL API doesn't expose BGRA format. So allow both.
   bool has_apple_bgra =
-      gl::HasExtension(extensions, "GL_APPLE_texture_format_BGRA8888");
+      gfx::HasExtension(extensions, "GL_APPLE_texture_format_BGRA8888");
   bool has_ext_bgra =
-      gl::HasExtension(extensions, "GL_EXT_texture_format_BGRA8888");
+      gfx::HasExtension(extensions, "GL_EXT_texture_format_BGRA8888");
   bool enable_texture_format_bgra8888 =
       has_ext_bgra || has_apple_bgra || !gl_version_info_->is_es;
 
   bool has_ext_texture_storage =
-      gl::HasExtension(extensions, "GL_EXT_texture_storage");
+      gfx::HasExtension(extensions, "GL_EXT_texture_storage");
   bool has_arb_texture_storage =
-      gl::HasExtension(extensions, "GL_ARB_texture_storage");
+      gfx::HasExtension(extensions, "GL_ARB_texture_storage");
   bool has_texture_storage =
       !workarounds_.disable_texture_storage &&
       (has_ext_texture_storage || has_arb_texture_storage ||
@@ -855,7 +855,7 @@
   // require. On ES, support is indicated by the GL_EXT_read_format_bgra
   // extension.
   bool enable_read_format_bgra =
-      gl::HasExtension(extensions, "GL_EXT_read_format_bgra") ||
+      gfx::HasExtension(extensions, "GL_EXT_read_format_bgra") ||
       !gl_version_info_->is_es;
 
   if (enable_read_format_bgra) {
@@ -867,7 +867,7 @@
   // GL_ARB_ES3_compatibility adds support for some ES3 texture formats that are
   // not supported in desktop GL
   feature_flags_.arb_es3_compatibility =
-      gl::HasExtension(extensions, "GL_ARB_ES3_compatibility") &&
+      gfx::HasExtension(extensions, "GL_ARB_ES3_compatibility") &&
       !gl_version_info_->is_es;
 
   // glGetInteger64v for timestamps is implemented on the client side in a way
@@ -877,14 +877,14 @@
   // ES2. Thus we can enable GL_EXT_disjoint_timer_query on ES2 contexts even
   // though it does not support glGetInteger64v due to a specification bug.
   feature_flags_.ext_disjoint_timer_query =
-      gl::HasExtension(extensions, "GL_EXT_disjoint_timer_query");
+      gfx::HasExtension(extensions, "GL_EXT_disjoint_timer_query");
   if (feature_flags_.ext_disjoint_timer_query ||
-      gl::HasExtension(extensions, "GL_ARB_timer_query") ||
-      gl::HasExtension(extensions, "GL_EXT_timer_query")) {
+      gfx::HasExtension(extensions, "GL_ARB_timer_query") ||
+      gfx::HasExtension(extensions, "GL_EXT_timer_query")) {
     AddExtensionString("GL_EXT_disjoint_timer_query");
   }
 
-  if (gl::HasExtension(extensions, "GL_OES_rgb8_rgba8") ||
+  if (gfx::HasExtension(extensions, "GL_OES_rgb8_rgba8") ||
       gl::HasDesktopGLFeatures()) {
     AddExtensionString("GL_OES_rgb8_rgba8");
     validators_.render_buffer_format.AddValue(GL_RGB8_OES);
@@ -894,8 +894,8 @@
   // Check if we should allow GL_OES_texture_npot
   if (!disallowed_features_.npot_support &&
       (gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile ||
-       gl::HasExtension(extensions, "GL_ARB_texture_non_power_of_two") ||
-       gl::HasExtension(extensions, "GL_OES_texture_npot"))) {
+       gfx::HasExtension(extensions, "GL_ARB_texture_non_power_of_two") ||
+       gfx::HasExtension(extensions, "GL_OES_texture_npot"))) {
     AddExtensionString("GL_OES_texture_npot");
     feature_flags_.npot_ok = true;
   }
@@ -905,13 +905,13 @@
   // Check for multisample support
   if (!workarounds_.disable_chromium_framebuffer_multisample) {
     bool ext_has_multisample =
-        gl::HasExtension(extensions, "GL_ARB_framebuffer_object") ||
-        (gl::HasExtension(extensions, "GL_EXT_framebuffer_multisample") &&
-         gl::HasExtension(extensions, "GL_EXT_framebuffer_blit")) ||
+        gfx::HasExtension(extensions, "GL_ARB_framebuffer_object") ||
+        (gfx::HasExtension(extensions, "GL_EXT_framebuffer_multisample") &&
+         gfx::HasExtension(extensions, "GL_EXT_framebuffer_blit")) ||
         gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile;
     if (gl_version_info_->is_angle || gl_version_info_->is_swiftshader) {
       ext_has_multisample |=
-          gl::HasExtension(extensions, "GL_ANGLE_framebuffer_multisample");
+          gfx::HasExtension(extensions, "GL_ANGLE_framebuffer_multisample");
     }
     if (ext_has_multisample) {
       feature_flags_.chromium_framebuffer_multisample = true;
@@ -924,10 +924,10 @@
     }
   }
 
-  if (gl::HasExtension(extensions, "GL_EXT_multisampled_render_to_texture")) {
+  if (gfx::HasExtension(extensions, "GL_EXT_multisampled_render_to_texture")) {
     feature_flags_.multisampled_render_to_texture = true;
-  } else if (gl::HasExtension(extensions,
-                              "GL_IMG_multisampled_render_to_texture")) {
+  } else if (gfx::HasExtension(extensions,
+                               "GL_IMG_multisampled_render_to_texture")) {
     feature_flags_.multisampled_render_to_texture = true;
     feature_flags_.use_img_for_multisampled_render_to_texture = true;
   }
@@ -940,31 +940,34 @@
   }
 
   if (!gl_version_info_->is_es ||
-      gl::HasExtension(extensions, "GL_EXT_multisample_compatibility")) {
+      gfx::HasExtension(extensions, "GL_EXT_multisample_compatibility")) {
     AddExtensionString("GL_EXT_multisample_compatibility");
     feature_flags_.ext_multisample_compatibility = true;
     validators_.capability.AddValue(GL_MULTISAMPLE_EXT);
     validators_.capability.AddValue(GL_SAMPLE_ALPHA_TO_ONE_EXT);
   }
 
-  if (gl::HasExtension(extensions, "GL_INTEL_framebuffer_CMAA")) {
+  if (gfx::HasExtension(extensions, "GL_INTEL_framebuffer_CMAA")) {
     feature_flags_.chromium_screen_space_antialiasing = true;
     AddExtensionString("GL_CHROMIUM_screen_space_antialiasing");
   } else if (gl_version_info_->IsAtLeastGLES(3, 1) ||
              (gl_version_info_->IsAtLeastGL(3, 0) &&
-              gl::HasExtension(extensions, "GL_ARB_shading_language_420pack") &&
-              gl::HasExtension(extensions, "GL_ARB_texture_storage") &&
-              gl::HasExtension(extensions, "GL_ARB_texture_gather") &&
-              gl::HasExtension(extensions,
-                               "GL_ARB_explicit_uniform_location") &&
-              gl::HasExtension(extensions, "GL_ARB_explicit_attrib_location") &&
-              gl::HasExtension(extensions, "GL_ARB_shader_image_load_store"))) {
+              gfx::HasExtension(extensions,
+                                "GL_ARB_shading_language_420pack") &&
+              gfx::HasExtension(extensions, "GL_ARB_texture_storage") &&
+              gfx::HasExtension(extensions, "GL_ARB_texture_gather") &&
+              gfx::HasExtension(extensions,
+                                "GL_ARB_explicit_uniform_location") &&
+              gfx::HasExtension(extensions,
+                                "GL_ARB_explicit_attrib_location") &&
+              gfx::HasExtension(extensions,
+                                "GL_ARB_shader_image_load_store"))) {
     feature_flags_.chromium_screen_space_antialiasing = true;
     feature_flags_.use_chromium_screen_space_antialiasing_via_shaders = true;
     AddExtensionString("GL_CHROMIUM_screen_space_antialiasing");
   }
 
-  if (gl::HasExtension(extensions, "GL_OES_depth24") ||
+  if (gfx::HasExtension(extensions, "GL_OES_depth24") ||
       gl::HasDesktopGLFeatures() || gl_version_info_->is_es3) {
     AddExtensionString("GL_OES_depth24");
     feature_flags_.oes_depth24 = true;
@@ -972,7 +975,7 @@
   }
 
   if (gl_version_info_->is_es3 ||
-      gl::HasExtension(extensions, "GL_OES_standard_derivatives") ||
+      gfx::HasExtension(extensions, "GL_OES_standard_derivatives") ||
       gl::HasDesktopGLFeatures()) {
     AddExtensionString("GL_OES_standard_derivatives");
     feature_flags_.oes_standard_derivatives = true;
@@ -980,18 +983,18 @@
     validators_.g_l_state.AddValue(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES);
   }
 
-  if (gl::HasExtension(extensions, "GL_CHROMIUM_texture_filtering_hint")) {
+  if (gfx::HasExtension(extensions, "GL_CHROMIUM_texture_filtering_hint")) {
     AddExtensionString("GL_CHROMIUM_texture_filtering_hint");
     feature_flags_.chromium_texture_filtering_hint = true;
     validators_.hint_target.AddValue(GL_TEXTURE_FILTERING_HINT_CHROMIUM);
     validators_.g_l_state.AddValue(GL_TEXTURE_FILTERING_HINT_CHROMIUM);
   }
 
-  if (gl::HasExtension(extensions, "GL_OES_EGL_image_external")) {
+  if (gfx::HasExtension(extensions, "GL_OES_EGL_image_external")) {
     AddExtensionString("GL_OES_EGL_image_external");
     feature_flags_.oes_egl_image_external = true;
   }
-  if (gl::HasExtension(extensions, "GL_NV_EGL_stream_consumer_external")) {
+  if (gfx::HasExtension(extensions, "GL_NV_EGL_stream_consumer_external")) {
     AddExtensionString("GL_NV_EGL_stream_consumer_external");
     feature_flags_.nv_egl_stream_consumer_external = true;
   }
@@ -1007,7 +1010,7 @@
   // TODO(kainino): If we add a way to query whether ANGLE is exposing
   // native support for ETC1 textures, require that here. Otherwise, we could
   // co-opt the native-ETC2-support query discussed below.
-  if (gl::HasExtension(extensions, "GL_OES_compressed_ETC1_RGB8_texture") &&
+  if (gfx::HasExtension(extensions, "GL_OES_compressed_ETC1_RGB8_texture") &&
       !gl_version_info_->is_angle) {
     AddExtensionString("GL_OES_compressed_ETC1_RGB8_texture");
     feature_flags_.oes_compressed_etc1_rgb8_texture = true;
@@ -1023,7 +1026,7 @@
     validators_.UpdateETCCompressedTextureFormats();
   }
 
-  if (gl::HasExtension(extensions, "GL_AMD_compressed_ATC_texture")) {
+  if (gfx::HasExtension(extensions, "GL_AMD_compressed_ATC_texture")) {
     AddExtensionString("GL_AMD_compressed_ATC_texture");
     validators_.compressed_texture_format.AddValue(GL_ATC_RGB_AMD);
     validators_.compressed_texture_format.AddValue(
@@ -1038,7 +1041,7 @@
         GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD);
   }
 
-  if (gl::HasExtension(extensions, "GL_IMG_texture_compression_pvrtc")) {
+  if (gfx::HasExtension(extensions, "GL_IMG_texture_compression_pvrtc")) {
     AddExtensionString("GL_IMG_texture_compression_pvrtc");
     validators_.compressed_texture_format.AddValue(
         GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG);
@@ -1063,8 +1066,8 @@
   // IOSurface backed textures. We don't want applications to start using it;
   // they should use ordinary non-power-of-two textures. However, for unit
   // testing purposes we expose it on all supported platforms.
-  if (gl::HasExtension(extensions, "GL_ARB_texture_rectangle") ||
-      gl::HasExtension(extensions, "GL_ANGLE_texture_rectangle") ||
+  if (gfx::HasExtension(extensions, "GL_ARB_texture_rectangle") ||
+      gfx::HasExtension(extensions, "GL_ANGLE_texture_rectangle") ||
       gl_version_info_->is_desktop_core_profile) {
     AddExtensionString("GL_ARB_texture_rectangle");
     feature_flags_.arb_texture_rectangle = true;
@@ -1086,7 +1089,7 @@
   }
 #endif
 
-  if (gl::HasExtension(extensions, "GL_APPLE_ycbcr_422")) {
+  if (gfx::HasExtension(extensions, "GL_APPLE_ycbcr_422")) {
     AddExtensionString("GL_CHROMIUM_ycbcr_422_image");
     feature_flags_.chromium_image_ycbcr_422 = true;
   }
@@ -1101,7 +1104,7 @@
   feature_flags_.chromium_image_xb30 =
       gl_version_info_->IsAtLeastGL(3, 3) ||
       gl_version_info_->IsAtLeastGLES(3, 0) ||
-      gl::HasExtension(extensions, "GL_EXT_texture_type_2_10_10_10_REV");
+      gfx::HasExtension(extensions, "GL_EXT_texture_type_2_10_10_10_REV");
 #endif
   if (feature_flags_.chromium_image_xr30 ||
       feature_flags_.chromium_image_xb30) {
@@ -1114,7 +1117,7 @@
   // TODO(gman): Add support for these extensions.
   //     GL_OES_depth32
 
-  if (gl::HasExtension(extensions, "GL_ANGLE_texture_usage")) {
+  if (gfx::HasExtension(extensions, "GL_ANGLE_texture_usage")) {
     feature_flags_.angle_texture_usage = true;
     AddExtensionString("GL_ANGLE_texture_usage");
     validators_.texture_parameter.AddValue(GL_TEXTURE_USAGE_ANGLE);
@@ -1123,13 +1126,13 @@
   bool have_occlusion_query = gl_version_info_->IsAtLeastGLES(3, 0) ||
                               gl_version_info_->IsAtLeastGL(3, 3);
   bool have_ext_occlusion_query_boolean =
-      gl::HasExtension(extensions, "GL_EXT_occlusion_query_boolean");
+      gfx::HasExtension(extensions, "GL_EXT_occlusion_query_boolean");
   bool have_arb_occlusion_query2 =
-      gl::HasExtension(extensions, "GL_ARB_occlusion_query2");
+      gfx::HasExtension(extensions, "GL_ARB_occlusion_query2");
   bool have_arb_occlusion_query =
       (gl_version_info_->is_desktop_core_profile &&
        gl_version_info_->IsAtLeastGL(1, 5)) ||
-      gl::HasExtension(extensions, "GL_ARB_occlusion_query");
+      gfx::HasExtension(extensions, "GL_ARB_occlusion_query");
 
   if (have_occlusion_query || have_ext_occlusion_query_boolean ||
       have_arb_occlusion_query2 || have_arb_occlusion_query) {
@@ -1147,9 +1150,9 @@
         !have_arb_occlusion_query2;
   }
 
-  if (gl::HasExtension(extensions, "GL_ANGLE_instanced_arrays") ||
-      (gl::HasExtension(extensions, "GL_ARB_instanced_arrays") &&
-       gl::HasExtension(extensions, "GL_ARB_draw_instanced")) ||
+  if (gfx::HasExtension(extensions, "GL_ANGLE_instanced_arrays") ||
+      (gfx::HasExtension(extensions, "GL_ARB_instanced_arrays") &&
+       gfx::HasExtension(extensions, "GL_ARB_draw_instanced")) ||
       gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile) {
     AddExtensionString("GL_ANGLE_instanced_arrays");
     feature_flags_.angle_instanced_arrays = true;
@@ -1158,13 +1161,13 @@
 
   bool have_es2_draw_buffers_vendor_agnostic =
       gl_version_info_->is_desktop_core_profile ||
-      gl::HasExtension(extensions, "GL_ARB_draw_buffers") ||
-      gl::HasExtension(extensions, "GL_EXT_draw_buffers");
+      gfx::HasExtension(extensions, "GL_ARB_draw_buffers") ||
+      gfx::HasExtension(extensions, "GL_EXT_draw_buffers");
   bool can_emulate_es2_draw_buffers_on_es3_nv =
       gl_version_info_->is_es3 &&
-      gl::HasExtension(extensions, "GL_NV_draw_buffers");
+      gfx::HasExtension(extensions, "GL_NV_draw_buffers");
   bool is_webgl_compatibility_context =
-      gl::HasExtension(extensions, "GL_ANGLE_webgl_compatibility");
+      gfx::HasExtension(extensions, "GL_ANGLE_webgl_compatibility");
   bool have_es2_draw_buffers =
       !workarounds_.disable_ext_draw_buffers &&
       (have_es2_draw_buffers_vendor_agnostic ||
@@ -1213,7 +1216,7 @@
   }
 
   if (gl_version_info_->is_es3 ||
-      gl::HasExtension(extensions, "GL_EXT_blend_minmax") ||
+      gfx::HasExtension(extensions, "GL_EXT_blend_minmax") ||
       gl::HasDesktopGLFeatures()) {
     AddExtensionString("GL_EXT_blend_minmax");
     validators_.equation.AddValue(GL_MIN_EXT);
@@ -1223,13 +1226,13 @@
   }
 
   // TODO(dshwang): GLES3 supports gl_FragDepth, not gl_FragDepthEXT.
-  if (gl::HasExtension(extensions, "GL_EXT_frag_depth") ||
+  if (gfx::HasExtension(extensions, "GL_EXT_frag_depth") ||
       gl::HasDesktopGLFeatures()) {
     AddExtensionString("GL_EXT_frag_depth");
     feature_flags_.ext_frag_depth = true;
   }
 
-  if (gl::HasExtension(extensions, "GL_EXT_shader_texture_lod") ||
+  if (gfx::HasExtension(extensions, "GL_EXT_shader_texture_lod") ||
       gl::HasDesktopGLFeatures()) {
     AddExtensionString("GL_EXT_shader_texture_lod");
     feature_flags_.ext_shader_texture_lod = true;
@@ -1240,15 +1243,15 @@
 
   feature_flags_.map_buffer_range =
       gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile ||
-      gl::HasExtension(extensions, "GL_ARB_map_buffer_range") ||
-      gl::HasExtension(extensions, "GL_EXT_map_buffer_range");
+      gfx::HasExtension(extensions, "GL_ARB_map_buffer_range") ||
+      gfx::HasExtension(extensions, "GL_EXT_map_buffer_range");
 
   // Really it's part of core OpenGL 2.1 and up, but let's assume the
   // extension is still advertised.
   bool has_pixel_buffers =
       gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile ||
-      gl::HasExtension(extensions, "GL_ARB_pixel_buffer_object") ||
-      gl::HasExtension(extensions, "GL_NV_pixel_buffer_object");
+      gfx::HasExtension(extensions, "GL_ARB_pixel_buffer_object") ||
+      gfx::HasExtension(extensions, "GL_NV_pixel_buffer_object");
 
   // We will use either glMapBuffer() or glMapBufferRange() for async readbacks.
   if (has_pixel_buffers && ui_gl_fence_works &&
@@ -1257,14 +1260,14 @@
   }
 
   if (gl_version_info_->is_es3 ||
-      gl::HasExtension(extensions, "GL_ARB_sampler_objects")) {
+      gfx::HasExtension(extensions, "GL_ARB_sampler_objects")) {
     feature_flags_.enable_samplers = true;
     // TODO(dsinclair): Add AddExtensionString("GL_CHROMIUM_sampler_objects")
     // when available.
   }
 
   if ((gl_version_info_->is_es3 ||
-       gl::HasExtension(extensions, "GL_EXT_discard_framebuffer")) &&
+       gfx::HasExtension(extensions, "GL_EXT_discard_framebuffer")) &&
       !workarounds_.disable_discard_framebuffer) {
     // DiscardFramebufferEXT is automatically bound to InvalidateFramebuffer.
     AddExtensionString("GL_EXT_discard_framebuffer");
@@ -1278,13 +1281,14 @@
 
   if (!workarounds_.disable_blend_equation_advanced) {
     bool blend_equation_advanced_coherent =
-        gl::HasExtension(extensions,
-                         "GL_NV_blend_equation_advanced_coherent") ||
-        gl::HasExtension(extensions, "GL_KHR_blend_equation_advanced_coherent");
+        gfx::HasExtension(extensions,
+                          "GL_NV_blend_equation_advanced_coherent") ||
+        gfx::HasExtension(extensions,
+                          "GL_KHR_blend_equation_advanced_coherent");
 
     if (blend_equation_advanced_coherent ||
-        gl::HasExtension(extensions, "GL_NV_blend_equation_advanced") ||
-        gl::HasExtension(extensions, "GL_KHR_blend_equation_advanced")) {
+        gfx::HasExtension(extensions, "GL_NV_blend_equation_advanced") ||
+        gfx::HasExtension(extensions, "GL_KHR_blend_equation_advanced")) {
       const GLenum equations[] = {
           GL_MULTIPLY_KHR,       GL_SCREEN_KHR,    GL_OVERLAY_KHR,
           GL_DARKEN_KHR,         GL_LIGHTEN_KHR,   GL_COLORDODGE_KHR,
@@ -1304,18 +1308,18 @@
     }
   }
 
-  if (gl::HasExtension(extensions, "GL_NV_framebuffer_mixed_samples")) {
+  if (gfx::HasExtension(extensions, "GL_NV_framebuffer_mixed_samples")) {
     AddExtensionString("GL_CHROMIUM_framebuffer_mixed_samples");
     feature_flags_.chromium_framebuffer_mixed_samples = true;
     validators_.g_l_state.AddValue(GL_COVERAGE_MODULATION_CHROMIUM);
   }
 
-  if (gl::HasExtension(extensions, "GL_NV_path_rendering")) {
+  if (gfx::HasExtension(extensions, "GL_NV_path_rendering")) {
     bool has_dsa = gl_version_info_->IsAtLeastGL(4, 5) ||
-                   gl::HasExtension(extensions, "GL_EXT_direct_state_access");
+                   gfx::HasExtension(extensions, "GL_EXT_direct_state_access");
     bool has_piq =
         gl_version_info_->IsAtLeastGL(4, 3) ||
-        gl::HasExtension(extensions, "GL_ARB_program_interface_query");
+        gfx::HasExtension(extensions, "GL_ARB_program_interface_query");
     bool has_fms = feature_flags_.chromium_framebuffer_mixed_samples;
     if ((gl_version_info_->IsAtLeastGLES(3, 1) ||
          (gl_version_info_->IsAtLeastGL(3, 2) && has_dsa && has_piq)) &&
@@ -1331,8 +1335,8 @@
   }
 
   if ((gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile ||
-       gl::HasExtension(extensions, "GL_EXT_texture_rg") ||
-       gl::HasExtension(extensions, "GL_ARB_texture_rg")) &&
+       gfx::HasExtension(extensions, "GL_EXT_texture_rg") ||
+       gfx::HasExtension(extensions, "GL_ARB_texture_rg")) &&
       IsGL_REDSupportedOnFBOs()) {
     feature_flags_.ext_texture_rg = true;
     AddExtensionString("GL_EXT_texture_rg");
@@ -1361,8 +1365,8 @@
 
   if (gl_version_info_->is_desktop_core_profile ||
       (gl_version_info_->IsAtLeastGL(2, 1) &&
-       gl::HasExtension(extensions, "GL_ARB_texture_rg")) ||
-      gl::HasExtension(extensions, "GL_EXT_texture_norm16")) {
+       gfx::HasExtension(extensions, "GL_ARB_texture_rg")) ||
+      gfx::HasExtension(extensions, "GL_EXT_texture_norm16")) {
     // TODO(hubbe): Rename ext_texture_norm16 to texture_r16
     feature_flags_.ext_texture_norm16 = true;
     g_r16_is_present = true;
@@ -1381,7 +1385,7 @@
       "GPU.TextureR16Ext_LuminanceF16", GpuTextureUMAHelper(),
       static_cast<int>(GpuTextureResultR16_L16::kMax) + 1);
 
-  if (enable_es3 && gl::HasExtension(extensions, "GL_EXT_window_rectangles")) {
+  if (enable_es3 && gfx::HasExtension(extensions, "GL_EXT_window_rectangles")) {
     AddExtensionString("GL_EXT_window_rectangles");
     feature_flags_.ext_window_rectangles = true;
     validators_.g_l_state.AddValue(GL_WINDOW_RECTANGLE_MODE_EXT);
@@ -1393,12 +1397,12 @@
   bool has_opengl_dual_source_blending =
       gl_version_info_->IsAtLeastGL(3, 3) ||
       (gl_version_info_->IsAtLeastGL(3, 2) &&
-       gl::HasExtension(extensions, "GL_ARB_blend_func_extended"));
+       gfx::HasExtension(extensions, "GL_ARB_blend_func_extended"));
   if (!disable_shader_translator_ && !workarounds_.get_frag_data_info_bug &&
       ((gl_version_info_->IsAtLeastGL(3, 2) &&
         has_opengl_dual_source_blending) ||
        (gl_version_info_->IsAtLeastGLES(3, 0) &&
-        gl::HasExtension(extensions, "GL_EXT_blend_func_extended")))) {
+        gfx::HasExtension(extensions, "GL_EXT_blend_func_extended")))) {
     // Note: to simplify the code, we do not expose EXT_blend_func_extended
     // unless the service context supports ES 3.0. This means the theoretical ES
     // 2.0 implementation with EXT_blend_func_extended is not sufficient.
@@ -1438,42 +1442,42 @@
   }
 
   feature_flags_.angle_robust_client_memory =
-      gl::HasExtension(extensions, "GL_ANGLE_robust_client_memory");
+      gfx::HasExtension(extensions, "GL_ANGLE_robust_client_memory");
 
   feature_flags_.khr_debug = gl_version_info_->IsAtLeastGL(4, 3) ||
                              gl_version_info_->IsAtLeastGLES(3, 2) ||
-                             gl::HasExtension(extensions, "GL_KHR_debug");
+                             gfx::HasExtension(extensions, "GL_KHR_debug");
 
   feature_flags_.chromium_gpu_fence = gl::GLFence::IsGpuFenceSupported();
   if (feature_flags_.chromium_gpu_fence)
     AddExtensionString("GL_CHROMIUM_gpu_fence");
 
   feature_flags_.chromium_bind_generates_resource =
-      gl::HasExtension(extensions, "GL_CHROMIUM_bind_generates_resource");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_bind_generates_resource");
   feature_flags_.angle_webgl_compatibility = is_webgl_compatibility_context;
   feature_flags_.chromium_copy_texture =
-      gl::HasExtension(extensions, "GL_CHROMIUM_copy_texture");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_copy_texture");
   feature_flags_.chromium_copy_compressed_texture =
-      gl::HasExtension(extensions, "GL_CHROMIUM_copy_compressed_texture");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_copy_compressed_texture");
   feature_flags_.angle_client_arrays =
-      gl::HasExtension(extensions, "GL_ANGLE_client_arrays");
+      gfx::HasExtension(extensions, "GL_ANGLE_client_arrays");
   feature_flags_.angle_request_extension =
-      gl::HasExtension(extensions, "GL_ANGLE_request_extension");
+      gfx::HasExtension(extensions, "GL_ANGLE_request_extension");
   feature_flags_.ext_debug_marker =
-      gl::HasExtension(extensions, "GL_EXT_debug_marker");
+      gfx::HasExtension(extensions, "GL_EXT_debug_marker");
   feature_flags_.arb_robustness =
-      gl::HasExtension(extensions, "GL_ARB_robustness");
+      gfx::HasExtension(extensions, "GL_ARB_robustness");
   feature_flags_.khr_robustness =
-      gl::HasExtension(extensions, "GL_KHR_robustness");
+      gfx::HasExtension(extensions, "GL_KHR_robustness");
   feature_flags_.ext_robustness =
-      gl::HasExtension(extensions, "GL_EXT_robustness");
+      gfx::HasExtension(extensions, "GL_EXT_robustness");
   feature_flags_.ext_pixel_buffer_object =
-      gl::HasExtension(extensions, "GL_NV_pixel_buffer_object");
+      gfx::HasExtension(extensions, "GL_NV_pixel_buffer_object");
   feature_flags_.oes_rgb8_rgba8 =
-      gl::HasExtension(extensions, "GL_OES_rgb8_rgba8");
+      gfx::HasExtension(extensions, "GL_OES_rgb8_rgba8");
   feature_flags_.angle_robust_resource_initialization =
-      gl::HasExtension(extensions, "GL_ANGLE_robust_resource_initialization");
-  feature_flags_.nv_fence = gl::HasExtension(extensions, "GL_NV_fence");
+      gfx::HasExtension(extensions, "GL_ANGLE_robust_resource_initialization");
+  feature_flags_.nv_fence = gfx::HasExtension(extensions, "GL_NV_fence");
 
   // UnpremultiplyAndDitherCopyCHROMIUM is only implemented on the full decoder.
   feature_flags_.unpremultiply_and_dither_copy = !is_passthrough_cmd_decoder_;
@@ -1489,7 +1493,7 @@
 }
 
 void FeatureInfo::InitializeFloatAndHalfFloatFeatures(
-    const gl::ExtensionSet& extensions) {
+    const gfx::ExtensionSet& extensions) {
   // Check if we should allow GL_OES_texture_float, GL_OES_texture_half_float,
   // GL_OES_texture_float_linear, GL_OES_texture_half_float_linear
   bool enable_texture_float = false;
@@ -1505,9 +1509,9 @@
 
   // These extensions allow a variety of floating point formats to be
   // rendered to via framebuffer objects.
-  if (gl::HasExtension(extensions, "GL_EXT_color_buffer_float"))
+  if (gfx::HasExtension(extensions, "GL_EXT_color_buffer_float"))
     enable_ext_color_buffer_float = true;
-  if (gl::HasExtension(extensions, "GL_EXT_color_buffer_half_float")) {
+  if (gfx::HasExtension(extensions, "GL_EXT_color_buffer_half_float")) {
     // TODO(zmo): even if the underlying driver reports the extension, WebGL
     // version of the extension requires RGBA16F to be color-renderable,
     // whereas the OpenGL ES extension only requires one of the format to be
@@ -1516,7 +1520,7 @@
     enable_ext_color_buffer_half_float = true;
   }
 
-  if (gl::HasExtension(extensions, "GL_ARB_texture_float") ||
+  if (gfx::HasExtension(extensions, "GL_ARB_texture_float") ||
       gl_version_info_->is_desktop_core_profile) {
     enable_texture_float = true;
     enable_texture_float_linear = true;
@@ -1526,24 +1530,24 @@
   } else {
     // GLES3 adds support for Float type by default but it doesn't support all
     // formats as GL_OES_texture_float(i.e.LUMINANCE_ALPHA,LUMINANCE and Alpha)
-    if (gl::HasExtension(extensions, "GL_OES_texture_float")) {
+    if (gfx::HasExtension(extensions, "GL_OES_texture_float")) {
       enable_texture_float = true;
       if (enable_ext_color_buffer_float) {
         may_enable_chromium_color_buffer_float = true;
       }
     }
 
-    if (gl::HasExtension(extensions, "GL_OES_texture_float_linear")) {
+    if (gfx::HasExtension(extensions, "GL_OES_texture_float_linear")) {
       enable_texture_float_linear = true;
     }
 
     // TODO(dshwang): GLES3 supports half float by default but GL_HALF_FLOAT_OES
     // isn't equal to GL_HALF_FLOAT.
-    if (gl::HasExtension(extensions, "GL_OES_texture_half_float")) {
+    if (gfx::HasExtension(extensions, "GL_OES_texture_half_float")) {
       enable_texture_half_float = true;
     }
 
-    if (gl::HasExtension(extensions, "GL_OES_texture_half_float_linear")) {
+    if (gfx::HasExtension(extensions, "GL_OES_texture_half_float_linear")) {
       enable_texture_half_float_linear = true;
     }
   }
@@ -1573,7 +1577,7 @@
   }
 
   bool had_native_chromium_color_buffer_float_ext = false;
-  if (gl::HasExtension(extensions, "GL_CHROMIUM_color_buffer_float_rgb")) {
+  if (gfx::HasExtension(extensions, "GL_CHROMIUM_color_buffer_float_rgb")) {
     had_native_chromium_color_buffer_float_ext = true;
     feature_flags_.chromium_color_buffer_float_rgb = true;
     if (!disallowed_features_.chromium_color_buffer_float_rgb) {
@@ -1581,7 +1585,7 @@
     }
   }
 
-  if (gl::HasExtension(extensions, "GL_CHROMIUM_color_buffer_float_rgba")) {
+  if (gfx::HasExtension(extensions, "GL_CHROMIUM_color_buffer_float_rgba")) {
     had_native_chromium_color_buffer_float_ext = true;
     feature_flags_.chromium_color_buffer_float_rgba = true;
     if (!disallowed_features_.chromium_color_buffer_float_rgba) {
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h
index 6cb7c4c1..8352d0f7 100644
--- a/gpu/command_buffer/service/feature_info.h
+++ b/gpu/command_buffer/service/feature_info.h
@@ -16,7 +16,7 @@
 #include "gpu/config/gpu_driver_bug_workarounds.h"
 #include "gpu/config/gpu_feature_info.h"
 #include "gpu/gpu_gles2_export.h"
-#include "ui/gl/extension_set.h"
+#include "ui/gfx/extension_set.h"
 
 namespace base {
 class CommandLine;
@@ -155,7 +155,7 @@
 
   ContextType context_type() const { return context_type_; }
 
-  const gl::ExtensionSet& extensions() const { return extensions_; }
+  const gfx::ExtensionSet& extensions() const { return extensions_; }
 
   const FeatureFlags& feature_flags() const {
     return feature_flags_;
@@ -214,7 +214,7 @@
   void AddExtensionString(const base::StringPiece& s);
   void InitializeBasicState(const base::CommandLine* command_line);
   void InitializeFeatures();
-  void InitializeFloatAndHalfFloatFeatures(const gl::ExtensionSet& extensions);
+  void InitializeFloatAndHalfFloatFeatures(const gfx::ExtensionSet& extensions);
 
   Validators validators_;
 
@@ -224,7 +224,7 @@
   bool is_passthrough_cmd_decoder_ = false;
 
   // The set of extensions returned by glGetString(GL_EXTENSIONS);
-  gl::ExtensionSet extensions_;
+  gfx::ExtensionSet extensions_;
 
   // Flags for some features
   FeatureFlags feature_flags_;
diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc
index 7db95ae2..17882dd8 100644
--- a/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/gpu/command_buffer/service/feature_info_unittest.cc
@@ -231,14 +231,14 @@
   SetupInitExpectations("");
   // Check default extensions are there
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_resource_safe"));
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_resource_safe"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_strict_attribs"));
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_ANGLE_translated_shader_source"));
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_strict_attribs"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_ANGLE_translated_shader_source"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_trace_marker"));
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_unpack_subimage"));
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_trace_marker"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_unpack_subimage"));
 
   bool expect_ext_srgb = false;
   switch (GetParam()) {
@@ -258,7 +258,7 @@
   // which is not part of the ES3 core, we have to be careful to search for
   // "GL_EXT_sRGB ", and append a space to the end of the extension string.
   if (expect_ext_srgb) {
-    EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
+    EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
     EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_SRGB_EXT));
     EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_SRGB_ALPHA_EXT));
     EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
@@ -270,7 +270,7 @@
     EXPECT_TRUE(info_->validators()->framebuffer_parameter.IsValid(
         GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT));
   } else {
-    EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
+    EXPECT_FALSE(gfx::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
     EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_SRGB_EXT));
     EXPECT_FALSE(info_->validators()->texture_format.IsValid(
         GL_SRGB_ALPHA_EXT));
@@ -285,23 +285,25 @@
   }
 
   // Check a couple of random extensions that should not be there.
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_OES_texture_npot"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(), "GL_OES_texture_npot"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_EXT_texture_compression_dxt1"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_CHROMIUM_texture_compression_dxt3"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_CHROMIUM_texture_compression_dxt5"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_compression_dxt1"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_CHROMIUM_texture_compression_dxt3"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_CHROMIUM_texture_compression_dxt5"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_ANGLE_texture_usage"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_OES_compressed_ETC1_RGB8_texture"));
+      gfx::HasExtension(info_->extensions(), "GL_ANGLE_texture_usage"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_AMD_compressed_ATC_texture"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_IMG_texture_compression_pvrtc"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_EXT_texture_compression_s3tc_srgb"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_OES_compressed_ETC1_RGB8_texture"));
+  EXPECT_FALSE(
+      gfx::HasExtension(info_->extensions(), "GL_AMD_compressed_ATC_texture"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_IMG_texture_compression_pvrtc"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_EXT_texture_compression_s3tc_srgb"));
   EXPECT_FALSE(info_->feature_flags().npot_ok);
   EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
       GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
@@ -405,20 +407,20 @@
 
 TEST_P(FeatureInfoTest, InitializeNPOTExtensionGLES) {
   SetupInitExpectations("GL_OES_texture_npot");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_OES_texture_npot"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_OES_texture_npot"));
   EXPECT_TRUE(info_->feature_flags().npot_ok);
 }
 
 TEST_P(FeatureInfoTest, InitializeNPOTExtensionGL) {
   SetupInitExpectations("GL_ARB_texture_non_power_of_two");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_OES_texture_npot"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_OES_texture_npot"));
   EXPECT_TRUE(info_->feature_flags().npot_ok);
 }
 
 TEST_P(FeatureInfoTest, InitializeDXTExtensionGLES2) {
   SetupInitExpectations("GL_EXT_texture_compression_dxt1");
-  EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_compression_dxt1"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_EXT_texture_compression_dxt1"));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
       GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
@@ -431,12 +433,12 @@
 
 TEST_P(FeatureInfoTest, InitializeDXTExtensionGL) {
   SetupInitExpectations("GL_EXT_texture_compression_s3tc");
-  EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_compression_dxt1"));
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_texture_compression_dxt3"));
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_texture_compression_dxt5"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_EXT_texture_compression_dxt1"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_texture_compression_dxt3"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_texture_compression_dxt5"));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
       GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
@@ -450,8 +452,8 @@
 TEST_P(FeatureInfoTest, InitializeEXT_texture_compression_s3tc_srgb) {
   SetupInitExpectationsWithGLVersion("GL_NV_sRGB_formats", "",
                                      "OpenGL ES 2.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_EXT_texture_compression_s3tc_srgb"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_EXT_texture_compression_s3tc_srgb"));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
       GL_COMPRESSED_SRGB_S3TC_DXT1_EXT));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
@@ -464,8 +466,8 @@
 
 TEST_P(FeatureInfoTest, InitializeEXT_texture_compression_s3tc_srgbGL) {
   SetupInitExpectations("GL_EXT_texture_sRGB GL_EXT_texture_compression_s3tc");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_EXT_texture_compression_s3tc_srgb"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_EXT_texture_compression_s3tc_srgb"));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
       GL_COMPRESSED_SRGB_S3TC_DXT1_EXT));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
@@ -479,8 +481,8 @@
 TEST_P(FeatureInfoTest, InitializeCHROMIUM_compressed_texture_etc) {
   SetupInitExpectationsWithGLVersion("", "",
                                      "OpenGL ES 3.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_compressed_texture_etc"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_compressed_texture_etc"));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
       GL_COMPRESSED_R11_EAC));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
@@ -528,7 +530,7 @@
   SetupInitExpectationsWithGLVersion("GL_EXT_texture_format_BGRA8888", "",
                                      "OpenGL ES 2.0");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
   EXPECT_TRUE(info_->validators()->texture_format.IsValid(
       GL_BGRA_EXT));
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
@@ -546,7 +548,7 @@
 TEST_P(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888GL) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL 2.0");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
   EXPECT_TRUE(info_->validators()->texture_format.IsValid(
       GL_BGRA_EXT));
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
@@ -557,7 +559,7 @@
   SetupInitExpectationsWithGLVersion("GL_APPLE_texture_format_BGRA8888", "",
                                      "OpenGL ES 2.0");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
   EXPECT_TRUE(info_->validators()->texture_format.IsValid(
       GL_BGRA_EXT));
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
@@ -575,7 +577,7 @@
 TEST_P(FeatureInfoTest, InitializeGLES_no_EXT_texture_format_BGRA8888GL) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 2.0");
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
   EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_BGRA_EXT));
   EXPECT_FALSE(
       info_->validators()->texture_internal_format.IsValid(GL_BGRA_EXT));
@@ -584,7 +586,8 @@
 TEST_P(FeatureInfoTest, InitializeGLES2EXT_read_format_bgra) {
   SetupInitExpectationsWithGLVersion(
       "GL_EXT_read_format_bgra", "", "OpenGL ES 2.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_read_format_bgra"));
+  EXPECT_TRUE(
+      gfx::HasExtension(info_->extensions(), "GL_EXT_read_format_bgra"));
   EXPECT_TRUE(info_->feature_flags().ext_read_format_bgra);
   EXPECT_TRUE(info_->validators()->read_pixel_format.IsValid(
       GL_BGRA_EXT));
@@ -601,7 +604,8 @@
 
 TEST_P(FeatureInfoTest, InitializeGLEXT_read_format_bgra) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL 2.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_read_format_bgra"));
+  EXPECT_TRUE(
+      gfx::HasExtension(info_->extensions(), "GL_EXT_read_format_bgra"));
   EXPECT_TRUE(info_->feature_flags().ext_read_format_bgra);
   EXPECT_TRUE(info_->validators()->read_pixel_format.IsValid(
       GL_BGRA_EXT));
@@ -610,7 +614,7 @@
 TEST_P(FeatureInfoTest, InitializeGLES_no_EXT_read_format_bgra) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 2.0");
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_read_format_bgra"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_read_format_bgra"));
   EXPECT_FALSE(info_->feature_flags().ext_read_format_bgra);
   EXPECT_FALSE(info_->validators()->read_pixel_format.IsValid(GL_BGRA_EXT));
 }
@@ -619,7 +623,7 @@
   SetupInitExpectations("GL_EXT_sRGB GL_OES_rgb8_rgba8");
 
   if (GetContextType() == CONTEXT_TYPE_OPENGLES3) {
-    EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
+    EXPECT_FALSE(gfx::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
     EXPECT_FALSE(info_->validators()->texture_format.IsValid(GL_SRGB_EXT));
     EXPECT_FALSE(
         info_->validators()->texture_format.IsValid(GL_SRGB_ALPHA_EXT));
@@ -632,7 +636,7 @@
     EXPECT_FALSE(info_->validators()->framebuffer_parameter.IsValid(
         GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT));
   } else {
-    EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
+    EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
     EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_SRGB_EXT));
     EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_SRGB_ALPHA_EXT));
     EXPECT_TRUE(
@@ -650,7 +654,7 @@
   SetupInitExpectationsWithGLVersion(
       "GL_EXT_texture_storage", "", "OpenGL ES 2.0");
   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
       GL_TEXTURE_IMMUTABLE_FORMAT_EXT));
   EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
@@ -680,7 +684,7 @@
 TEST_P(FeatureInfoTest, InitializeEXT_texture_storage) {
   SetupInitExpectations("GL_EXT_texture_storage");
   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
       GL_TEXTURE_IMMUTABLE_FORMAT_EXT));
   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
@@ -710,7 +714,7 @@
 TEST_P(FeatureInfoTest, InitializeARB_texture_storage) {
   SetupInitExpectations("GL_ARB_texture_storage");
   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
       GL_TEXTURE_IMMUTABLE_FORMAT_EXT));
 }
@@ -719,41 +723,41 @@
   SetupInitExpectationsWithGLVersion("GL_EXT_texture_storage", "",
                                      "OpenGL 2.0");
   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
       GL_BGRA8_EXT));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 TEST_P(FeatureInfoTest, InitializeARB_texture_storage_BGRA) {
   SetupInitExpectationsWithGLVersion("GL_ARB_texture_storage", "",
                                      "OpenGL 2.0");
   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
       GL_BGRA8_EXT));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 TEST_P(FeatureInfoTest, InitializeEXT_texture_storage_BGRA8888) {
   SetupInitExpectations(
       "GL_EXT_texture_storage GL_EXT_texture_format_BGRA8888");
   EXPECT_TRUE(info_->feature_flags().ext_texture_storage);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
       GL_BGRA8_EXT));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 TEST_P(FeatureInfoTest, InitializeEXT_texture_storage_float) {
   SetupInitExpectations("GL_EXT_texture_storage GL_OES_texture_float");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_OES_texture_float"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_OES_texture_float"));
   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
       GL_RGBA32F_EXT));
   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
@@ -768,9 +772,9 @@
 
 TEST_P(FeatureInfoTest, InitializeEXT_texture_storage_half_float) {
   SetupInitExpectations("GL_EXT_texture_storage GL_OES_texture_half_float");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
       GL_RGBA16F_EXT));
   EXPECT_TRUE(info_->validators()->texture_internal_format_storage.IsValid(
@@ -788,8 +792,8 @@
 TEST_P(FeatureInfoTest, InitializeGL_renderbuffer_format_BGRA8888) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL 2.0");
 
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_renderbuffer_format_BGRA8888"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_renderbuffer_format_BGRA8888"));
   EXPECT_TRUE(info_->feature_flags().ext_render_buffer_format_bgra8888);
   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(GL_BGRA8_EXT));
 }
@@ -802,9 +806,9 @@
 TEST_P(FeatureInfoTest, InitializeGLES2_texture_storage) {
   SetupInitExpectationsWithGLVersion(
       "GL_EXT_texture_storage", "", "OpenGL ES 2.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 // 2- ES2 + GL_EXT_texture_storage + (GL_EXT_texture_format_BGRA8888 or
@@ -814,27 +818,29 @@
       "GL_EXT_texture_storage GL_EXT_texture_format_BGRA8888",
       "",
       "OpenGL ES 2.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 // 3- ES2 + GL_EXT_texture_format_BGRA8888 or GL_APPLE_texture_format_bgra8888
 TEST_P(FeatureInfoTest, InitializeGLES2_texture_format_BGRA) {
   SetupInitExpectationsWithGLVersion(
       "GL_EXT_texture_format_BGRA8888", "", "OpenGL ES 2.0");
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_FALSE(
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 // 4- ES2 (neither GL_EXT_texture_storage nor GL_EXT_texture_format_BGRA8888) ->
 // nothing
 TEST_P(FeatureInfoTest, InitializeGLES2_neither_texture_storage_nor_BGRA) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 2.0");
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_FALSE(
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 // 5- ES3 + GL_EXT_texture_format_BGRA8888
@@ -847,14 +853,14 @@
       "GL_EXT_texture_format_BGRA8888", "", "OpenGL ES 3.0");
   if (GetContextType() == CONTEXT_TYPE_OPENGLES3) {
     EXPECT_TRUE(
-        gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
-    EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                  "GL_EXT_texture_format_BGRA8888"));
+        gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+    EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                   "GL_EXT_texture_format_BGRA8888"));
   } else {
     EXPECT_FALSE(
-        gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
-    EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                                 "GL_EXT_texture_format_BGRA8888"));
+        gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+    EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                  "GL_EXT_texture_format_BGRA8888"));
   }
 }
 
@@ -864,9 +870,9 @@
 TEST_P(FeatureInfoTest, InitializeGLES3_texture_storage_APPLE_BGRA) {
   SetupInitExpectationsWithGLVersion(
       "GL_APPLE_texture_format_BGRA8888", "", "OpenGL ES 3.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 // 7- ES3 + GL_EXT_texture_storage + GL_EXT_texture_format_BGRA8888 ->
@@ -877,18 +883,18 @@
       "GL_EXT_texture_storage GL_EXT_texture_format_BGRA8888",
       "",
       "OpenGL ES 3.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 // 8- ES3 + none of the above -> GL_EXT_texture_storage (and no
 // GL_EXT_texture_format_BGRA8888 - we don't claim to handle GL_BGRA8)
 TEST_P(FeatureInfoTest, InitializeGLES3_texture_storage) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_texture_storage"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_texture_format_BGRA8888"));
 }
 
 // 9- ANGLE will add the GL_CHROMIUM_renderbuffer_format_BGRA8888 extension and
@@ -896,8 +902,8 @@
 TEST_P(FeatureInfoTest, InitializeWithANGLE_BGRA8) {
   SetupInitExpectationsWithGLVersion("", kGLRendererStringANGLE, "");
   EXPECT_TRUE(info_->gl_version_info().is_angle);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_renderbuffer_format_BGRA8888"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_renderbuffer_format_BGRA8888"));
   EXPECT_TRUE(info_->feature_flags().ext_render_buffer_format_bgra8888);
   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(GL_BGRA8_EXT));
 }
@@ -907,8 +913,8 @@
        InitializeGLES2_no_CHROMIUM_renderbuffer_format_BGRA8888) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 2.0");
   EXPECT_FALSE(info_->feature_flags().ext_render_buffer_format_bgra8888);
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_CHROMIUM_renderbuffer_format_BGRA8888"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_CHROMIUM_renderbuffer_format_BGRA8888"));
 }
 
 TEST_P(FeatureInfoTest, InitializeARB_texture_float) {
@@ -917,30 +923,30 @@
   disallowed_features.chromium_color_buffer_float_rgba = true;
   SetupInitExpectationsWithGLVersionAndDisallowedFeatures(
       "GL_ARB_texture_float", "", "3.0", disallowed_features);
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_CHROMIUM_color_buffer_float_rgb"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_CHROMIUM_color_buffer_float_rgba"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_CHROMIUM_color_buffer_float_rgb"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_CHROMIUM_color_buffer_float_rgba"));
   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
       GL_RGBA32F));
   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
       GL_RGB32F));
 
   info_->EnableCHROMIUMColorBufferFloatRGBA();
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_CHROMIUM_color_buffer_float_rgb"));
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_color_buffer_float_rgba"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_CHROMIUM_color_buffer_float_rgb"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_color_buffer_float_rgba"));
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
       GL_RGBA32F));
   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
       GL_RGB32F));
 
   info_->EnableCHROMIUMColorBufferFloatRGB();
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_color_buffer_float_rgb"));
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_color_buffer_float_rgba"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_color_buffer_float_rgb"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_color_buffer_float_rgba"));
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
       GL_RGBA32F));
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
@@ -949,18 +955,18 @@
 
 TEST_P(FeatureInfoTest, Initialize_texture_floatGLES3) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_OES_texture_float"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(), "GL_OES_texture_float"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_OES_texture_half_float_linear"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_OES_texture_half_float_linear"));
 }
 
 TEST_P(FeatureInfoTest, Initialize_sRGBGLES3) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(), "GL_EXT_sRGB"));
   EXPECT_FALSE(info_->validators()->texture_format.IsValid(
       GL_SRGB_EXT));
   EXPECT_FALSE(info_->validators()->texture_format.IsValid(
@@ -979,13 +985,13 @@
   SetupInitExpectations("GL_OES_texture_float");
   EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
   EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_OES_texture_float"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_OES_texture_float"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_OES_texture_half_float_linear"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_OES_texture_half_float_linear"));
   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
 }
@@ -994,13 +1000,13 @@
   SetupInitExpectations("GL_OES_texture_float GL_OES_texture_float_linear");
   EXPECT_TRUE(info_->feature_flags().enable_texture_float_linear);
   EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_OES_texture_float"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_OES_texture_float"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_OES_texture_half_float_linear"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_OES_texture_half_float_linear"));
   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
 }
@@ -1009,13 +1015,13 @@
   SetupInitExpectations("GL_OES_texture_half_float");
   EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
   EXPECT_FALSE(info_->feature_flags().enable_texture_half_float_linear);
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_OES_texture_float"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(), "GL_OES_texture_float"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_OES_texture_half_float_linear"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_OES_texture_half_float_linear"));
   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
 }
@@ -1025,13 +1031,13 @@
       "GL_OES_texture_half_float GL_OES_texture_half_float_linear");
   EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
   EXPECT_TRUE(info_->feature_flags().enable_texture_half_float_linear);
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_OES_texture_float"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(), "GL_OES_texture_float"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_half_float"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_OES_texture_half_float_linear"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_texture_float_linear"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_OES_texture_half_float_linear"));
   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_FLOAT));
   EXPECT_TRUE(info_->validators()->pixel_type.IsValid(GL_HALF_FLOAT_OES));
 }
@@ -1040,8 +1046,8 @@
   SetupInitExpectations(
       "GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample");
   EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_framebuffer_multisample"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_framebuffer_multisample"));
   EXPECT_TRUE(
       info_->validators()->framebuffer_target.IsValid(GL_READ_FRAMEBUFFER_EXT));
   EXPECT_TRUE(
@@ -1056,8 +1062,8 @@
 TEST_P(FeatureInfoTest, InitializeARB_framebuffer_multisample) {
   SetupInitExpectations("GL_ARB_framebuffer_object");
   EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_framebuffer_multisample"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_framebuffer_multisample"));
   EXPECT_TRUE(info_->validators()->framebuffer_target.IsValid(
       GL_READ_FRAMEBUFFER_EXT));
   EXPECT_TRUE(info_->validators()->framebuffer_target.IsValid(
@@ -1074,8 +1080,8 @@
   SetupInitExpectationsWithGLVersion(
       "GL_ANGLE_framebuffer_multisample", kGLRendererStringANGLE, "");
   EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_framebuffer_multisample"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_framebuffer_multisample"));
   EXPECT_TRUE(info_->validators()->framebuffer_target.IsValid(
       GL_READ_FRAMEBUFFER_EXT));
   EXPECT_TRUE(info_->validators()->framebuffer_target.IsValid(
@@ -1094,8 +1100,8 @@
 TEST_P(FeatureInfoTest, InitializeANGLE_framebuffer_multisampleWithoutANGLE) {
   SetupInitExpectations("GL_ANGLE_framebuffer_multisample");
   EXPECT_FALSE(info_->feature_flags().chromium_framebuffer_multisample);
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_CHROMIUM_framebuffer_multisample"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_CHROMIUM_framebuffer_multisample"));
   EXPECT_FALSE(info_->validators()->framebuffer_target.IsValid(
       GL_READ_FRAMEBUFFER_EXT));
   EXPECT_FALSE(info_->validators()->framebuffer_target.IsValid(
@@ -1114,8 +1120,8 @@
       ).multisampled_render_to_texture);
   EXPECT_FALSE(info_->feature_flags(
       ).use_img_for_multisampled_render_to_texture);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_EXT_multisampled_render_to_texture"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_EXT_multisampled_render_to_texture"));
   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
       GL_MAX_SAMPLES_EXT));
   EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
@@ -1130,8 +1136,8 @@
       ).multisampled_render_to_texture);
   EXPECT_TRUE(info_->feature_flags(
       ).use_img_for_multisampled_render_to_texture);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_EXT_multisampled_render_to_texture"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_EXT_multisampled_render_to_texture"));
   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
       GL_MAX_SAMPLES_EXT));
   EXPECT_TRUE(info_->validators()->render_buffer_parameter.IsValid(
@@ -1142,8 +1148,8 @@
 
 TEST_P(FeatureInfoTest, InitializeEXT_texture_filter_anisotropic) {
   SetupInitExpectations("GL_EXT_texture_filter_anisotropic");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_EXT_texture_filter_anisotropic"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_EXT_texture_filter_anisotropic"));
   EXPECT_TRUE(info_->validators()->texture_parameter.IsValid(
       GL_TEXTURE_MAX_ANISOTROPY_EXT));
   EXPECT_TRUE(info_->validators()->g_l_state.IsValid(
@@ -1152,9 +1158,10 @@
 
 TEST_P(FeatureInfoTest, InitializeEXT_ARB_depth_texture) {
   SetupInitExpectations("GL_ARB_depth_texture");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
+      gfx::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
+  EXPECT_TRUE(
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
       GL_DEPTH_COMPONENT));
   EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
@@ -1165,9 +1172,10 @@
 
 TEST_P(FeatureInfoTest, InitializeOES_ARB_depth_texture) {
   SetupInitExpectations("GL_OES_depth_texture");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
+      gfx::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
+  EXPECT_TRUE(
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
       GL_DEPTH_COMPONENT));
   EXPECT_TRUE(info_->validators()->texture_format.IsValid(GL_DEPTH_COMPONENT));
@@ -1178,10 +1186,12 @@
 
 TEST_P(FeatureInfoTest, InitializeANGLE_depth_texture) {
   SetupInitExpectations("GL_ANGLE_depth_texture");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(), "GL_ANGLE_depth_texture"));
+      gfx::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
+  EXPECT_TRUE(
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
+  EXPECT_FALSE(
+      gfx::HasExtension(info_->extensions(), "GL_ANGLE_depth_texture"));
   EXPECT_TRUE(info_->feature_flags().angle_depth_texture);
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
       GL_DEPTH_COMPONENT));
@@ -1200,7 +1210,7 @@
 TEST_P(FeatureInfoTest, InitializeEXT_packed_depth_stencil) {
   SetupInitExpectations("GL_EXT_packed_depth_stencil");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_packed_depth_stencil"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_packed_depth_stencil"));
   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
       GL_DEPTH24_STENCIL8));
   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
@@ -1213,7 +1223,7 @@
 TEST_P(FeatureInfoTest, InitializeOES_packed_depth_stencil) {
   SetupInitExpectations("GL_OES_packed_depth_stencil");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_packed_depth_stencil"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_packed_depth_stencil"));
   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
       GL_DEPTH24_STENCIL8));
   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
@@ -1227,7 +1237,7 @@
        InitializeOES_packed_depth_stencil_and_GL_ARB_depth_texture) {
   SetupInitExpectations("GL_OES_packed_depth_stencil GL_ARB_depth_texture");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_packed_depth_stencil"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_packed_depth_stencil"));
   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
       GL_DEPTH24_STENCIL8));
   EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
@@ -1241,7 +1251,7 @@
 TEST_P(FeatureInfoTest, InitializeOES_depth24) {
   SetupInitExpectations("GL_OES_depth24");
   EXPECT_TRUE(info_->feature_flags().oes_depth24);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_OES_depth24"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_OES_depth24"));
   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
       GL_DEPTH_COMPONENT24));
 }
@@ -1249,7 +1259,7 @@
 TEST_P(FeatureInfoTest, InitializeOES_standard_derivatives) {
   SetupInitExpectations("GL_OES_standard_derivatives");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_standard_derivatives"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_standard_derivatives"));
   EXPECT_TRUE(info_->feature_flags().oes_standard_derivatives);
   EXPECT_TRUE(info_->validators()->hint_target.IsValid(
       GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES));
@@ -1259,7 +1269,7 @@
 
 TEST_P(FeatureInfoTest, InitializeOES_rgb8_rgba8) {
   SetupInitExpectations("GL_OES_rgb8_rgba8");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_OES_rgb8_rgba8"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_OES_rgb8_rgba8"));
   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
       GL_RGB8_OES));
   EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(
@@ -1269,7 +1279,7 @@
 TEST_P(FeatureInfoTest, InitializeOES_EGL_image_external) {
   SetupInitExpectations("GL_OES_EGL_image_external");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_EGL_image_external"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_EGL_image_external"));
   EXPECT_TRUE(info_->feature_flags().oes_egl_image_external);
   EXPECT_TRUE(info_->validators()->texture_bind_target.IsValid(
       GL_TEXTURE_EXTERNAL_OES));
@@ -1283,8 +1293,8 @@
 
 TEST_P(FeatureInfoTest, InitializeNV_EGL_stream_consumer_external) {
   SetupInitExpectations("GL_NV_EGL_stream_consumer_external");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_NV_EGL_stream_consumer_external"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_NV_EGL_stream_consumer_external"));
   EXPECT_TRUE(info_->feature_flags().nv_egl_stream_consumer_external);
   EXPECT_TRUE(info_->validators()->texture_bind_target.IsValid(
       GL_TEXTURE_EXTERNAL_OES));
@@ -1298,8 +1308,8 @@
 
 TEST_P(FeatureInfoTest, InitializeOES_compressed_ETC1_RGB8_texture) {
   SetupInitExpectations("GL_OES_compressed_ETC1_RGB8_texture");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_OES_compressed_ETC1_RGB8_texture"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_OES_compressed_ETC1_RGB8_texture"));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
       GL_ETC1_RGB8_OES));
   EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
@@ -1309,7 +1319,7 @@
 TEST_P(FeatureInfoTest, InitializeAMD_compressed_ATC_texture) {
   SetupInitExpectations("GL_AMD_compressed_ATC_texture");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_AMD_compressed_ATC_texture"));
+      gfx::HasExtension(info_->extensions(), "GL_AMD_compressed_ATC_texture"));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
       GL_ATC_RGB_AMD));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
@@ -1320,8 +1330,8 @@
 
 TEST_P(FeatureInfoTest, InitializeIMG_texture_compression_pvrtc) {
   SetupInitExpectations("GL_IMG_texture_compression_pvrtc");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_IMG_texture_compression_pvrtc"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_IMG_texture_compression_pvrtc"));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
       GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG));
   EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
@@ -1335,8 +1345,8 @@
 TEST_P(FeatureInfoTest, InitializeEXT_occlusion_query_boolean) {
   SetupInitExpectations("GL_EXT_occlusion_query_boolean");
   if (GetContextType() == CONTEXT_TYPE_OPENGLES2) {
-    EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                                 "GL_EXT_occlusion_query_boolean"));
+    EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                  "GL_EXT_occlusion_query_boolean"));
   }
   EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
   EXPECT_FALSE(info_->feature_flags(
@@ -1348,8 +1358,8 @@
 TEST_P(FeatureInfoTest, InitializeARB_occlusion_query) {
   SetupInitExpectations("GL_ARB_occlusion_query");
   if (GetContextType() == CONTEXT_TYPE_OPENGLES2) {
-    EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                                 "GL_EXT_occlusion_query_boolean"));
+    EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                  "GL_EXT_occlusion_query_boolean"));
   }
   EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
   EXPECT_FALSE(info_->feature_flags(
@@ -1361,8 +1371,8 @@
 TEST_P(FeatureInfoTest, InitializeARB_occlusion_query2) {
   SetupInitExpectations("GL_ARB_occlusion_query2 GL_ARB_occlusion_query2");
   if (GetContextType() == CONTEXT_TYPE_OPENGLES2) {
-    EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                                 "GL_EXT_occlusion_query_boolean"));
+    EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                  "GL_EXT_occlusion_query_boolean"));
   }
   EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
   EXPECT_TRUE(info_->feature_flags(
@@ -1374,8 +1384,8 @@
 TEST_P(FeatureInfoTest, InitializeGLES3_occlusion_query_boolean) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
   if (GetContextType() == CONTEXT_TYPE_OPENGLES2) {
-    EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                                 "GL_EXT_occlusion_query_boolean"));
+    EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                  "GL_EXT_occlusion_query_boolean"));
   }
   EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
 }
@@ -1383,8 +1393,8 @@
 TEST_P(FeatureInfoTest, InitializeGL33_occlusion_query2) {
   SetupInitExpectationsWithGLVersion("", "", "3.3");
   if (GetContextType() == CONTEXT_TYPE_OPENGLES2) {
-    EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                                 "GL_EXT_occlusion_query_boolean"));
+    EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                  "GL_EXT_occlusion_query_boolean"));
   }
   EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
   EXPECT_TRUE(info_->feature_flags(
@@ -1394,8 +1404,8 @@
 TEST_P(FeatureInfoTest, InitializeGL43_occlusion_query2) {
   SetupInitExpectationsWithGLVersion("", "", "4.3");
   if (GetContextType() == CONTEXT_TYPE_OPENGLES2) {
-    EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                                 "GL_EXT_occlusion_query_boolean"));
+    EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                  "GL_EXT_occlusion_query_boolean"));
   }
   EXPECT_TRUE(info_->feature_flags().occlusion_query_boolean);
   EXPECT_FALSE(info_->feature_flags(
@@ -1405,21 +1415,21 @@
 TEST_P(FeatureInfoTest, InitializeOES_vertex_array_object) {
   SetupInitExpectations("GL_OES_vertex_array_object");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_vertex_array_object"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_vertex_array_object"));
   EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
 }
 
 TEST_P(FeatureInfoTest, InitializeARB_vertex_array_object) {
   SetupInitExpectations("GL_ARB_vertex_array_object");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_vertex_array_object"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_vertex_array_object"));
   EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
 }
 
 TEST_P(FeatureInfoTest, InitializeAPPLE_vertex_array_object) {
   SetupInitExpectations("GL_APPLE_vertex_array_object");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_vertex_array_object"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_vertex_array_object"));
   EXPECT_TRUE(info_->feature_flags().native_vertex_array_object);
 }
 
@@ -1429,14 +1439,14 @@
   // may still emulate the GL_OES_vertex_array_object functionality. In this
   // scenario native_vertex_array_object must be false.
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_vertex_array_object"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_vertex_array_object"));
   EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
 }
 
 TEST_P(FeatureInfoTest, InitializeOES_element_index_uint) {
   SetupInitExpectations("GL_OES_element_index_uint");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_OES_element_index_uint"));
+      gfx::HasExtension(info_->extensions(), "GL_OES_element_index_uint"));
   EXPECT_TRUE(info_->validators()->index_type.IsValid(GL_UNSIGNED_INT));
 }
 
@@ -1459,7 +1469,7 @@
 
 TEST_P(FeatureInfoTest, InitializeEXT_blend_minmax) {
   SetupInitExpectations("GL_EXT_blend_minmax");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_blend_minmax"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_blend_minmax"));
   EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MIN_EXT));
   EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MAX_EXT));
 }
@@ -1467,21 +1477,21 @@
 TEST_P(FeatureInfoTest, InitializeEXT_frag_depth) {
   SetupInitExpectations("GL_EXT_frag_depth");
   EXPECT_TRUE(info_->feature_flags().ext_frag_depth);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_EXT_frag_depth"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_EXT_frag_depth"));
 }
 
 TEST_P(FeatureInfoTest, InitializeEXT_shader_texture_lod) {
   SetupInitExpectations("GL_EXT_shader_texture_lod");
   EXPECT_TRUE(info_->feature_flags().ext_shader_texture_lod);
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_shader_texture_lod"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_shader_texture_lod"));
 }
 
 TEST_P(FeatureInfoTest, InitializeEXT_discard_framebuffer) {
   SetupInitExpectations("GL_EXT_discard_framebuffer");
   EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_discard_framebuffer"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_discard_framebuffer"));
 }
 
 TEST_P(FeatureInfoTest, InitializeSamplersWithARBSamplerObjects) {
@@ -1493,15 +1503,15 @@
 TEST_P(FeatureInfoTest, InitializeWithES3) {
   SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 3.0");
   EXPECT_TRUE(info_->feature_flags().chromium_framebuffer_multisample);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_CHROMIUM_framebuffer_multisample"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_CHROMIUM_framebuffer_multisample"));
   EXPECT_TRUE(info_->feature_flags().use_async_readpixels);
   EXPECT_TRUE(info_->feature_flags().oes_standard_derivatives);
   EXPECT_TRUE(info_->feature_flags().oes_depth24);
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
+      gfx::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
   EXPECT_FALSE(
       info_->validators()->texture_internal_format.IsValid(GL_DEPTH_COMPONENT));
   EXPECT_FALSE(
@@ -1512,7 +1522,7 @@
   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT));
   EXPECT_FALSE(info_->validators()->pixel_type.IsValid(GL_UNSIGNED_INT_24_8));
   EXPECT_TRUE(info_->feature_flags().packed_depth24_stencil8);
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_OES_depth24"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(), "GL_OES_depth24"));
   EXPECT_TRUE(
       info_->validators()->render_buffer_format.IsValid(GL_DEPTH_COMPONENT24));
   EXPECT_TRUE(
@@ -1526,7 +1536,7 @@
   EXPECT_TRUE(info_->feature_flags().map_buffer_range);
   EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_EXT_discard_framebuffer"));
+      gfx::HasExtension(info_->extensions(), "GL_EXT_discard_framebuffer"));
   EXPECT_TRUE(info_->feature_flags().chromium_sync_query);
   EXPECT_TRUE(gl::GLFence::IsSupported());
 }
@@ -1534,9 +1544,10 @@
 TEST_P(FeatureInfoTest, InitializeWithES3AndDepthTexture) {
   SetupInitExpectationsWithGLVersion(
       "GL_ANGLE_depth_texture", "", "OpenGL ES 3.0");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
+      gfx::HasExtension(info_->extensions(), "GL_GOOGLE_depth_texture"));
+  EXPECT_TRUE(
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_depth_texture"));
   EXPECT_TRUE(
       info_->validators()->texture_internal_format.IsValid(GL_DEPTH_COMPONENT));
   EXPECT_TRUE(
@@ -1619,7 +1630,7 @@
       "", "4.3");
   EXPECT_TRUE(info_->feature_flags().chromium_path_rendering);
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
 }
 
 TEST_P(FeatureInfoTest, InitializeCHROMIUM_path_rendering2) {
@@ -1628,14 +1639,14 @@
       "OpenGL ES 3.1");
   EXPECT_TRUE(info_->feature_flags().chromium_path_rendering);
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
 }
 
 TEST_P(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering) {
   SetupInitExpectationsWithGLVersion("GL_ARB_compatibility", "", "4.3");
   EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
 }
 
 TEST_P(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering2) {
@@ -1643,7 +1654,7 @@
       "GL_ARB_compatibility GL_NV_path_rendering", "", "4.3");
   EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
 }
 
 TEST_P(FeatureInfoTest, InitializeNoCHROMIUM_path_rendering3) {
@@ -1652,41 +1663,41 @@
                                      "OpenGL ES 3.1");
   EXPECT_FALSE(info_->feature_flags().chromium_path_rendering);
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
+      gfx::HasExtension(info_->extensions(), "GL_CHROMIUM_path_rendering"));
 }
 
 TEST_P(FeatureInfoTest, InitializeNoKHR_blend_equation_advanced) {
   SetupInitExpectationsWithGLVersion("GL_ARB_compatibility", "", "4.3");
   EXPECT_FALSE(info_->feature_flags().blend_equation_advanced);
   EXPECT_FALSE(
-      gl::HasExtension(info_->extensions(), "GL_KHR_blend_equation_advanced"));
+      gfx::HasExtension(info_->extensions(), "GL_KHR_blend_equation_advanced"));
 }
 
 TEST_P(FeatureInfoTest, InitializeKHR_blend_equations_advanced) {
   SetupInitExpectations("GL_KHR_blend_equation_advanced");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_KHR_blend_equation_advanced"));
+      gfx::HasExtension(info_->extensions(), "GL_KHR_blend_equation_advanced"));
   EXPECT_TRUE(info_->feature_flags().blend_equation_advanced);
 }
 
 TEST_P(FeatureInfoTest, InitializeNV_blend_equations_advanced) {
   SetupInitExpectations("GL_NV_blend_equation_advanced");
   EXPECT_TRUE(
-      gl::HasExtension(info_->extensions(), "GL_KHR_blend_equation_advanced"));
+      gfx::HasExtension(info_->extensions(), "GL_KHR_blend_equation_advanced"));
   EXPECT_TRUE(info_->feature_flags().blend_equation_advanced);
 }
 
 TEST_P(FeatureInfoTest, InitializeNoKHR_blend_equation_advanced_coherent) {
   SetupInitExpectationsWithGLVersion("GL_ARB_compatibility ", "", "4.3");
   EXPECT_FALSE(info_->feature_flags().blend_equation_advanced_coherent);
-  EXPECT_FALSE(gl::HasExtension(info_->extensions(),
-                                "GL_KHR_blend_equation_advanced_coherent"));
+  EXPECT_FALSE(gfx::HasExtension(info_->extensions(),
+                                 "GL_KHR_blend_equation_advanced_coherent"));
 }
 
 TEST_P(FeatureInfoTest, InitializeKHR_blend_equations_advanced_coherent) {
   SetupInitExpectations("GL_KHR_blend_equation_advanced_coherent");
-  EXPECT_TRUE(gl::HasExtension(info_->extensions(),
-                               "GL_KHR_blend_equation_advanced_coherent"));
+  EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
+                                "GL_KHR_blend_equation_advanced_coherent"));
   EXPECT_TRUE(info_->feature_flags().blend_equation_advanced);
   EXPECT_TRUE(info_->feature_flags().blend_equation_advanced_coherent);
 }
@@ -1741,7 +1752,7 @@
   switch (GetParam()) {
     case ES2_on_Version3_0_Passthrough:
       EXPECT_FALSE(info_->feature_flags().unpremultiply_and_dither_copy);
-      EXPECT_FALSE(gl::HasExtension(
+      EXPECT_FALSE(gfx::HasExtension(
           info_->extensions(), "GL_CHROMIUM_unpremultiply_and_dither_copy"));
       break;
     case ES2_on_Version3_0:
@@ -1749,7 +1760,7 @@
     case ES3_on_Version3_0:
     case ES3_on_Version3_2Compatibility:
       EXPECT_TRUE(info_->feature_flags().unpremultiply_and_dither_copy);
-      EXPECT_TRUE(gl::HasExtension(
+      EXPECT_TRUE(gfx::HasExtension(
           info_->extensions(), "GL_CHROMIUM_unpremultiply_and_dither_copy"));
       break;
   }
diff --git a/gpu/command_buffer/service/gl_context_virtual.cc b/gpu/command_buffer/service/gl_context_virtual.cc
index e0e023e4..755836e 100644
--- a/gpu/command_buffer/service/gl_context_virtual.cc
+++ b/gpu/command_buffer/service/gl_context_virtual.cc
@@ -73,7 +73,7 @@
   return shared_context_->GetGLRenderer();
 }
 
-const gl::ExtensionSet& GLContextVirtual::GetExtensions() {
+const gfx::ExtensionSet& GLContextVirtual::GetExtensions() {
   return shared_context_->GetExtensions();
 }
 
diff --git a/gpu/command_buffer/service/gl_context_virtual.h b/gpu/command_buffer/service/gl_context_virtual.h
index 7eb56c1..1704f1f 100644
--- a/gpu/command_buffer/service/gl_context_virtual.h
+++ b/gpu/command_buffer/service/gl_context_virtual.h
@@ -39,7 +39,7 @@
   scoped_refptr<gl::GPUTimingClient> CreateGPUTimingClient() override;
   std::string GetGLVersion() override;
   std::string GetGLRenderer() override;
-  const gl::ExtensionSet& GetExtensions() override;
+  const gfx::ExtensionSet& GetExtensions() override;
   void SetSafeToForceGpuSwitch() override;
   bool WasAllocatedUsingRobustnessExtension() override;
   void SetUnbindFboOnMakeCurrent() override;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 8f8c973..1621f31b 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -13020,7 +13020,7 @@
       str = GetServiceShadingLanguageVersionString(feature_info_.get());
       break;
     case GL_EXTENSIONS: {
-      gl::ExtensionSet extension_set = feature_info_->extensions();
+      gfx::ExtensionSet extension_set = feature_info_->extensions();
       // For WebGL contexts, strip out shader extensions if they have not
       // been enabled on WebGL1 or no longer exist (become core) in WebGL2.
       if (feature_info_->IsWebGLContext()) {
@@ -13035,7 +13035,7 @@
       }
       if (supports_post_sub_buffer_)
         extension_set.insert("GL_CHROMIUM_post_sub_buffer");
-      extensions = gl::MakeExtensionString(extension_set);
+      extensions = gfx::MakeExtensionString(extension_set);
       str = extensions.c_str();
       break;
     }
@@ -16089,7 +16089,7 @@
   disallowed_features.AllowExtensions();
   info->Initialize(feature_info_->context_type(),
                    false /* is_passthrough_cmd_decoder */, disallowed_features);
-  bucket->SetFromString(gl::MakeExtensionString(info->extensions()).c_str());
+  bucket->SetFromString(gfx::MakeExtensionString(info->extensions()).c_str());
   return error::kNoError;
 }
 
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
index 89fa63a..ea9abee 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
@@ -68,11 +68,11 @@
 }
 
 void RequestExtensions(gl::GLApi* api,
-                       const gl::ExtensionSet& requestable_extensions,
+                       const gfx::ExtensionSet& requestable_extensions,
                        const char* const* extensions_to_request,
                        size_t count) {
   for (size_t i = 0; i < count; i++) {
-    if (gl::HasExtension(requestable_extensions, extensions_to_request[i])) {
+    if (gfx::HasExtension(requestable_extensions, extensions_to_request[i])) {
       // Request the intersection of the two sets
       api->glRequestExtensionANGLEFn(extensions_to_request[i]);
     }
@@ -626,7 +626,7 @@
   // basic command buffer functionality.  Make sure they are always enabled.
   if (IsWebGLContextType(attrib_helper.context_type)) {
     // Grab the extensions that are requestable
-    gl::ExtensionSet requestable_extensions(
+    gfx::ExtensionSet requestable_extensions(
         gl::GetRequestableGLExtensionsFromCurrentContext());
 
     static constexpr const char* kRequiredFunctionalityExtensions[] = {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
index c460e8b..ff470b5 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -1710,7 +1710,7 @@
       str = GetServiceShadingLanguageVersionString(feature_info_.get());
       break;
     case GL_EXTENSIONS: {
-      extensions = gl::MakeExtensionString(feature_info_->extensions());
+      extensions = gfx::MakeExtensionString(feature_info_->extensions());
       str = extensions.c_str();
       break;
     }
diff --git a/gpu/command_buffer/service/shader_translator_unittest.cc b/gpu/command_buffer/service/shader_translator_unittest.cc
index d8d3033..cbfb16e 100644
--- a/gpu/command_buffer/service/shader_translator_unittest.cc
+++ b/gpu/command_buffer/service/shader_translator_unittest.cc
@@ -16,7 +16,7 @@
   ShaderTranslatorTest() {
     shader_output_language_ =
         ShaderTranslator::GetShaderOutputLanguageForContext(
-            gl::GLVersionInfo("2.0", "", gl::ExtensionSet()));
+            gl::GLVersionInfo("2.0", "", gfx::ExtensionSet()));
   }
 
   ~ShaderTranslatorTest() override = default;
@@ -55,7 +55,7 @@
   ES3ShaderTranslatorTest() {
     shader_output_language_ =
         ShaderTranslator::GetShaderOutputLanguageForContext(
-            gl::GLVersionInfo("3.0", "", gl::ExtensionSet()));
+            gl::GLVersionInfo("3.0", "", gfx::ExtensionSet()));
   }
 
   ~ES3ShaderTranslatorTest() override = default;
@@ -508,7 +508,7 @@
       "}";
 
   gl::GLVersionInfo output_context_version(testing::get<0>(GetParam()), "",
-                                           gl::ExtensionSet());
+                                           gfx::ExtensionSet());
 
   scoped_refptr<ShaderTranslator> translator = new ShaderTranslator();
   ShBuiltInResources resources;
diff --git a/gpu/command_buffer/service/test_helper.cc b/gpu/command_buffer/service/test_helper.cc
index 5d2c6f9..7f2df5f 100644
--- a/gpu/command_buffer/service/test_helper.cc
+++ b/gpu/command_buffer/service/test_helper.cc
@@ -205,7 +205,7 @@
     bool is_es3_enabled,
     bool is_es3_capable,
     bool is_desktop_core_profile,
-    const gl::ExtensionSet& extensions,
+    const gfx::ExtensionSet& extensions,
     bool use_default_textures) {
   InSequence sequence;
 
@@ -228,10 +228,10 @@
   }
 
   bool ext_image_external =
-      gl::HasExtension(extensions, "GL_OES_EGL_image_external");
+      gfx::HasExtension(extensions, "GL_OES_EGL_image_external");
   bool arb_texture_rectangle =
       is_desktop_core_profile ||
-      gl::HasExtension(extensions, "GL_ARB_texture_rectangle");
+      gfx::HasExtension(extensions, "GL_ARB_texture_rectangle");
 
   if (ext_image_external) {
     SetupTextureInitializationExpectations(
@@ -283,7 +283,7 @@
     ::gl::MockGLInterface* gl,
     bool is_es3_enabled,
     bool is_desktop_core_profile,
-    const gl::ExtensionSet& extensions,
+    const gfx::ExtensionSet& extensions,
     bool use_default_textures) {
   SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D, use_default_textures);
   SetupTextureDestructionExpectations(
@@ -297,10 +297,10 @@
   }
 
   bool ext_image_external =
-      gl::HasExtension(extensions, "GL_OES_EGL_image_external");
+      gfx::HasExtension(extensions, "GL_OES_EGL_image_external");
   bool arb_texture_rectangle =
       is_desktop_core_profile ||
-      gl::HasExtension(extensions, "GL_ARB_texture_rectangle");
+      gfx::HasExtension(extensions, "GL_ARB_texture_rectangle");
 
   if (ext_image_external) {
     SetupTextureDestructionExpectations(
@@ -328,7 +328,7 @@
   bool enable_es3 = !(context_type == CONTEXT_TYPE_OPENGLES2 ||
                       context_type == CONTEXT_TYPE_WEBGL1);
 
-  gl::ExtensionSet extension_set(gl::MakeExtensionSet(extensions));
+  gfx::ExtensionSet extension_set(gfx::MakeExtensionSet(extensions));
   gl::GLVersionInfo gl_info(gl_version, "", extension_set);
 
   SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", gl_version,
@@ -336,16 +336,16 @@
   EXPECT_CALL(*gl, GetIntegerv(GL_MAX_RENDERBUFFER_SIZE, _))
       .WillOnce(SetArgPointee<1>(kMaxRenderbufferSize))
       .RetiresOnSaturation();
-  if (gl::HasExtension(extension_set, "GL_ARB_framebuffer_object") ||
-      gl::HasExtension(extension_set, "GL_EXT_framebuffer_multisample") ||
-      gl::HasExtension(extension_set,
-                       "GL_EXT_multisampled_render_to_texture") ||
+  if (gfx::HasExtension(extension_set, "GL_ARB_framebuffer_object") ||
+      gfx::HasExtension(extension_set, "GL_EXT_framebuffer_multisample") ||
+      gfx::HasExtension(extension_set,
+                        "GL_EXT_multisampled_render_to_texture") ||
       gl_info.is_es3 || gl_info.is_desktop_core_profile) {
     EXPECT_CALL(*gl, GetIntegerv(GL_MAX_SAMPLES, _))
         .WillOnce(SetArgPointee<1>(kMaxSamples))
         .RetiresOnSaturation();
-  } else if (gl::HasExtension(extension_set,
-                              "GL_IMG_multisampled_render_to_texture")) {
+  } else if (gfx::HasExtension(extension_set,
+                               "GL_IMG_multisampled_render_to_texture")) {
     EXPECT_CALL(*gl, GetIntegerv(GL_MAX_SAMPLES_IMG, _))
         .WillOnce(SetArgPointee<1>(kMaxSamples))
         .RetiresOnSaturation();
@@ -354,10 +354,10 @@
   if (enable_es3 ||
       (!enable_es3 &&
        (gl_info.is_desktop_core_profile ||
-        gl::HasExtension(extension_set, "GL_EXT_draw_buffers") ||
-        gl::HasExtension(extension_set, "GL_ARB_draw_buffers") ||
+        gfx::HasExtension(extension_set, "GL_EXT_draw_buffers") ||
+        gfx::HasExtension(extension_set, "GL_ARB_draw_buffers") ||
         (gl_info.is_es3 &&
-         gl::HasExtension(extension_set, "GL_NV_draw_buffers"))))) {
+         gfx::HasExtension(extension_set, "GL_NV_draw_buffers"))))) {
     EXPECT_CALL(*gl, GetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, _))
         .WillOnce(SetArgPointee<1>(8))
         .RetiresOnSaturation();
@@ -368,9 +368,9 @@
 
   if (gl_info.IsAtLeastGL(3, 3) ||
       (gl_info.IsAtLeastGL(3, 2) &&
-       gl::HasExtension(extension_set, "GL_ARB_blend_func_extended")) ||
+       gfx::HasExtension(extension_set, "GL_ARB_blend_func_extended")) ||
       (gl_info.is_es &&
-       gl::HasExtension(extension_set, "GL_EXT_blend_func_extended"))) {
+       gfx::HasExtension(extension_set, "GL_EXT_blend_func_extended"))) {
     EXPECT_CALL(*gl, GetIntegerv(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT, _))
         .WillOnce(SetArgPointee<1>(8))
         .RetiresOnSaturation();
@@ -410,7 +410,7 @@
         .WillOnce(SetArgPointee<1>(kMaxArrayTextureLayers))
         .RetiresOnSaturation();
   }
-  if (gl::HasExtension(extension_set, "GL_ARB_texture_rectangle") ||
+  if (gfx::HasExtension(extension_set, "GL_ARB_texture_rectangle") ||
       gl_info.is_desktop_core_profile) {
     EXPECT_CALL(*gl, GetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE, _))
         .WillOnce(SetArgPointee<1>(kMaxRectangleTextureSize))
@@ -489,7 +489,7 @@
       .WillOnce(Return(reinterpret_cast<const uint8_t*>(gl_version)))
       .RetiresOnSaturation();
 
-  gl::ExtensionSet extension_set(gl::MakeExtensionSet(extensions));
+  gfx::ExtensionSet extension_set(gfx::MakeExtensionSet(extensions));
   // Persistent storage is needed for the split extension string.
   split_extensions_ =
       std::vector<std::string>(extension_set.begin(), extension_set.end());
@@ -518,17 +518,17 @@
       .RetiresOnSaturation();
 
   if (enable_es3 ||
-      gl::HasExtension(extension_set, "GL_NV_pixel_buffer_object")) {
+      gfx::HasExtension(extension_set, "GL_NV_pixel_buffer_object")) {
     EXPECT_CALL(*gl, GetIntegerv(GL_PIXEL_UNPACK_BUFFER_BINDING, _))
       .WillOnce(SetArgPointee<1>(0))
       .RetiresOnSaturation();
   }
 
-  if ((gl::HasExtension(extension_set, "GL_ARB_texture_float") ||
+  if ((gfx::HasExtension(extension_set, "GL_ARB_texture_float") ||
        gl_info.is_desktop_core_profile) ||
       (gl_info.is_es3 &&
-       gl::HasExtension(extension_set, "GL_OES_texture_float") &&
-       gl::HasExtension(extension_set, "GL_EXT_color_buffer_float"))) {
+       gfx::HasExtension(extension_set, "GL_OES_texture_float") &&
+       gfx::HasExtension(extension_set, "GL_EXT_color_buffer_float"))) {
     static const GLuint tx_ids[] = {101, 102};
     static const GLuint fb_ids[] = {103, 104};
     const GLsizei width = 16;
@@ -625,7 +625,7 @@
           .RetiresOnSaturation();
     }
     if (!enable_es3 &&
-        !gl::HasExtension(extension_set, "GL_EXT_color_buffer_half_float") &&
+        !gfx::HasExtension(extension_set, "GL_EXT_color_buffer_half_float") &&
         (gl_info.IsAtLeastGLES(3, 0) || gl_info.IsAtLeastGL(3, 0))) {
       EXPECT_CALL(*gl, TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, width, 0,
                                   GL_RGBA, GL_HALF_FLOAT, nullptr))
@@ -658,10 +658,10 @@
   if (enable_es3 ||
       (!enable_es3 &&
        (gl_info.is_desktop_core_profile ||
-        gl::HasExtension(extension_set, "GL_EXT_draw_buffers") ||
-        gl::HasExtension(extension_set, "GL_ARB_draw_buffers") ||
+        gfx::HasExtension(extension_set, "GL_EXT_draw_buffers") ||
+        gfx::HasExtension(extension_set, "GL_ARB_draw_buffers") ||
         (gl_info.is_es3 &&
-         gl::HasExtension(extension_set, "GL_NV_draw_buffers"))))) {
+         gfx::HasExtension(extension_set, "GL_NV_draw_buffers"))))) {
     EXPECT_CALL(*gl, GetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, _))
         .WillOnce(SetArgPointee<1>(8))
         .RetiresOnSaturation();
@@ -671,8 +671,8 @@
   }
 
   if (gl_info.is_es3 || gl_info.is_desktop_core_profile ||
-      gl::HasExtension(extension_set, "GL_EXT_texture_rg") ||
-      (gl::HasExtension(extension_set, "GL_ARB_texture_rg"))) {
+      gfx::HasExtension(extension_set, "GL_EXT_texture_rg") ||
+      (gfx::HasExtension(extension_set, "GL_ARB_texture_rg"))) {
 #if DCHECK_IS_ON()
     EXPECT_CALL(*gl, GetError())
         .WillOnce(Return(GL_NO_ERROR))
diff --git a/gpu/command_buffer/service/test_helper.h b/gpu/command_buffer/service/test_helper.h
index bd4f50d..efde563 100644
--- a/gpu/command_buffer/service/test_helper.h
+++ b/gpu/command_buffer/service/test_helper.h
@@ -122,13 +122,13 @@
       bool is_es3_enabled,
       bool is_es3_capable,
       bool is_desktop_core_profile,
-      const gl::ExtensionSet& extensions,
+      const gfx::ExtensionSet& extensions,
       bool use_default_textures);
   static void SetupTextureManagerDestructionExpectations(
       ::gl::MockGLInterface* gl,
       bool is_es3_enabled,
       bool is_desktop_core_profile,
-      const gl::ExtensionSet& extensions,
+      const gfx::ExtensionSet& extensions,
       bool use_default_textures);
 
   static void SetupExpectationsForClearingUniforms(::gl::MockGLInterface* gl,
diff --git a/gpu/command_buffer/tests/gl_clear_framebuffer_unittest.cc b/gpu/command_buffer/tests/gl_clear_framebuffer_unittest.cc
index 78f5312d..7dc3657 100644
--- a/gpu/command_buffer/tests/gl_clear_framebuffer_unittest.cc
+++ b/gpu/command_buffer/tests/gl_clear_framebuffer_unittest.cc
@@ -18,7 +18,7 @@
 #include "gpu/config/gpu_test_config.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gl/extension_set.h"
+#include "ui/gfx/extension_set.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_version_info.h"
 
@@ -229,9 +229,9 @@
 TEST_P(GLClearFramebufferTest, SeparateFramebufferClear) {
   const char* extension_string =
       reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
-  gl::ExtensionSet extensions = gl::MakeExtensionSet(extension_string);
+  gfx::ExtensionSet extensions = gfx::MakeExtensionSet(extension_string);
   bool has_separate_framebuffer =
-      gl::HasExtension(extensions, "GL_CHROMIUM_framebuffer_multisample");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_framebuffer_multisample");
   if (!IsApplicable() || !has_separate_framebuffer) {
     return;
   }
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc
index 97f84e2..c861fb2 100644
--- a/gpu/command_buffer/tests/gl_manager.cc
+++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -220,8 +220,8 @@
   --use_count_;
   if (!use_count_) {
     if (base_share_group_) {
-      delete base_context_;
-      base_context_ = NULL;
+      delete base_share_group_;
+      base_share_group_ = NULL;
     }
     if (base_surface_) {
       delete base_surface_;
diff --git a/gpu/command_buffer/tests/gl_test_utils.cc b/gpu/command_buffer/tests/gl_test_utils.cc
index c232145..da2a51e 100644
--- a/gpu/command_buffer/tests/gl_test_utils.cc
+++ b/gpu/command_buffer/tests/gl_test_utils.cc
@@ -404,9 +404,9 @@
   DCHECK(result);
 
   egl_extensions_ =
-      gl::MakeExtensionSet(window_system_binding_info_.extensions);
+      gfx::MakeExtensionSet(window_system_binding_info_.extensions);
   gl_extensions_ =
-      gl::MakeExtensionSet(gl::GetGLExtensionsFromCurrentContext());
+      gfx::MakeExtensionSet(gl::GetGLExtensionsFromCurrentContext());
 
   return true;
 }
diff --git a/gpu/command_buffer/tests/gl_test_utils.h b/gpu/command_buffer/tests/gl_test_utils.h
index 0afb8b8..6bf81db 100644
--- a/gpu/command_buffer/tests/gl_test_utils.h
+++ b/gpu/command_buffer/tests/gl_test_utils.h
@@ -104,12 +104,12 @@
 
   // Returns whether the current context supports the named EGL extension.
   bool HasEGLExtension(const base::StringPiece& extension) {
-    return gl::HasExtension(egl_extensions_, extension);
+    return gfx::HasExtension(egl_extensions_, extension);
   }
 
   // Returns whether the current context supports the named GL extension.
   bool HasGLExtension(const base::StringPiece& extension) {
-    return gl::HasExtension(gl_extensions_, extension);
+    return gfx::HasExtension(gl_extensions_, extension);
   }
 
 #if defined(OS_LINUX)
@@ -130,8 +130,8 @@
   bool gl_reinitialized_;
   GLManager gl_;
   gl::GLWindowSystemBindingInfo window_system_binding_info_;
-  gl::ExtensionSet egl_extensions_;
-  gl::ExtensionSet gl_extensions_;
+  gfx::ExtensionSet egl_extensions_;
+  gfx::ExtensionSet gl_extensions_;
 };
 
 }  // namespace gpu
diff --git a/gpu/config/gpu_info_collector.cc b/gpu/config/gpu_info_collector.cc
index d65caed..f6d6311a 100644
--- a/gpu/config/gpu_info_collector.cc
+++ b/gpu/config/gpu_info_collector.cc
@@ -185,8 +185,8 @@
   std::string glsl_version_string = GetGLString(GL_SHADING_LANGUAGE_VERSION);
 
   gpu_info->gl_extensions = gl::GetGLExtensionsFromCurrentContext();
-  gl::ExtensionSet extension_set =
-      gl::MakeExtensionSet(gpu_info->gl_extensions);
+  gfx::ExtensionSet extension_set =
+      gfx::MakeExtensionSet(gpu_info->gl_extensions);
 
   gl::GLVersionInfo gl_info(gpu_info->gl_version.c_str(),
                             gpu_info->gl_renderer.c_str(), extension_set);
@@ -198,12 +198,12 @@
 
   GLint max_samples = 0;
   if (gl_info.IsAtLeastGL(3, 0) || gl_info.IsAtLeastGLES(3, 0) ||
-      gl::HasExtension(extension_set, "GL_ANGLE_framebuffer_multisample") ||
-      gl::HasExtension(extension_set, "GL_APPLE_framebuffer_multisample") ||
-      gl::HasExtension(extension_set, "GL_EXT_framebuffer_multisample") ||
-      gl::HasExtension(extension_set,
-                       "GL_EXT_multisampled_render_to_texture") ||
-      gl::HasExtension(extension_set, "GL_NV_framebuffer_multisample")) {
+      gfx::HasExtension(extension_set, "GL_ANGLE_framebuffer_multisample") ||
+      gfx::HasExtension(extension_set, "GL_APPLE_framebuffer_multisample") ||
+      gfx::HasExtension(extension_set, "GL_EXT_framebuffer_multisample") ||
+      gfx::HasExtension(extension_set,
+                        "GL_EXT_multisampled_render_to_texture") ||
+      gfx::HasExtension(extension_set, "GL_NV_framebuffer_multisample")) {
     glGetIntegerv(GL_MAX_SAMPLES, &max_samples);
   }
   gpu_info->max_msaa_samples = base::IntToString(max_samples);
@@ -214,7 +214,7 @@
       gl::GLSurfaceEGL::HasEGLExtension("EGL_KHR_fence_sync") &&
       gl::GLSurfaceEGL::HasEGLExtension("EGL_KHR_image_base") &&
       gl::GLSurfaceEGL::HasEGLExtension("EGL_KHR_gl_texture_2D_image") &&
-      gl::HasExtension(extension_set, "GL_OES_EGL_image");
+      gfx::HasExtension(extension_set, "GL_OES_EGL_image");
 #else
   gl::GLWindowSystemBindingInfo window_system_binding_info;
   if (gl::init::GetGLWindowSystemBindingInfo(&window_system_binding_info)) {
@@ -226,9 +226,9 @@
 #endif  // OS_ANDROID
 
   bool supports_robustness =
-      gl::HasExtension(extension_set, "GL_EXT_robustness") ||
-      gl::HasExtension(extension_set, "GL_KHR_robustness") ||
-      gl::HasExtension(extension_set, "GL_ARB_robustness");
+      gfx::HasExtension(extension_set, "GL_EXT_robustness") ||
+      gfx::HasExtension(extension_set, "GL_KHR_robustness") ||
+      gfx::HasExtension(extension_set, "GL_ARB_robustness");
   if (supports_robustness) {
     glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB,
         reinterpret_cast<GLint*>(&gpu_info->gl_reset_notification_strategy));
diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
index 2236721..466ed22 100644
--- a/gpu/config/gpu_util.cc
+++ b/gpu/config/gpu_util.cc
@@ -23,7 +23,7 @@
 #include "gpu/config/gpu_info_collector.h"
 #include "gpu/config/gpu_preferences.h"
 #include "gpu/config/gpu_switches.h"
-#include "ui/gl/extension_set.h"
+#include "ui/gfx/extension_set.h"
 #include "ui/gl/gl_features.h"
 #include "ui/gl/gl_switches.h"
 
@@ -390,7 +390,7 @@
   }
 #endif
 
-  gl::ExtensionSet all_disabled_extensions;
+  gfx::ExtensionSet all_disabled_extensions;
   std::string disabled_gl_extensions_value =
       command_line->GetSwitchValueASCII(switches::kDisableGLExtensions);
   if (!disabled_gl_extensions_value.empty()) {
@@ -424,13 +424,13 @@
 
     // Disabling WebGL extensions only occurs via the blacklist, so
     // the logic is simpler.
-    gl::ExtensionSet disabled_webgl_extensions;
+    gfx::ExtensionSet disabled_webgl_extensions;
     std::vector<std::string> disabled_webgl_extension_list =
         list->GetDisabledWebGLExtensions();
     disabled_webgl_extensions.insert(disabled_webgl_extension_list.begin(),
                                      disabled_webgl_extension_list.end());
     gpu_feature_info.disabled_webgl_extensions =
-        gl::MakeExtensionString(disabled_webgl_extensions);
+        gfx::MakeExtensionString(disabled_webgl_extensions);
   }
   gpu::GpuDriverBugList::AppendWorkaroundsFromCommandLine(
       &enabled_driver_bug_workarounds, *command_line);
@@ -442,7 +442,7 @@
 
   if (all_disabled_extensions.size()) {
     gpu_feature_info.disabled_extensions =
-        gl::MakeExtensionString(all_disabled_extensions);
+        gfx::MakeExtensionString(all_disabled_extensions);
   }
 
   AdjustGpuFeatureStatusToWorkarounds(&gpu_feature_info);
diff --git a/ios/chrome/browser/autofill/autofill_controller_unittest.mm b/ios/chrome/browser/autofill/autofill_controller_unittest.mm
index ff581e6..f3b0fee 100644
--- a/ios/chrome/browser/autofill/autofill_controller_unittest.mm
+++ b/ios/chrome/browser/autofill/autofill_controller_unittest.mm
@@ -28,6 +28,7 @@
 #import "ios/chrome/browser/autofill/form_suggestion_controller.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #include "ios/chrome/browser/infobars/infobar_manager_impl.h"
+#include "ios/chrome/browser/ssl/ios_security_state_tab_helper.h"
 #import "ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h"
 #include "ios/chrome/browser/ui/settings/personal_data_manager_data_changed_observer.h"
 #include "ios/chrome/browser/web/chrome_web_client.h"
@@ -211,6 +212,7 @@
       initWithPrefService:chrome_browser_state_->GetPrefs()
                  webState:web_state()];
   InfoBarManagerImpl::CreateForWebState(web_state());
+  IOSSecurityStateTabHelper::CreateForWebState(web_state());
   autofill_controller_ = [[AutofillController alloc]
            initWithBrowserState:chrome_browser_state_.get()
                        webState:web_state()
diff --git a/ios/chrome/browser/autofill/form_structure_browsertest.mm b/ios/chrome/browser/autofill/form_structure_browsertest.mm
index aabc3dbef..7224073 100644
--- a/ios/chrome/browser/autofill/form_structure_browsertest.mm
+++ b/ios/chrome/browser/autofill/form_structure_browsertest.mm
@@ -24,6 +24,7 @@
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #include "ios/chrome/browser/chrome_paths.h"
 #include "ios/chrome/browser/infobars/infobar_manager_impl.h"
+#include "ios/chrome/browser/ssl/ios_security_state_tab_helper.h"
 #include "ios/chrome/browser/web/chrome_web_client.h"
 #import "ios/chrome/browser/web/chrome_web_test.h"
 #import "ios/web/public/web_state/web_state.h"
@@ -138,6 +139,7 @@
 void FormStructureBrowserTest::SetUp() {
   ChromeWebTest::SetUp();
 
+  IOSSecurityStateTabHelper::CreateForWebState(web_state());
   InfoBarManagerImpl::CreateForWebState(web_state());
   AutofillAgent* autofillAgent = [[AutofillAgent alloc]
       initWithPrefService:chrome_browser_state_->GetPrefs()
diff --git a/ios/chrome/browser/tabs/BUILD.gn b/ios/chrome/browser/tabs/BUILD.gn
index b451440e..600fe80 100644
--- a/ios/chrome/browser/tabs/BUILD.gn
+++ b/ios/chrome/browser/tabs/BUILD.gn
@@ -123,6 +123,7 @@
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/browser/voice",
     "//ios/chrome/browser/web",
+    "//ios/chrome/browser/web:feature_flags",
     "//ios/chrome/browser/web:tab_helper_delegates",
     "//ios/chrome/browser/web:web_internal",
     "//ios/chrome/browser/web_state_list",
diff --git a/ios/chrome/browser/tabs/tab.h b/ios/chrome/browser/tabs/tab.h
index f55bad5..5695c19 100644
--- a/ios/chrome/browser/tabs/tab.h
+++ b/ios/chrome/browser/tabs/tab.h
@@ -17,7 +17,6 @@
 @class AutofillController;
 @class CastController;
 @class ExternalAppLauncher;
-@class FormInputAccessoryViewController;
 class GURL;
 @class OpenInController;
 @class OverscrollActionsController;
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm
index c37e5fb..3e7a5e1 100644
--- a/ios/chrome/browser/tabs/tab.mm
+++ b/ios/chrome/browser/tabs/tab.mm
@@ -40,8 +40,6 @@
 #include "components/url_formatter/url_formatter.h"
 #import "ios/chrome/browser/app_launcher/app_launcher_tab_helper.h"
 #include "ios/chrome/browser/application_context.h"
-#import "ios/chrome/browser/autofill/form_input_accessory_view_controller.h"
-#import "ios/chrome/browser/autofill/form_suggestion_tab_helper.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
 #import "ios/chrome/browser/download/download_manager_tab_helper.h"
diff --git a/ios/chrome/browser/tabs/tab_helper_util.mm b/ios/chrome/browser/tabs/tab_helper_util.mm
index 0cca4da..b6d1c9f 100644
--- a/ios/chrome/browser/tabs/tab_helper_util.mm
+++ b/ios/chrome/browser/tabs/tab_helper_util.mm
@@ -43,6 +43,8 @@
 #import "ios/chrome/browser/translate/chrome_ios_translate_client.h"
 #import "ios/chrome/browser/voice/voice_search_navigations_tab_helper.h"
 #import "ios/chrome/browser/web/blocked_popup_tab_helper.h"
+#import "ios/chrome/browser/web/features.h"
+#import "ios/chrome/browser/web/font_size_tab_helper.h"
 #import "ios/chrome/browser/web/load_timing_tab_helper.h"
 #import "ios/chrome/browser/web/network_activity_indicator_tab_helper.h"
 #import "ios/chrome/browser/web/page_placeholder_tab_helper.h"
@@ -90,6 +92,10 @@
     CaptivePortalMetricsTabHelper::CreateForWebState(web_state);
   }
 
+  if (base::FeatureList::IsEnabled(web::kWebPageTextAccessibility)) {
+    FontSizeTabHelper::CreateForWebState(web_state);
+  }
+
   ReadingListModel* model =
       ReadingListModelFactory::GetForBrowserState(browser_state);
   ReadingListWebStateObserver::CreateForWebState(web_state, model);
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
index 466c093..5d2b5fa 100644
--- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
+++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
@@ -50,6 +50,7 @@
   ukm::UkmRecorder* GetUkmRecorder() override;
   ukm::SourceId GetUkmSourceId() override;
   AddressNormalizer* GetAddressNormalizer() override;
+  security_state::SecurityLevel GetSecurityLevelForUmaHistograms() override;
   void ShowAutofillSettings() override;
   void ShowUnmaskPrompt(const CreditCard& card,
                         UnmaskCardReason reason,
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
index cf15b2a..6d7f5f4 100644
--- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
+++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
@@ -28,6 +28,7 @@
 #include "ios/chrome/browser/metrics/ukm_url_recorder.h"
 #include "ios/chrome/browser/signin/identity_manager_factory.h"
 #import "ios/chrome/browser/ssl/insecure_input_tab_helper.h"
+#include "ios/chrome/browser/ssl/ios_security_state_tab_helper.h"
 #include "ios/chrome/browser/sync/profile_sync_service_factory.h"
 #include "ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h"
 #include "ios/chrome/browser/ui/autofill/save_card_infobar_controller.h"
@@ -119,6 +120,20 @@
   return nullptr;
 }
 
+security_state::SecurityLevel
+ChromeAutofillClientIOS::GetSecurityLevelForUmaHistograms() {
+  auto* ios_security_state_tab_helper =
+      IOSSecurityStateTabHelper::FromWebState(web_state_);
+
+  // If there is no helper, return SECURITY_LEVEL_COUNT which won't be logged.
+  if (!ios_security_state_tab_helper)
+    return security_state::SecurityLevel::SECURITY_LEVEL_COUNT;
+
+  security_state::SecurityInfo result;
+  ios_security_state_tab_helper->GetSecurityInfo(&result);
+  return result.security_level;
+}
+
 void ChromeAutofillClientIOS::ShowAutofillSettings() {
   NOTREACHED();
 }
diff --git a/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h
index 8aa965dd..ce87623 100644
--- a/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h
+++ b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h
@@ -49,9 +49,18 @@
 
 #pragma mark - Toolbar UI
 
-// Observer method for objects that care about the current height of the
-// toolbar.
-- (void)broadcastToolbarHeight:(CGFloat)height;
+// Observer method for objects that care about the collapsed toolbar height.
+// The value broadcast by this method is the distance by which the toolbar
+// overlaps the browser content area after the toolbar has been collapsed due
+// to scroll events.
+- (void)broadcastCollapsedToolbarHeight:(CGFloat)height;
+
+// Observer method for objects that care about the fully expanded toolbar
+// height.  The value broadcast by this method is the distance by which the
+// toolbar overlaps the browser content area after the toolbar when the toolbar
+// is fully visible (i.e. after a page load).  When scrolling occurs, the
+// toolbar overlap distance will be reduced to the collapsed height.
+- (void)broadcastExpandedToolbarHeight:(CGFloat)height;
 
 @end
 
diff --git a/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge.h b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge.h
index fa7b64c..f06e16e 100644
--- a/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge.h
+++ b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge.h
@@ -33,8 +33,11 @@
   // Invoked by |-broadcastScrollViewIsDragging:|.
   virtual void OnScrollViewIsDraggingBroadcasted(bool dragging) {}
 
-  // Invoked by |-broadcastToolbarHeight:|.
-  virtual void OnToolbarHeightBroadcasted(CGFloat toolbar_height) {}
+  // Invoked by |-broadcastCollapsedToolbarHeight:|.
+  virtual void OnCollapsedToolbarHeightBroadcasted(CGFloat min_height) {}
+
+  // Invoked by |-broadcastExpandedToolbarHeight:|.
+  virtual void OnExpandedToolbarHeightBroadcasted(CGFloat min_height) {}
 };
 
 // Bridge object that forwards broadcasted UI state to objects that subclass
diff --git a/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge.mm b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge.mm
index 7eede52..d7e44f3 100644
--- a/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge.mm
+++ b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge.mm
@@ -51,8 +51,12 @@
   self.observer->OnScrollViewIsDraggingBroadcasted(dragging);
 }
 
-- (void)broadcastToolbarHeight:(CGFloat)height {
-  self.observer->OnToolbarHeightBroadcasted(height);
+- (void)broadcastCollapsedToolbarHeight:(CGFloat)height {
+  self.observer->OnCollapsedToolbarHeightBroadcasted(height);
+}
+
+- (void)broadcastExpandedToolbarHeight:(CGFloat)height {
+  self.observer->OnExpandedToolbarHeightBroadcasted(height);
 }
 
 @end
diff --git a/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge_unittest.mm b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge_unittest.mm
index 85dd2641..cdf6b5d 100644
--- a/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge_unittest.mm
+++ b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer_bridge_unittest.mm
@@ -17,7 +17,8 @@
   CGFloat scroll_offset() const { return scroll_offset_; }
   bool scroll_view_scrolling() const { return scroll_view_scrolling_; }
   bool scroll_view_dragging() const { return scroll_view_dragging_; }
-  CGFloat toolbar_height() const { return toolbar_height_; }
+  CGFloat collapsed_height() const { return collapsed_height_; }
+  CGFloat expanded_height() const { return expanded_height_; }
 
  private:
   // ChromeBroadcastObserverInterface:
@@ -30,14 +31,19 @@
   void OnScrollViewIsDraggingBroadcasted(bool dragging) override {
     scroll_view_dragging_ = dragging;
   }
-  void OnToolbarHeightBroadcasted(CGFloat toolbar_height) override {
-    toolbar_height_ = toolbar_height;
+  void OnCollapsedToolbarHeightBroadcasted(CGFloat height) override {
+    collapsed_height_ = height;
+    ;
+  }
+  void OnExpandedToolbarHeightBroadcasted(CGFloat height) override {
+    expanded_height_ = height;
   }
 
   CGFloat scroll_offset_ = 0.0;
   bool scroll_view_scrolling_ = false;
   bool scroll_view_dragging_ = false;
-  CGFloat toolbar_height_ = 0.0;
+  CGFloat collapsed_height_ = 0.0;
+  CGFloat expanded_height_ = 0.0;
 };
 
 // Test fixture for ChromeBroadcastOberverBridge.
@@ -84,8 +90,12 @@
 // Tests that |-broadcastToolbarHeight:| is correctly forwarded to the
 // observer.
 TEST_F(ChromeBroadcastObserverBridgeTest, ToolbarHeight) {
-  ASSERT_EQ(observer().toolbar_height(), 0.0);
-  const CGFloat kHeight = 50.0;
-  [bridge() broadcastToolbarHeight:kHeight];
-  EXPECT_EQ(observer().toolbar_height(), kHeight);
+  ASSERT_EQ(observer().collapsed_height(), 0.0);
+  ASSERT_EQ(observer().expanded_height(), 0.0);
+  const CGFloat kCollapsedHeight = 10.0;
+  const CGFloat kExpandedHeight = 50.0;
+  [bridge() broadcastCollapsedToolbarHeight:kCollapsedHeight];
+  [bridge() broadcastExpandedToolbarHeight:kExpandedHeight];
+  EXPECT_EQ(observer().collapsed_height(), kCollapsedHeight);
+  EXPECT_EQ(observer().expanded_height(), kExpandedHeight);
 }
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm
index 7ef7b170..d567c952 100644
--- a/ios/chrome/browser/ui/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -2572,8 +2572,9 @@
 - (CGFloat)headerHeightForTab:(Tab*)tab {
   id nativeController = [self nativeControllerForTab:tab];
   if ([nativeController conformsToProtocol:@protocol(ToolbarOwner)] &&
-      [nativeController respondsToSelector:@selector(toolbarHeight)] &&
-      [nativeController toolbarHeight] > 0.0 && ![self canShowTabStrip]) {
+      [nativeController respondsToSelector:@selector(toolbarFrame)] &&
+      CGRectGetHeight([nativeController toolbarFrame]) > 0.0 &&
+      ![self canShowTabStrip]) {
     // On iPhone, don't add any header height for ToolbarOwner native
     // controllers when they're displaying their own toolbar.
     if (self.usesFullscreenContainer)
@@ -3152,8 +3153,8 @@
 
   CGFloat headerHeight = [self headerHeightForTab:tab];
   id nativeController = [self nativeControllerForTab:tab];
-  if ([nativeController respondsToSelector:@selector(toolbarHeight)])
-    headerHeight += [nativeController toolbarHeight];
+  if ([nativeController respondsToSelector:@selector(toolbarFrame)])
+    headerHeight += CGRectGetHeight([nativeController toolbarFrame]);
   return UIEdgeInsetsMake(headerHeight, 0.0, 0.0, 0.0);
 }
 
@@ -3866,15 +3867,29 @@
 
 #pragma mark - ToolbarHeightProviderForFullscreen
 
+- (CGFloat)collapsedTopToolbarHeight {
+  // For the legacy UI, the toolbar is completely hidden when in fullscreen
+  // mode.  After the UI refresh, kToolbarHeightFullscreen is still visible
+  // after scroll events.
+  CGFloat minHeight =
+      IsUIRefreshPhase1Enabled() ? kToolbarHeightFullscreen : 0.0;
+  // |minHeight| describes the distance past the top safe area.  If the browser
+  // container view is laid out using the full screen, it extends past the
+  // status bar, so that additional overlap is added here.
+  if (self.usesFullscreenContainer)
+    minHeight += StatusBarHeight();
+  return minHeight;
+}
+
+- (CGFloat)expandedTopToolbarHeight {
+  return self.headerHeight;
+}
+
+#pragma mark - Toolbar height helpers
+
 - (CGFloat)nonFullscreenToolbarHeight {
-  CGFloat toolbarHeightFullscreen = 0;
-  if (IsUIRefreshPhase1Enabled()) {
-    toolbarHeightFullscreen = kToolbarHeightFullscreen;
-  }
-  if (self.usesFullscreenContainer) {
-    toolbarHeightFullscreen += StatusBarHeight();
-  }
-  return MAX(0, self.headerHeight - toolbarHeightFullscreen);
+  return MAX(
+      0, [self expandedTopToolbarHeight] - [self collapsedTopToolbarHeight]);
 }
 
 #pragma mark - FullscreenUIElement methods
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
index 4151965..99c1e93 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
@@ -156,6 +156,7 @@
     self.primaryToolbarViewController =
         [[PrimaryToolbarViewController alloc] init];
     self.primaryToolbarViewController.buttonFactory = buttonFactory;
+    self.primaryToolbarViewController.dispatcher = self.dispatcher;
     [self.primaryToolbarViewController updateForSideSwipeSnapshotOnNTP:YES];
     self.headerController.toolbarViewController =
         self.primaryToolbarViewController;
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_content_adjustment_util.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_content_adjustment_util.mm
index 61685b1..1757cfe 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_content_adjustment_util.mm
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_content_adjustment_util.mm
@@ -16,7 +16,7 @@
 void MoveContentBelowHeader(id<CRWWebViewProxy> proxy, FullscreenModel* model) {
   DCHECK(proxy);
   DCHECK(model);
-  CGFloat padding = model->progress() * model->GetToolbarHeight();
+  CGFloat padding = model->progress() * model->GetExpandedToolbarHeight();
   proxy.scrollViewProxy.contentOffset = CGPointMake(0, -padding);
   UIEdgeInsets contentInset = proxy.contentInset;
   contentInset.top = padding;
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_controller_impl.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_controller_impl.mm
index dba917d..2faa64f 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_controller_impl.mm
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_controller_impl.mm
@@ -41,7 +41,9 @@
   [broadcaster_ addObserver:bridge_
                 forSelector:@selector(broadcastScrollViewIsDragging:)];
   [broadcaster_ addObserver:bridge_
-                forSelector:@selector(broadcastToolbarHeight:)];
+                forSelector:@selector(broadcastCollapsedToolbarHeight:)];
+  [broadcaster_ addObserver:bridge_
+                forSelector:@selector(broadcastExpandedToolbarHeight:)];
 }
 
 FullscreenControllerImpl::~FullscreenControllerImpl() = default;
@@ -111,5 +113,7 @@
   [broadcaster_ removeObserver:bridge_
                    forSelector:@selector(broadcastScrollViewIsDragging:)];
   [broadcaster_ removeObserver:bridge_
-                   forSelector:@selector(broadcastToolbarHeight:)];
+                   forSelector:@selector(broadcastCollapsedToolbarHeight:)];
+  [broadcaster_ removeObserver:bridge_
+                   forSelector:@selector(broadcastExpandedToolbarHeight:)];
 }
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_egtest.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_egtest.mm
index aeb4a12..af12fe82 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_egtest.mm
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_egtest.mm
@@ -82,10 +82,6 @@
 // Verifies that the content offset of the web view is set up at the correct
 // initial value when initially displaying a PDF.
 - (void)testLongPDFInitialState {
-  if (IsUIRefreshPhase1Enabled() && !base::ios::IsRunningOnIOS11OrLater()) {
-    EARL_GREY_TEST_DISABLED(
-        @"crbug.com/849132 Test broken in iOS10 with UI refresh.");
-  }
   web::test::SetUpFileBasedHttpServer();
   GURL URL = web::test::HttpServer::MakeUrl(
       "http://ios/testing/data/http_server_files/two_pages.pdf");
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_model.h b/ios/chrome/browser/ui/fullscreen/fullscreen_model.h
index fb7b9f3..0bfaed4 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_model.h
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_model.h
@@ -42,6 +42,11 @@
   // The base offset against which the fullscreen progress is being calculated.
   CGFloat base_offset() const { return base_offset_; }
 
+  // Returns the difference between the max and min toolbar heights.
+  CGFloat toolbar_height_delta() const {
+    return expanded_toolbar_height_ - collapsed_toolbar_height_;
+  }
+
   // Increments and decrements |disabled_counter_| for features that require the
   // toolbar be completely visible.
   void IncrementDisabledCounter();
@@ -54,10 +59,15 @@
   // progress corresponding to the final state of the aniamtion.
   void AnimationEndedWithProgress(CGFloat progress);
 
-  // Setter for the toolbar height to use in calculations.  Setting this resets
-  // the model to a fully visible state.
-  void SetToolbarHeight(CGFloat toolbar_height);
-  CGFloat GetToolbarHeight() const;
+  // Setter for the minimum toolbar height to use in calculations.  Setting this
+  // resets the model to a fully visible state.
+  void SetCollapsedToolbarHeight(CGFloat height);
+  CGFloat GetCollapsedToolbarHeight() const;
+
+  // Setter for the maximum toolbar height to use in calculations.  Setting this
+  // resets the model to a fully visible state.
+  void SetExpandedToolbarHeight(CGFloat height);
+  CGFloat GetExpandedToolbarHeight() const;
 
   // Setter for the height of the scroll view displaying the main content.
   void SetScrollViewHeight(CGFloat scroll_view_height);
@@ -122,7 +132,8 @@
   void OnScrollViewIsScrollingBroadcasted(bool scrolling) override;
   void OnScrollViewIsZoomingBroadcasted(bool zooming) override;
   void OnScrollViewIsDraggingBroadcasted(bool dragging) override;
-  void OnToolbarHeightBroadcasted(CGFloat toolbar_height) override;
+  void OnCollapsedToolbarHeightBroadcasted(CGFloat height) override;
+  void OnExpandedToolbarHeightBroadcasted(CGFloat height) override;
 
   // The observers for this model.
   base::ObserverList<FullscreenModelObserver> observers_;
@@ -133,7 +144,8 @@
   // is false, it is reset to the current offset after each scroll event.
   CGFloat base_offset_ = NAN;
   // The height of the toolbar being shown or hidden by this model.
-  CGFloat toolbar_height_ = 0.0;
+  CGFloat collapsed_toolbar_height_ = 0.0;
+  CGFloat expanded_toolbar_height_ = 0.0;
   // The current vertical content offset of the main content.
   CGFloat y_content_offset_ = 0.0;
   // The height of the scroll view displaying the current page.
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_model.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_model.mm
index 3d261b66..6bd8a90 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_model.mm
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_model.mm
@@ -72,16 +72,28 @@
   progress_ = progress;
 }
 
-void FullscreenModel::SetToolbarHeight(CGFloat toolbar_height) {
-  if (AreCGFloatsEqual(toolbar_height_, toolbar_height))
+void FullscreenModel::SetCollapsedToolbarHeight(CGFloat height) {
+  if (AreCGFloatsEqual(collapsed_toolbar_height_, height))
     return;
-  DCHECK_GE(toolbar_height, 0.0);
-  toolbar_height_ = toolbar_height;
+  DCHECK_GE(height, 0.0);
+  collapsed_toolbar_height_ = height;
   ResetForNavigation();
 }
 
-CGFloat FullscreenModel::GetToolbarHeight() const {
-  return toolbar_height_;
+CGFloat FullscreenModel::GetCollapsedToolbarHeight() const {
+  return collapsed_toolbar_height_;
+}
+
+void FullscreenModel::SetExpandedToolbarHeight(CGFloat height) {
+  if (AreCGFloatsEqual(expanded_toolbar_height_, height))
+    return;
+  DCHECK_GE(height, 0.0);
+  expanded_toolbar_height_ = height;
+  ResetForNavigation();
+}
+
+CGFloat FullscreenModel::GetExpandedToolbarHeight() const {
+  return expanded_toolbar_height_;
 }
 
 void FullscreenModel::SetScrollViewHeight(CGFloat scroll_view_height) {
@@ -183,7 +195,7 @@
   // - there is no toolbar,
   // - the scroll offset doesn't change.
   if (!enabled() || !scrolling_ || zooming_ || observer_callback_count_ ||
-      AreCGFloatsEqual(toolbar_height_, 0.0) ||
+      AreCGFloatsEqual(toolbar_height_delta(), 0.0) ||
       AreCGFloatsEqual(y_content_offset_, from_offset)) {
     return ScrollAction::kUpdateBaseOffset;
   }
@@ -211,11 +223,11 @@
 
 void FullscreenModel::UpdateProgress() {
   CGFloat delta = base_offset_ - y_content_offset_;
-  SetProgress(1.0 + delta / toolbar_height_);
+  SetProgress(1.0 + delta / toolbar_height_delta());
 }
 
 void FullscreenModel::UpdateBaseOffset() {
-  base_offset_ = y_content_offset_ - (1.0 - progress_) * toolbar_height_;
+  base_offset_ = y_content_offset_ - (1.0 - progress_) * toolbar_height_delta();
 }
 
 void FullscreenModel::SetProgress(CGFloat progress) {
@@ -260,6 +272,10 @@
   SetScrollViewIsDragging(dragging);
 }
 
-void FullscreenModel::OnToolbarHeightBroadcasted(CGFloat toolbar_height) {
-  SetToolbarHeight(toolbar_height);
+void FullscreenModel::OnCollapsedToolbarHeightBroadcasted(CGFloat height) {
+  SetCollapsedToolbarHeight(height);
+}
+
+void FullscreenModel::OnExpandedToolbarHeightBroadcasted(CGFloat height) {
+  SetExpandedToolbarHeight(height);
 }
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_model_unittest.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_model_unittest.mm
index fff3815..ce802df7 100644
--- a/ios/chrome/browser/ui/fullscreen/fullscreen_model_unittest.mm
+++ b/ios/chrome/browser/ui/fullscreen/fullscreen_model_unittest.mm
@@ -29,7 +29,8 @@
     model_.AddObserver(&observer_);
     // Set the toolbar height to kToolbarHeight, and simulate a page load that
     // finishes with a 0.0 y content offset.
-    model_.SetToolbarHeight(kToolbarHeight);
+    model_.SetCollapsedToolbarHeight(0.0);
+    model_.SetExpandedToolbarHeight(kToolbarHeight);
     model_.SetScrollViewHeight(kScrollViewHeight);
     model_.SetContentHeight(kContentHeight);
     model_.ResetForNavigation();
@@ -114,7 +115,7 @@
 TEST_F(FullscreenModelTest, UpdateToolbarHeight) {
   // Reset the toolbar height and verify that the base offset is reset and that
   // the toolbar is fully visible.
-  model().SetToolbarHeight(2.0 * kToolbarHeight);
+  model().SetExpandedToolbarHeight(2.0 * kToolbarHeight);
   EXPECT_FALSE(model().has_base_offset());
   EXPECT_EQ(observer().progress(), 1.0);
   // Simulate a page load to a 0.0 y content offset.
@@ -173,7 +174,7 @@
 // Tests that updating the y content offset while the toolbar height is 0 only
 // updates the model's base offset.
 TEST_F(FullscreenModelTest, NoToolbarScroll) {
-  model().SetToolbarHeight(0.0);
+  model().SetExpandedToolbarHeight(0.0);
   model().SetYContentOffset(100);
   EXPECT_EQ(observer().progress(), 1.0);
   EXPECT_EQ(model().base_offset(), 100);
diff --git a/ios/chrome/browser/ui/fullscreen/test/fullscreen_model_test_util.mm b/ios/chrome/browser/ui/fullscreen/test/fullscreen_model_test_util.mm
index 997bacb..3c9b32a6 100644
--- a/ios/chrome/browser/ui/fullscreen/test/fullscreen_model_test_util.mm
+++ b/ios/chrome/browser/ui/fullscreen/test/fullscreen_model_test_util.mm
@@ -14,7 +14,8 @@
 void SetUpFullscreenModelForTesting(FullscreenModel* model,
                                     CGFloat toolbar_height) {
   EXPECT_GE(toolbar_height, 0.0);
-  model->SetToolbarHeight(toolbar_height);
+  model->SetCollapsedToolbarHeight(0.0);
+  model->SetExpandedToolbarHeight(toolbar_height);
   model->SetScrollViewHeight(2 * toolbar_height);
   model->SetContentHeight(2 * model->GetScrollViewHeight());
   model->ResetForNavigation();
@@ -34,11 +35,11 @@
                                              CGFloat progress) {
   ASSERT_GE(progress, 0.0);
   ASSERT_LE(progress, 1.0);
-  CGFloat toolbar_height = model->GetToolbarHeight();
+  CGFloat height_delta = model->toolbar_height_delta();
   CGFloat base_offset =
       GetFullscreenBaseOffsetForProgress(model, model->progress());
   CGFloat final_y_content_offset =
-      base_offset + (1.0 - progress) * toolbar_height;
+      base_offset + (1.0 - progress) * height_delta;
   CGFloat delta = final_y_content_offset - model->GetYContentOffset();
   SimulateFullscreenUserScrollWithDelta(model, delta);
 }
@@ -47,5 +48,5 @@
                                            CGFloat progress) {
   EXPECT_TRUE(model->has_base_offset());
   return model->GetYContentOffset() -
-         (1.0 - progress) * model->GetToolbarHeight();
+         (1.0 - progress) * model->toolbar_height_delta();
 }
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_constants.h b/ios/chrome/browser/ui/popup_menu/popup_menu_constants.h
index 99d7b59..68abfb7 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_constants.h
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_constants.h
@@ -16,4 +16,7 @@
 // Duration of the highlight animation of the popup menu.
 extern const CGFloat kHighlightAnimationDuration;
 
+// Radius for the rounded corner of the popup menu.
+extern const CGFloat kPopupMenuCornerRadius;
+
 #endif  // IOS_CHROME_BROWSER_UI_POPUP_MENU_POPUP_MENU_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_constants.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_constants.mm
index ed39219..51298375 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_constants.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_constants.mm
@@ -15,3 +15,5 @@
 
 const CGFloat kSelectedItemBackgroundAlpha = 0.05;
 const CGFloat kHighlightAnimationDuration = 0.5;
+
+const CGFloat kPopupMenuCornerRadius = 13;
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_table_view_controller.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_table_view_controller.mm
index 3466b21..2a2edff 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_table_view_controller.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_table_view_controller.mm
@@ -74,6 +74,9 @@
   self.tableView.tableHeaderView = [[UIView alloc]
       initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.bounds.size.width,
                                0.01f)];
+
+  self.view.layer.cornerRadius = kPopupMenuCornerRadius;
+  self.view.layer.masksToBounds = YES;
 }
 
 - (void)viewDidAppear:(BOOL)animated {
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_view_controller.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_view_controller.mm
index 020f6c05..f241623 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_view_controller.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_view_controller.mm
@@ -6,6 +6,7 @@
 
 #import "ios/chrome/browser/ui/commands/browser_commands.h"
 #import "ios/chrome/browser/ui/image_util/image_util.h"
+#import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h"
 #import "ios/chrome/browser/ui/util/constraints_ui_util.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -16,7 +17,6 @@
 
 namespace {
 const CGFloat kImageMargin = 196;
-const CGFloat kCornerRadius = 13;
 const CGFloat kBackgroundGreyScale = 0.98;
 const CGFloat kBackgroundAlpha = 0.65;
 }  // namespace
@@ -77,7 +77,7 @@
     UIVisualEffectView* blur =
         [[UIVisualEffectView alloc] initWithEffect:blurEffect];
     blur.translatesAutoresizingMaskIntoConstraints = NO;
-    blur.layer.cornerRadius = kCornerRadius;
+    blur.layer.cornerRadius = kPopupMenuCornerRadius;
     blur.clipsToBounds = YES;
     blur.backgroundColor =
         [UIColor colorWithWhite:kBackgroundGreyScale alpha:kBackgroundAlpha];
@@ -93,7 +93,7 @@
   shadow.autoresizingMask =
       UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
 
-  _contentContainer.layer.cornerRadius = kCornerRadius;
+  _contentContainer.layer.cornerRadius = kPopupMenuCornerRadius;
   _contentContainer.translatesAutoresizingMaskIntoConstraints = NO;
   [self.view addSubview:_contentContainer];
 }
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data_manager.mm b/ios/chrome/browser/ui/settings/clear_browsing_data_manager.mm
index a1626dc4..962e4ab 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data_manager.mm
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data_manager.mm
@@ -38,7 +38,9 @@
 #import "ios/chrome/browser/ui/settings/cells/clear_browsing_data_constants.h"
 #import "ios/chrome/browser/ui/settings/cells/clear_browsing_data_item.h"
 #import "ios/chrome/browser/ui/settings/cells/table_view_clear_browsing_data_item.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_text_link_item.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
 #include "ios/chrome/common/channel_info.h"
 #include "ios/chrome/grit/ios_chromium_strings.h"
@@ -55,6 +57,8 @@
 // Maximum number of times to show a notice about other forms of browsing
 // history.
 const int kMaxTimesHistoryNoticeShown = 1;
+// The tableView button red background color.
+const CGFloat kTableViewButtonBackgroundColor = 0xE94235;
 
 }  // namespace
 
@@ -309,6 +313,8 @@
 
 - (ListItem*)clearButtonItem {
   ListItem* clearButtonItem;
+  // Create a CollectionViewTextItem for CollectionView models and a
+  // TableViewTextButtonItem for TableView models.
   if (self.listType == ClearBrowsingDataListType::kListTypeCollectionView) {
     CollectionViewTextItem* collectionClearButtonItem =
         [[CollectionViewTextItem alloc]
@@ -319,10 +325,14 @@
     collectionClearButtonItem.textColor = [[MDCPalette cr_redPalette] tint500];
     clearButtonItem = collectionClearButtonItem;
   } else {
-    // TODO(crbug.com/853402): Implement using TableviewTextButtonItem.
-    TableViewTextItem* tableViewDummyItem = [[TableViewTextItem alloc]
-        initWithType:ItemTypeClearBrowsingDataButton];
-    clearButtonItem = tableViewDummyItem;
+    TableViewTextButtonItem* tableViewClearButtonItem =
+        [[TableViewTextButtonItem alloc]
+            initWithType:ItemTypeClearBrowsingDataButton];
+    tableViewClearButtonItem.buttonText =
+        l10n_util::GetNSString(IDS_IOS_CLEAR_BUTTON);
+    tableViewClearButtonItem.buttonBackgroundColor =
+        UIColorFromRGB(kTableViewButtonBackgroundColor);
+    clearButtonItem = tableViewClearButtonItem;
   }
   return clearButtonItem;
 }
@@ -393,6 +403,8 @@
 
 - (ListItem*)footerGoogleAccountItem {
   ListItem* footerItem;
+  // Use CollectionViewFooterItem for CollectionView models and
+  // TableViewTextLinkItem for TableView models.
   if (self.listType == ClearBrowsingDataListType::kListTypeCollectionView) {
     CollectionViewFooterItem* collectionFooterItem =
         [[CollectionViewFooterItem alloc]
@@ -405,10 +417,11 @@
     collectionFooterItem.image = image;
     footerItem = collectionFooterItem;
   } else {
-    // TODO(crbug.com/853402): Implement using TableviewLinkTextItem.
-    TableViewTextItem* dummyItem =
-        [[TableViewTextItem alloc] initWithType:ItemTypeFooterGoogleAccount];
-    footerItem = dummyItem;
+    TableViewTextLinkItem* tableViewFooterItem = [[TableViewTextLinkItem alloc]
+        initWithType:ItemTypeFooterGoogleAccount];
+    tableViewFooterItem.text =
+        l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_FOOTER_ACCOUNT);
+    footerItem = tableViewFooterItem;
   }
   return footerItem;
 }
@@ -451,6 +464,8 @@
                             URL:(const char[])URL
                           image:(UIImage*)image {
   ListItem* footerItem;
+  // Use CollectionViewFooterItem for CollectionView models and
+  // TableViewTextLinkItem for TableView models.
   if (self.listType == ClearBrowsingDataListType::kListTypeCollectionView) {
     CollectionViewFooterItem* collectionFooterItem =
         [[CollectionViewFooterItem alloc] initWithType:itemType];
@@ -461,10 +476,12 @@
     collectionFooterItem.image = image;
     footerItem = collectionFooterItem;
   } else {
-    // TODO(crbug.com/853402): Implement using TableviewLinkTextItem.
-    TableViewTextItem* dummyItem =
-        [[TableViewTextItem alloc] initWithType:itemType];
-    footerItem = dummyItem;
+    TableViewTextLinkItem* tableViewFooterItem =
+        [[TableViewTextLinkItem alloc] initWithType:itemType];
+    tableViewFooterItem.text = l10n_util::GetNSString(titleMessageID);
+    tableViewFooterItem.linkURL = google_util::AppendGoogleLocaleParam(
+        GURL(URL), GetApplicationContext()->GetApplicationLocale());
+    footerItem = tableViewFooterItem;
   }
 
   return footerItem;
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data_table_view_controller.mm b/ios/chrome/browser/ui/settings/clear_browsing_data_table_view_controller.mm
index 3436703..3b60e68 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data_table_view_controller.mm
@@ -5,9 +5,12 @@
 #import "ios/chrome/browser/ui/settings/clear_browsing_data_table_view_controller.h"
 
 #include "base/mac/foundation_util.h"
+#include "ios/chrome/browser/browsing_data/browsing_data_remove_mask.h"
 #import "ios/chrome/browser/ui/settings/cells/table_view_clear_browsing_data_item.h"
 #import "ios/chrome/browser/ui/settings/clear_browsing_data_manager.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.h"
+#import "ios/chrome/browser/ui/table_view/cells/table_view_text_link_item.h"
 #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -16,11 +19,18 @@
 #error "This file requires ARC support."
 #endif
 
+namespace {
+// Separation space between sections.
+const CGFloat kSeparationSpaceBetweenSections = 9;
+}  // namespace
+
 namespace ios {
 class ChromeBrowserState;
 }
 
-@interface ClearBrowsingDataTableViewController ()
+@interface ClearBrowsingDataTableViewController ()<
+    TableViewTextLinkCellDelegate,
+    TextButtonItemDelegate>
 
 // TODO(crbug.com/850699): remove direct dependency and replace with
 // delegate.
@@ -55,6 +65,9 @@
   self.tableView.estimatedRowHeight = 56;
   self.tableView.rowHeight = UITableViewAutomaticDimension;
   self.tableView.estimatedSectionHeaderHeight = 0;
+  // Add a tableFooterView in order to disable separators at the bottom of the
+  // tableView.
+  self.tableView.tableFooterView = [[UIView alloc] init];
   self.styler.tableViewBackgroundColor = [UIColor clearColor];
   // Align cell separators with text label leading margin.
   [self.tableView
@@ -71,6 +84,45 @@
   [self.dataManager loadModel:self.tableViewModel];
 }
 
+#pragma mark - UITableViewDataSource
+
+- (UITableViewCell*)tableView:(UITableView*)tableView
+        cellForRowAtIndexPath:(NSIndexPath*)indexPath {
+  UITableViewCell* cellToReturn =
+      [super tableView:tableView cellForRowAtIndexPath:indexPath];
+  TableViewItem* item = [self.tableViewModel itemAtIndexPath:indexPath];
+  switch (item.type) {
+    case ItemTypeFooterSavedSiteData:
+    case ItemTypeFooterClearSyncAndSavedSiteData:
+    case ItemTypeFooterGoogleAccountAndMyActivity: {
+      TableViewTextLinkCell* tableViewTextLinkCell =
+          base::mac::ObjCCastStrict<TableViewTextLinkCell>(cellToReturn);
+      [tableViewTextLinkCell setDelegate:self];
+      tableViewTextLinkCell.selectionStyle = UITableViewCellSelectionStyleNone;
+      // Hide the cell separator inset for footnotes.
+      tableViewTextLinkCell.separatorInset =
+          UIEdgeInsetsMake(0, tableViewTextLinkCell.bounds.size.width, 0, 0);
+      break;
+    }
+    case ItemTypeClearBrowsingDataButton: {
+      TableViewTextButtonCell* tableViewTextButtonCell =
+          base::mac::ObjCCastStrict<TableViewTextButtonCell>(cellToReturn);
+      tableViewTextButtonCell.selectionStyle =
+          UITableViewCellSelectionStyleNone;
+      tableViewTextButtonCell.delegate = self;
+      break;
+    }
+    case ItemTypeDataTypeBrowsingHistory:
+    case ItemTypeDataTypeCookiesSiteData:
+    case ItemTypeDataTypeCache:
+    case ItemTypeDataTypeSavedPasswords:
+    case ItemTypeDataTypeAutofill:
+    default:
+      break;
+  }
+  return cellToReturn;
+}
+
 #pragma mark - UITableViewDelegate
 
 - (void)tableView:(UITableView*)tableView
@@ -101,4 +153,44 @@
   }
 }
 
+- (CGFloat)tableView:(UITableView*)tableView
+    heightForFooterInSection:(NSInteger)section {
+  return kSeparationSpaceBetweenSections;
+}
+
+#pragma mark - TableViewTextLinkCellDelegate
+
+- (void)tableViewTextLinkCell:(TableViewTextLinkCell*)cell
+            didRequestOpenURL:(const GURL&)URL {
+  [self openURLInNewTab:URL];
+}
+
+#pragma mark - TextButtonItemDelegate
+
+- (void)performButtonAction {
+  BrowsingDataRemoveMask dataTypeMaskToRemove =
+      BrowsingDataRemoveMask::REMOVE_NOTHING;
+  NSArray* dataTypeItems = [self.tableViewModel
+      itemsInSectionWithIdentifier:SectionIdentifierDataTypes];
+  for (TableViewClearBrowsingDataItem* dataTypeItem in dataTypeItems) {
+    DCHECK([dataTypeItem isKindOfClass:[TableViewClearBrowsingDataItem class]]);
+    if (dataTypeItem.checked) {
+      dataTypeMaskToRemove = dataTypeMaskToRemove | dataTypeItem.dataTypeMask;
+    }
+  }
+  UIAlertController* alertController = [self.dataManager
+      alertControllerWithDataTypesToRemove:dataTypeMaskToRemove];
+  if (alertController) {
+    [self presentViewController:alertController animated:YES completion:nil];
+  }
+}
+
+#pragma mark - Private Methods
+
+// Opens URL in a new non-incognito tab and dismisses the clear browsing data
+// view.
+- (void)openURLInNewTab:(const GURL&)URL {
+  // TODO(crbug.com/854882): Implement open URL logic.
+}
+
 @end
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.h b/ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.h
index 2d1f025..82af8c1 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.h
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.h
@@ -24,6 +24,9 @@
 // Text for cell button.
 @property(nonatomic, readwrite, strong) NSString* buttonText;
 
+// Button background color. Default is custom blue color.
+@property(nonatomic, strong) UIColor* buttonBackgroundColor;
+
 @end
 
 // TableViewTextButtonCell contains a textLabel and a UIbutton
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.mm b/ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.mm
index f2083a3..fdd368d 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.mm
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.mm
@@ -31,9 +31,10 @@
 }  // namespace
 
 @implementation TableViewTextButtonItem
+@synthesize buttonBackgroundColor = _buttonBackgroundColor;
+@synthesize buttonText = _buttonText;
 @synthesize delegate = _delegate;
 @synthesize text = _text;
-@synthesize buttonText = _buttonText;
 
 - (instancetype)initWithType:(NSInteger)type {
   self = [super initWithType:type];
@@ -51,6 +52,9 @@
   cell.delegate = self.delegate;
   cell.textLabel.text = self.text;
   [cell.button setTitle:self.buttonText forState:UIControlStateNormal];
+  cell.button.backgroundColor = self.buttonBackgroundColor
+                                    ? self.buttonBackgroundColor
+                                    : UIColorFromRGB(blueHexColor);
   [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
 }
 
@@ -76,7 +80,6 @@
 
     // Create button.
     self.button = [[UIButton alloc] init];
-    self.button.backgroundColor = UIColorFromRGB(blueHexColor);
     [self.button setTitleColor:[UIColor whiteColor]
                       forState:UIControlStateNormal];
     self.button.translatesAutoresizingMaskIntoConstraints = NO;
diff --git a/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.h b/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.h
index a2d8fdc..63eb4bae 100644
--- a/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.h
+++ b/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.h
@@ -12,9 +12,10 @@
 class WebStateList;
 
 @protocol ToolbarHeightProviderForFullscreen
-// Returns the height of the part of the toolbar that is only displayed when not
-// in fullscreen.
-- (CGFloat)nonFullscreenToolbarHeight;
+// The minimum and maximum amount by which the top toolbar overlaps the browser
+// content area.
+- (CGFloat)collapsedTopToolbarHeight;
+- (CGFloat)expandedTopToolbarHeight;
 @end
 
 // Helper object that uses navigation events to update a ToolbarUIState.
diff --git a/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.mm b/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.mm
index 61e7b2da..ccbe3bd0 100644
--- a/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.mm
+++ b/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.mm
@@ -138,7 +138,8 @@
 #pragma mark Private
 
 - (void)updateState {
-  self.toolbarUI.toolbarHeight = [self.owner nonFullscreenToolbarHeight];
+  self.toolbarUI.collapsedHeight = [self.owner collapsedTopToolbarHeight];
+  self.toolbarUI.expandedHeight = [self.owner expandedTopToolbarHeight];
 }
 
 @end
diff --git a/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater_unittest.mm b/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater_unittest.mm
index 1d8b9ce1..d594eb79 100644
--- a/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater_unittest.mm
+++ b/ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater_unittest.mm
@@ -21,13 +21,16 @@
 #endif
 
 @interface TestToolbarOwner : NSObject<ToolbarHeightProviderForFullscreen>
-// Define writable property with same name as |-nonFullscreenToolbarHeight|
-// getter defined in ToolbarHeightProviderForFullscreen.
-@property(nonatomic, assign) CGFloat nonFullscreenToolbarHeight;
+// Define writable property with same name as |-collapsedTopToolbarHeight| and
+// |-expandedTopToolbarHeight| getters defined in
+// ToolbarHeightProviderForFullscreen.
+@property(nonatomic, assign) CGFloat collapsedTopToolbarHeight;
+@property(nonatomic, assign) CGFloat expandedTopToolbarHeight;
 @end
 
 @implementation TestToolbarOwner
-@synthesize nonFullscreenToolbarHeight = _nonFullscreenToolbarHeight;
+@synthesize collapsedTopToolbarHeight = _collapsedTopToolbarHeight;
+@synthesize expandedTopToolbarHeight = _expandedTopToolbarHeight;
 @end
 
 class LegacyToolbarUIUpdaterTest : public PlatformTest {
@@ -46,7 +49,7 @@
   // Getters.
   WebStateList* web_state_list() { return &web_state_list_; }
   TestToolbarOwner* toolbar_owner() { return toolbar_owner_; }
-  CGFloat toolbar_height() { return toolbar_ui_.toolbarHeight; }
+  CGFloat expanded_toolbar_height() { return toolbar_ui_.expandedHeight; }
 
   // Start or stop updating the state.
   void StartUpdating() {
@@ -85,11 +88,11 @@
 
 // Tests that |-startUpdating| resets the state's height when starting.
 TEST_F(LegacyToolbarUIUpdaterTest, StartUpdating) {
-  EXPECT_EQ(toolbar_height(), 0.0);
+  EXPECT_EQ(expanded_toolbar_height(), 0.0);
   const CGFloat kHeight = 150.0;
-  toolbar_owner().nonFullscreenToolbarHeight = kHeight;
+  toolbar_owner().expandedTopToolbarHeight = kHeight;
   StartUpdating();
-  EXPECT_EQ(toolbar_height(), kHeight);
+  EXPECT_EQ(expanded_toolbar_height(), kHeight);
 }
 
 // Tests that the state is not updated after calling |-stopUpdating|.
@@ -97,15 +100,15 @@
   web::TestWebState* web_state = InsertActiveWebState();
   StartUpdating();
   const CGFloat kHeight = 150.0;
-  toolbar_owner().nonFullscreenToolbarHeight = kHeight;
+  toolbar_owner().expandedTopToolbarHeight = kHeight;
   web::FakeNavigationContext context;
   web_state->OnNavigationFinished(&context);
-  EXPECT_EQ(toolbar_height(), kHeight);
+  EXPECT_EQ(expanded_toolbar_height(), kHeight);
   const CGFloat kNonUpdatedHeight = 500.0;
   StopUpdating();
-  toolbar_owner().nonFullscreenToolbarHeight = kNonUpdatedHeight;
+  toolbar_owner().expandedTopToolbarHeight = kNonUpdatedHeight;
   web_state->OnNavigationFinished(&context);
-  EXPECT_EQ(toolbar_height(), kHeight);
+  EXPECT_EQ(expanded_toolbar_height(), kHeight);
 }
 
 // Tests that the updater polls for the new height when the active WebState
@@ -113,10 +116,10 @@
 TEST_F(LegacyToolbarUIUpdaterTest, UpdateActiveWebState) {
   StartUpdating();
   const CGFloat kHeight = 150.0;
-  toolbar_owner().nonFullscreenToolbarHeight = kHeight;
-  EXPECT_EQ(toolbar_height(), 0.0);
+  toolbar_owner().expandedTopToolbarHeight = kHeight;
+  EXPECT_EQ(expanded_toolbar_height(), 0.0);
   InsertActiveWebState();
-  EXPECT_EQ(toolbar_height(), kHeight);
+  EXPECT_EQ(expanded_toolbar_height(), kHeight);
 }
 
 // Tests that the updater polls for the new height when the active WebState
@@ -125,12 +128,12 @@
   web::TestWebState* web_state = InsertActiveWebState();
   StartUpdating();
   const CGFloat kHeight = 150.0;
-  toolbar_owner().nonFullscreenToolbarHeight = kHeight;
-  EXPECT_EQ(toolbar_height(), 0.0);
+  toolbar_owner().expandedTopToolbarHeight = kHeight;
+  EXPECT_EQ(expanded_toolbar_height(), 0.0);
   web::FakeNavigationContext context;
   context.SetIsRendererInitiated(false);
   web_state->OnNavigationStarted(&context);
-  EXPECT_EQ(toolbar_height(), kHeight);
+  EXPECT_EQ(expanded_toolbar_height(), kHeight);
 }
 
 // Tests that the updater waits until a render-initiated navigation is committed
@@ -139,12 +142,12 @@
   web::TestWebState* web_state = InsertActiveWebState();
   StartUpdating();
   const CGFloat kHeight = 150.0;
-  toolbar_owner().nonFullscreenToolbarHeight = kHeight;
-  EXPECT_EQ(toolbar_height(), 0.0);
+  toolbar_owner().expandedTopToolbarHeight = kHeight;
+  EXPECT_EQ(expanded_toolbar_height(), 0.0);
   web::FakeNavigationContext context;
   context.SetIsRendererInitiated(true);
   web_state->OnNavigationStarted(&context);
-  EXPECT_EQ(toolbar_height(), 0.0);
+  EXPECT_EQ(expanded_toolbar_height(), 0.0);
   web_state->OnNavigationFinished(&context);
-  EXPECT_EQ(toolbar_height(), kHeight);
+  EXPECT_EQ(expanded_toolbar_height(), kHeight);
 }
diff --git a/ios/chrome/browser/ui/toolbar/test/test_toolbar_ui_observer.h b/ios/chrome/browser/ui/toolbar/test/test_toolbar_ui_observer.h
index 3b3df01c..ba6ffb4 100644
--- a/ios/chrome/browser/ui/toolbar/test/test_toolbar_ui_observer.h
+++ b/ios/chrome/browser/ui/toolbar/test/test_toolbar_ui_observer.h
@@ -16,7 +16,8 @@
 // broadcaster.
 @property(nonatomic, strong) ChromeBroadcaster* broadcaster;
 // The broadcasted UI state observed by this object.
-@property(nonatomic, readonly) CGFloat toolbarHeight;
+@property(nonatomic, readonly) CGFloat collapsedHeight;
+@property(nonatomic, readonly) CGFloat expandedHeight;
 
 @end
 #endif  // IOS_CHROME_BROWSER_UI_TOOLBAR_TEST_TEST_TOOLBAR_UI_OBSERVER_H_
diff --git a/ios/chrome/browser/ui/toolbar/test/test_toolbar_ui_observer.mm b/ios/chrome/browser/ui/toolbar/test/test_toolbar_ui_observer.mm
index 728bac0..f2d245cf 100644
--- a/ios/chrome/browser/ui/toolbar/test/test_toolbar_ui_observer.mm
+++ b/ios/chrome/browser/ui/toolbar/test/test_toolbar_ui_observer.mm
@@ -10,18 +10,27 @@
 
 @implementation TestToolbarUIObserver
 @synthesize broadcaster = _broadcaster;
-@synthesize toolbarHeight = _toolbarHeight;
+@synthesize collapsedHeight = _collapsedHeight;
+@synthesize expandedHeight = _expandedHeight;
 
 - (void)setBroadcaster:(ChromeBroadcaster*)broadcaster {
   [_broadcaster removeObserver:self
-                   forSelector:@selector(broadcastToolbarHeight:)];
+                   forSelector:@selector(broadcastCollapsedToolbarHeight:)];
+  [_broadcaster removeObserver:self
+                   forSelector:@selector(broadcastExpandedToolbarHeight:)];
   _broadcaster = broadcaster;
   [_broadcaster addObserver:self
-                forSelector:@selector(broadcastToolbarHeight:)];
+                forSelector:@selector(broadcastCollapsedToolbarHeight:)];
+  [_broadcaster addObserver:self
+                forSelector:@selector(broadcastExpandedToolbarHeight:)];
 }
 
-- (void)broadcastToolbarHeight:(CGFloat)toolbarHeight {
-  _toolbarHeight = toolbarHeight;
+- (void)broadcastCollapsedToolbarHeight:(CGFloat)toolbarHeight {
+  _collapsedHeight = toolbarHeight;
+}
+
+- (void)broadcastExpandedToolbarHeight:(CGFloat)toolbarHeight {
+  _expandedHeight = toolbarHeight;
 }
 
 @end
diff --git a/ios/chrome/browser/ui/toolbar/test/toolbar_broadcast_test_util.mm b/ios/chrome/browser/ui/toolbar/test/toolbar_broadcast_test_util.mm
index 8a5b09b0..9075524b 100644
--- a/ios/chrome/browser/ui/toolbar/test/toolbar_broadcast_test_util.mm
+++ b/ios/chrome/browser/ui/toolbar/test/toolbar_broadcast_test_util.mm
@@ -21,19 +21,25 @@
 class TestToolbarUIStateModifier {
  public:
   TestToolbarUIStateModifier(ToolbarUIState* toolbar_ui)
-      : toolbar_ui_(toolbar_ui), original_height_(toolbar_ui_.toolbarHeight) {
-    toolbar_ui_.toolbarHeight += kHeightDelta;
+      : toolbar_ui_(toolbar_ui),
+        original_collapsed_height_(toolbar_ui_.collapsedHeight),
+        original_expanded_height_(toolbar_ui_.expandedHeight) {
+    toolbar_ui_.collapsedHeight += kHeightDelta;
+    toolbar_ui_.expandedHeight += kHeightDelta;
   }
   ~TestToolbarUIStateModifier() {
-    toolbar_ui_.toolbarHeight = original_height_;
+    toolbar_ui_.collapsedHeight = original_collapsed_height_;
+    toolbar_ui_.expandedHeight = original_expanded_height_;
   }
 
   // The original values of the UI state.
-  CGFloat original_height() { return original_height_; }
+  CGFloat original_collapsed_height() { return original_collapsed_height_; }
+  CGFloat original_expanded_height() { return original_expanded_height_; }
 
  private:
   __strong ToolbarUIState* toolbar_ui_ = nil;
-  CGFloat original_height_ = 0.0;
+  CGFloat original_collapsed_height_ = 0.0;
+  CGFloat original_expanded_height_ = 0.0;
 };
 }  // namespace
 
@@ -49,10 +55,14 @@
   // Verify whether the changed or original UI elements are observed.
   if (should_broadcast) {
     EXPECT_TRUE(
-        AreCGFloatsEqual(observer.toolbarHeight, toolbar_ui.toolbarHeight));
-  } else {
+        AreCGFloatsEqual(observer.collapsedHeight, toolbar_ui.collapsedHeight));
     EXPECT_TRUE(
-        AreCGFloatsEqual(observer.toolbarHeight, modifier.original_height()));
+        AreCGFloatsEqual(observer.expandedHeight, toolbar_ui.expandedHeight));
+  } else {
+    EXPECT_TRUE(AreCGFloatsEqual(observer.collapsedHeight,
+                                 modifier.original_collapsed_height()));
+    EXPECT_TRUE(AreCGFloatsEqual(observer.expandedHeight,
+                                 modifier.original_expanded_height()));
   }
   // Stop observing |broadcaster|.
   observer.broadcaster = nil;
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_ui.h b/ios/chrome/browser/ui/toolbar/toolbar_ui.h
index d9e2878..87680285 100644
--- a/ios/chrome/browser/ui/toolbar/toolbar_ui.h
+++ b/ios/chrome/browser/ui/toolbar/toolbar_ui.h
@@ -10,9 +10,13 @@
 // Protocol for the UI displaying the toolbar.
 @protocol ToolbarUI<NSObject>
 
-// The height of the toolbar, not including the safe area inset.
-// This should be broadcast using |-broadcastToolbarHeight:|.
-@property(nonatomic, readonly) CGFloat toolbarHeight;
+// The minimum height of the toolbar relative to the browser content area.
+// This should be broadcast using |-broadcastCollapsedToolbarHeight:|.
+@property(nonatomic, readonly) CGFloat collapsedHeight;
+
+// The minimum height of the toolbar relative to the browser content area.
+// This should be broadcast using |-broadcastExpandedToolbarHeight:|.
+@property(nonatomic, readonly) CGFloat expandedHeight;
 
 @end
 
@@ -21,7 +25,8 @@
 @interface ToolbarUIState : NSObject<ToolbarUI>
 
 // Redefine properties as readwrite.
-@property(nonatomic, assign) CGFloat toolbarHeight;
+@property(nonatomic, assign) CGFloat collapsedHeight;
+@property(nonatomic, assign) CGFloat expandedHeight;
 
 @end
 
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_ui.mm b/ios/chrome/browser/ui/toolbar/toolbar_ui.mm
index e595c3c..3c67ad3 100644
--- a/ios/chrome/browser/ui/toolbar/toolbar_ui.mm
+++ b/ios/chrome/browser/ui/toolbar/toolbar_ui.mm
@@ -9,5 +9,6 @@
 #endif
 
 @implementation ToolbarUIState
-@synthesize toolbarHeight = _toolbarHeight;
+@synthesize collapsedHeight = _collapsedHeight;
+@synthesize expandedHeight = _expandedHeight;
 @end
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_ui_broadcasting_util.mm b/ios/chrome/browser/ui/toolbar/toolbar_ui_broadcasting_util.mm
index dfd8e21b..b7e37f7 100644
--- a/ios/chrome/browser/ui/toolbar/toolbar_ui_broadcasting_util.mm
+++ b/ios/chrome/browser/ui/toolbar/toolbar_ui_broadcasting_util.mm
@@ -13,11 +13,17 @@
 
 void StartBroadcastingToolbarUI(id<ToolbarUI> toolbar,
                                 ChromeBroadcaster* broadcaster) {
-  [broadcaster broadcastValue:@"toolbarHeight"
+  [broadcaster broadcastValue:@"collapsedHeight"
                      ofObject:toolbar
-                     selector:@selector(broadcastToolbarHeight:)];
+                     selector:@selector(broadcastCollapsedToolbarHeight:)];
+  [broadcaster broadcastValue:@"expandedHeight"
+                     ofObject:toolbar
+                     selector:@selector(broadcastExpandedToolbarHeight:)];
 }
 
 void StopBroadcastingToolbarUI(ChromeBroadcaster* broadcaster) {
-  [broadcaster stopBroadcastingForSelector:@selector(broadcastToolbarHeight:)];
+  [broadcaster
+      stopBroadcastingForSelector:@selector(broadcastCollapsedToolbarHeight:)];
+  [broadcaster
+      stopBroadcastingForSelector:@selector(broadcastExpandedToolbarHeight:)];
 }
diff --git a/ios/chrome/browser/web/BUILD.gn b/ios/chrome/browser/web/BUILD.gn
index 36ea085..de3436f 100644
--- a/ios/chrome/browser/web/BUILD.gn
+++ b/ios/chrome/browser/web/BUILD.gn
@@ -11,6 +11,8 @@
     "dom_altering_lock.mm",
     "error_page_util.h",
     "error_page_util.mm",
+    "font_size_tab_helper.h",
+    "font_size_tab_helper.mm",
     "load_timing_tab_helper.h",
     "load_timing_tab_helper.mm",
     "mailto_handler.h",
@@ -82,6 +84,8 @@
   testonly = true
   sources = [
     "error_page_util_unittest.mm",
+    "font_size_js_unittest.mm",
+    "font_size_tab_helper_unittest.mm",
     "load_timing_tab_helper_unittest.mm",
     "mailto_handler_gmail_unittest.mm",
     "mailto_handler_inbox_unittest.mm",
@@ -95,6 +99,7 @@
     "tab_id_tab_helper_unittest.mm",
   ]
   deps = [
+    ":accessibility",
     ":tab_helper_delegates",
     ":test_support",
     ":web",
@@ -120,6 +125,7 @@
   closure_entry_point = "__crWeb.chromeBundleAllFrames"
   sources = [
     "//components/autofill/ios/fill/resources/form.js",
+    "resources/accessibility.js",
     "resources/chrome_bundle_all_frames.js",
   ]
 }
@@ -152,6 +158,12 @@
   ]
 }
 
+js_compile_checked("accessibility") {
+  sources = [
+    "resources/accessibility.js",
+  ]
+}
+
 source_set("web_internal") {
   configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
diff --git a/ios/chrome/browser/web/chrome_web_client_unittest.mm b/ios/chrome/browser/web/chrome_web_client_unittest.mm
index 2a838444..fd3680e 100644
--- a/ios/chrome/browser/web/chrome_web_client_unittest.mm
+++ b/ios/chrome/browser/web/chrome_web_client_unittest.mm
@@ -98,6 +98,20 @@
   EXPECT_EQ(0u, product_str.find("CriOS/"));
 }
 
+// Tests that ChromeWebClient provides accessibility script for WKWebView.
+TEST_F(ChromeWebClientTest, WKWebViewEarlyPageScriptAccessibility) {
+  // Chrome scripts rely on __gCrWeb object presence.
+  WKWebView* web_view = web::BuildWKWebView(CGRectZero, browser_state());
+  web::ExecuteJavaScript(web_view, @"__gCrWeb = {};");
+
+  web::ScopedTestingWebClient web_client(std::make_unique<ChromeWebClient>());
+  NSString* script =
+      web_client.Get()->GetDocumentStartScriptForAllFrames(browser_state());
+  web::ExecuteJavaScript(web_view, script);
+  EXPECT_NSEQ(@"object", web::ExecuteJavaScript(
+                             web_view, @"typeof __gCrWeb.accessibility"));
+}
+
 // Tests that ChromeWebClient provides print script for WKWebView.
 TEST_F(ChromeWebClientTest, WKWebViewEarlyPageScriptPrint) {
   // Chrome scripts rely on __gCrWeb object presence.
diff --git a/ios/chrome/browser/web/font_size_js_unittest.mm b/ios/chrome/browser/web/font_size_js_unittest.mm
new file mode 100644
index 0000000..a87caa3
--- /dev/null
+++ b/ios/chrome/browser/web/font_size_js_unittest.mm
@@ -0,0 +1,376 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <Foundation/Foundation.h>
+#include <stddef.h>
+
+#include "base/macros.h"
+#import "ios/web/public/test/web_js_test.h"
+#import "ios/web/public/test/web_test_with_web_state.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#import "testing/gtest_mac.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+// Test fixture for accessibility.js testing.
+class FontSizeJsTest : public web::WebJsTest<web::WebTestWithWebState> {
+ public:
+  FontSizeJsTest()
+      : web::WebJsTest<web::WebTestWithWebState>(@[ @"accessibility" ]) {}
+
+  // Find DOM element by |element_id| and get computed font size in px.
+  float GetElementFontSize(NSString* element_id) {
+    NSNumber* res = ExecuteJavaScriptWithFormat(
+        @"parseFloat(getComputedStyle(document.getElementById('%@'))."
+        @"getPropertyValue('font-size'));",
+        element_id);
+    return res.floatValue;
+  }
+
+  // Wraps |html| in <html> and loads. Adds <meta name='viewport'
+  // content='initial-scale=1.0'> to avoid implicit font size inflation (e.g.
+  // for <div style='font-size:10px'>d<div style='font-size:10px'>d</div></div>
+  // the |GetElementFontSize| returns 17px instead of 10px under default
+  // viewport and '-webkit-text-size-adjust=auto'). Setting
+  // '-webkit-text-size-adjust=none' also works.
+  void LoadHtml(NSString* html) {
+    LoadHtmlAndInject(
+        [NSString stringWithFormat:@"<html><meta name='viewport' "
+                                   @"content='initial-scale=1.0'>%@</html>",
+                                   html]);
+  }
+
+  // Executes JavaScript "__gCrWeb.accessibility.adjustFontSize(|scale|)" to
+  // adjust font size to |scale|% and return if it is executed without
+  // exception.
+  bool AdjustFontSize(int scale) WARN_UNUSED_RESULT {
+    id script_result = ExecuteJavaScriptWithFormat(
+        @"__gCrWeb.accessibility.adjustFontSize(%d); true;", scale);
+    return [script_result isEqual:@YES];
+  }
+
+  DISALLOW_COPY_AND_ASSIGN(FontSizeJsTest);
+};
+
+// Tests that __gCrWeb.accessibility.adjustFontSize works for any scale.
+TEST_F(FontSizeJsTest, TestAdjustFontSizeForScale) {
+  float original_size = 0;
+  float current_size = 0;
+
+  LoadHtml(@"<div id='e'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(20));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 20 / 100);
+
+  LoadHtml(@"<div id='e'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(50));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 50 / 100);
+
+  LoadHtml(@"<div id='e'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(90));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 90 / 100);
+
+  LoadHtml(@"<div id='e'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(150));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 150 / 100);
+
+  LoadHtml(@"<div id='e'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(200));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 200 / 100);
+
+  LoadHtml(@"<h1 id='e'>h</h1>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(20));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 20 / 100);
+
+  LoadHtml(@"<h1 id='e'>h</h1>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(50));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 50 / 100);
+
+  LoadHtml(@"<h1 id='e'>h</h1>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(90));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 90 / 100);
+
+  LoadHtml(@"<h1 id='e'>h</h1>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<h1 id='e'>h</h1>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(150));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 150 / 100);
+
+  LoadHtml(@"<h1 id='e'>h</h1>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(200));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 200 / 100);
+
+  LoadHtml(@"<span id='e'>s</span>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(20));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 20 / 100);
+
+  LoadHtml(@"<span id='e'>s</span>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(50));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 50 / 100);
+
+  LoadHtml(@"<span id='e'>s</span>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(90));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 90 / 100);
+
+  LoadHtml(@"<span id='e'>s</span>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<span id='e'>s</span>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(150));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 150 / 100);
+
+  LoadHtml(@"<span id='e'>s</span>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(200));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 200 / 100);
+}
+
+// Tests that __gCrWeb.accessibility.adjustFontSize works for any CSS unit.
+TEST_F(FontSizeJsTest, TestAdjustFontSizeForUnit) {
+  float original_size = 0;
+  float current_size = 0;
+
+  LoadHtml(@"<div id='e' style='font-size: xx-large'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e' style='font-size: 1cm'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e' style='font-size: 5mm'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e' style='font-size: 1in'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e' style='font-size: 10px'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e' style='font-size: 18pt'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e' style='font-size: 2pc'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e' style='font-size: 2.5em'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e' style='font-size: 0.8rem'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+
+  LoadHtml(@"<div id='e' style='font-size: 70%'>d</div>");
+  original_size = GetElementFontSize(@"e");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size = GetElementFontSize(@"e");
+  EXPECT_FLOAT_EQ(current_size, original_size * 110 / 100);
+}
+
+// Tests that __gCrWeb.accessibility.adjustFontSize works for nested elements.
+TEST_F(FontSizeJsTest, TestAdjustFontSizeForNestedElements) {
+  float original_size_1 = 0;
+  float original_size_2 = 0;
+  float current_size_1 = 0;
+  float current_size_2 = 0;
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:xx-large'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:1cm'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:5mm'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:1in'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:18pt'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:2pc'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:2.5em'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:0.8rem'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:70%'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:10px'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:xx-large'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+
+  LoadHtml(
+      @"<div id='e1' style='font-size: 10px'>d<div id='e2' "
+      @"style='font-size:inherit'>d</div></div>");
+  original_size_1 = GetElementFontSize(@"e1");
+  original_size_2 = GetElementFontSize(@"e2");
+  ASSERT_TRUE(AdjustFontSize(110));
+  current_size_1 = GetElementFontSize(@"e1");
+  current_size_2 = GetElementFontSize(@"e2");
+  EXPECT_FLOAT_EQ(current_size_1, original_size_1 * 110 / 100);
+  EXPECT_FLOAT_EQ(current_size_2, original_size_2 * 110 / 100);
+}
diff --git a/ios/chrome/browser/web/font_size_tab_helper.h b/ios/chrome/browser/web/font_size_tab_helper.h
new file mode 100644
index 0000000..202e588
--- /dev/null
+++ b/ios/chrome/browser/web/font_size_tab_helper.h
@@ -0,0 +1,52 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_WEB_FONT_SIZE_TAB_HELPER_H_
+#define IOS_CHROME_BROWSER_WEB_FONT_SIZE_TAB_HELPER_H_
+
+#include "base/macros.h"
+#import "ios/web/public/web_state/web_state_observer.h"
+#import "ios/web/public/web_state/web_state_user_data.h"
+
+namespace web {
+class WebState;
+}  // namespace web
+
+// Adjusts font size of web page by mapping
+// |UIApplication.sharedApplication.preferredContentSizeCategory| to a scaling
+// percentage and setting it to "-webkit-font-size-adjust" style on <body> when
+// the page is successfully loaded or system font size changes.
+class FontSizeTabHelper : public web::WebStateObserver,
+                          public web::WebStateUserData<FontSizeTabHelper> {
+ public:
+  ~FontSizeTabHelper() override;
+
+ private:
+  friend class web::WebStateUserData<FontSizeTabHelper>;
+
+  explicit FontSizeTabHelper(web::WebState* web_state);
+
+  // Sets font size in web page by scaling percentage.
+  void SetPageFontSize(int size);
+
+  // Returns system suggested font size in scaling percentage(e.g. 150 for
+  // 150%).
+  int GetSystemSuggestedFontSize() const;
+
+  // web::WebStateObserver overrides:
+  void PageLoaded(
+      web::WebState* web_state,
+      web::PageLoadCompletionStatus load_completion_status) override;
+  void WebStateDestroyed(web::WebState* web_state) override;
+
+  // Observer id returned by registering at NSNotificationCenter.
+  id content_size_did_change_observer_ = nil;
+
+  // WebState this tab helper is attached to.
+  web::WebState* web_state_ = nullptr;
+
+  DISALLOW_COPY_AND_ASSIGN(FontSizeTabHelper);
+};
+
+#endif  // IOS_CHROME_BROWSER_WEB_FONT_SIZE_TAB_HELPER_H_
diff --git a/ios/chrome/browser/web/font_size_tab_helper.mm b/ios/chrome/browser/web/font_size_tab_helper.mm
new file mode 100644
index 0000000..ee5e526
--- /dev/null
+++ b/ios/chrome/browser/web/font_size_tab_helper.mm
@@ -0,0 +1,80 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/web/font_size_tab_helper.h"
+
+#import <UIKit/UIKit.h>
+
+#import "base/strings/sys_string_conversions.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+DEFINE_WEB_STATE_USER_DATA_KEY(FontSizeTabHelper);
+
+FontSizeTabHelper::~FontSizeTabHelper() {
+  // Remove observer in destructor because |this| is captured by the usingBlock
+  // in calling [NSNotificationCenter.defaultCenter
+  // addObserverForName:object:queue:usingBlock] in constructor.
+  [NSNotificationCenter.defaultCenter
+      removeObserver:content_size_did_change_observer_];
+}
+
+FontSizeTabHelper::FontSizeTabHelper(web::WebState* web_state)
+    : web_state_(web_state) {
+  web_state->AddObserver(this);
+  content_size_did_change_observer_ = [NSNotificationCenter.defaultCenter
+      addObserverForName:UIContentSizeCategoryDidChangeNotification
+                  object:nil
+                   queue:nil
+              usingBlock:^(NSNotification* _Nonnull note) {
+                SetPageFontSize(GetSystemSuggestedFontSize());
+              }];
+}
+
+void FontSizeTabHelper::SetPageFontSize(int size) {
+  if (web_state_->ContentIsHTML()) {
+    NSString* js = [NSString
+        stringWithFormat:@"__gCrWeb.accessibility.adjustFontSize(%d)", size];
+    web_state_->ExecuteJavaScript(base::SysNSStringToUTF16(js));
+  }
+}
+
+int FontSizeTabHelper::GetSystemSuggestedFontSize() const {
+  // TODO(crbug.com/836962): Determine precise scaling numbers for
+  // |font_size_map|.
+  static NSDictionary* font_size_map = @{
+    UIContentSizeCategoryUnspecified : @100,
+    UIContentSizeCategoryExtraSmall : @70,
+    UIContentSizeCategorySmall : @80,
+    UIContentSizeCategoryMedium : @90,
+    UIContentSizeCategoryLarge : @100,  // system default
+    UIContentSizeCategoryExtraLarge : @110,
+    UIContentSizeCategoryExtraExtraLarge : @120,
+    UIContentSizeCategoryExtraExtraExtraLarge : @130,
+    UIContentSizeCategoryAccessibilityMedium : @140,
+    UIContentSizeCategoryAccessibilityLarge : @150,
+    UIContentSizeCategoryAccessibilityExtraLarge : @160,
+    UIContentSizeCategoryAccessibilityExtraExtraLarge : @170,
+    UIContentSizeCategoryAccessibilityExtraExtraExtraLarge : @180,
+  };
+  UIContentSizeCategory category =
+      UIApplication.sharedApplication.preferredContentSizeCategory;
+  NSNumber* font_size = font_size_map[category];
+  return font_size ? font_size.intValue : 100;
+}
+
+void FontSizeTabHelper::WebStateDestroyed(web::WebState* web_state) {
+  web_state->RemoveObserver(this);
+}
+
+void FontSizeTabHelper::PageLoaded(
+    web::WebState* web_state,
+    web::PageLoadCompletionStatus load_completion_status) {
+  DCHECK_EQ(web_state, web_state_);
+  int size = GetSystemSuggestedFontSize();
+  if (size != 100)
+    SetPageFontSize(size);
+}
diff --git a/ios/chrome/browser/web/font_size_tab_helper_unittest.mm b/ios/chrome/browser/web/font_size_tab_helper_unittest.mm
new file mode 100644
index 0000000..1bc6507
--- /dev/null
+++ b/ios/chrome/browser/web/font_size_tab_helper_unittest.mm
@@ -0,0 +1,101 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/web/font_size_tab_helper.h"
+
+#import <UIKit/UIKit.h>
+
+#include "base/strings/utf_string_conversions.h"
+#import "ios/web/public/test/fakes/test_web_state.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+#import "third_party/ocmock/OCMock/OCMock.h"
+#include "third_party/ocmock/gtest_support.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+// Test fixture for FontSizeTabHelper class.
+class FontSizeTabHelperTest : public PlatformTest {
+ public:
+  FontSizeTabHelperTest()
+      : application_(OCMPartialMock([UIApplication sharedApplication])) {
+    OCMStub([application_ preferredContentSizeCategory])
+        .andDo(^(NSInvocation* invocation) {
+          [invocation setReturnValue:&preferred_content_size_category_];
+        });
+    FontSizeTabHelper::CreateForWebState(&web_state_);
+  }
+  ~FontSizeTabHelperTest() override { [application_ stopMocking]; }
+
+  void SetPreferredContentSizeCategory(UIContentSizeCategory category) {
+    preferred_content_size_category_ = category;
+  }
+
+  void SendUIContentSizeCategoryDidChangeNotification() {
+    [NSNotificationCenter.defaultCenter
+        postNotificationName:UIContentSizeCategoryDidChangeNotification
+                      object:nil
+                    userInfo:nil];
+  }
+
+ protected:
+  web::TestWebState web_state_;
+  UIContentSizeCategory preferred_content_size_category_ =
+      UIContentSizeCategoryLarge;
+  id application_ = nil;
+
+  DISALLOW_COPY_AND_ASSIGN(FontSizeTabHelperTest);
+};
+
+// Tests that a web page's font size is set properly in a procedure started
+// with default |UIApplication.sharedApplication.preferredContentSizeCategory|.
+TEST_F(FontSizeTabHelperTest, PageLoadedWithDefaultFontSize) {
+  std::string last_executed_js;
+
+  // Load web page.
+  web_state_.OnPageLoaded(web::PageLoadCompletionStatus::SUCCESS);
+  last_executed_js = base::UTF16ToUTF8(web_state_.GetLastExecutedJavascript());
+  EXPECT_EQ("", last_executed_js);
+
+  // Change PreferredContentSizeCategory and send
+  //   UIContentSizeCategoryDidChangeNotification.
+  preferred_content_size_category_ = UIContentSizeCategoryExtraLarge;
+  SendUIContentSizeCategoryDidChangeNotification();
+  last_executed_js = base::UTF16ToUTF8(web_state_.GetLastExecutedJavascript());
+  EXPECT_EQ("__gCrWeb.accessibility.adjustFontSize(110)", last_executed_js);
+  web_state_.ClearLastExecutedJavascript();
+
+  // Reload web page.
+  web_state_.OnPageLoaded(web::PageLoadCompletionStatus::SUCCESS);
+  last_executed_js = base::UTF16ToUTF8(web_state_.GetLastExecutedJavascript());
+  EXPECT_EQ("__gCrWeb.accessibility.adjustFontSize(110)", last_executed_js);
+}
+
+// Tests that a web page's font size is set properly in a procedure started
+// with special |UIApplication.sharedApplication.preferredContentSizeCategory|.
+TEST_F(FontSizeTabHelperTest, PageLoadedWithExtraLargeFontSize) {
+  std::string last_executed_js;
+  preferred_content_size_category_ = UIContentSizeCategoryExtraLarge;
+
+  // Load web page.
+  web_state_.OnPageLoaded(web::PageLoadCompletionStatus::SUCCESS);
+  last_executed_js = base::UTF16ToUTF8(web_state_.GetLastExecutedJavascript());
+  EXPECT_EQ("__gCrWeb.accessibility.adjustFontSize(110)", last_executed_js);
+  web_state_.ClearLastExecutedJavascript();
+
+  // Change PreferredContentSizeCategory and send
+  // UIContentSizeCategoryDidChangeNotification.
+  preferred_content_size_category_ = UIContentSizeCategoryExtraExtraLarge;
+  SendUIContentSizeCategoryDidChangeNotification();
+  last_executed_js = base::UTF16ToUTF8(web_state_.GetLastExecutedJavascript());
+  EXPECT_EQ("__gCrWeb.accessibility.adjustFontSize(120)", last_executed_js);
+  web_state_.ClearLastExecutedJavascript();
+
+  // Reload web page.
+  web_state_.OnPageLoaded(web::PageLoadCompletionStatus::SUCCESS);
+  last_executed_js = base::UTF16ToUTF8(web_state_.GetLastExecutedJavascript());
+  EXPECT_EQ("__gCrWeb.accessibility.adjustFontSize(120)", last_executed_js);
+}
diff --git a/ios/chrome/browser/web/resources/accessibility.js b/ios/chrome/browser/web/resources/accessibility.js
new file mode 100644
index 0000000..d03eab1
--- /dev/null
+++ b/ios/chrome/browser/web/resources/accessibility.js
@@ -0,0 +1,37 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Add functionality related to accessibility.
+ */
+goog.provide('__crWeb.accessibility');
+
+/**
+ * Namespace for this file. It depends on |__gCrWeb| having already been
+ * injected.
+ */
+__gCrWeb.accessibility = {};
+
+/**
+ * Store common namespace object in a global __gCrWeb object referenced by a
+ * string, so it does not get renamed by closure compiler during the
+ * minification.
+ */
+__gCrWeb['accessibility'] = __gCrWeb.accessibility;
+
+/**
+ * Adjust the font size of current web page by "size%"
+ *
+ * TODO(crbug.com/836962): Consider the original value of
+ *                         -webkit-text-size-adjust on the web page. Add it
+ *                         if it's a number or abort if it's 'none'.
+ *
+ * @param {number} size The ratio to apply to font scaling in %.
+ */
+__gCrWeb.accessibility.adjustFontSize = function(size) {
+  try {
+    document.body.style.webkitTextSizeAdjust = size + '%';
+  } catch (error) {
+  }
+};
diff --git a/ios/chrome/browser/web/resources/chrome_bundle_all_frames.js b/ios/chrome/browser/web/resources/chrome_bundle_all_frames.js
index 2f1b5fee..a16fe282 100644
--- a/ios/chrome/browser/web/resources/chrome_bundle_all_frames.js
+++ b/ios/chrome/browser/web/resources/chrome_bundle_all_frames.js
@@ -5,4 +5,5 @@
 // The set of scripts to be injected into the web view as early as possible.
 goog.provide('__crWeb.chromeBundleAllFrames');
 
+goog.require('__crWeb.accessibility');
 goog.require('__crWeb.form');
diff --git a/ios/chrome/test/app/tab_test_util.mm b/ios/chrome/test/app/tab_test_util.mm
index 7e8f628..7a510a2 100644
--- a/ios/chrome/test/app/tab_test_util.mm
+++ b/ios/chrome/test/app/tab_test_util.mm
@@ -8,7 +8,6 @@
 
 #import "base/mac/foundation_util.h"
 #import "ios/chrome/app/main_controller_private.h"
-#import "ios/chrome/browser/autofill/form_input_accessory_view_controller.h"
 #include "ios/chrome/browser/experimental_flags.h"
 #import "ios/chrome/browser/metrics/tab_usage_recorder.h"
 #import "ios/chrome/browser/tabs/tab.h"
diff --git a/ios/third_party/material_components_ios/README.chromium b/ios/third_party/material_components_ios/README.chromium
index 50bb217..ebe49e5 100644
--- a/ios/third_party/material_components_ios/README.chromium
+++ b/ios/third_party/material_components_ios/README.chromium
@@ -1,7 +1,7 @@
 Name: Material Components for iOS
 URL: https://github.com/material-components/material-components-ios
 Version: 0
-Revision: 8fad5e937124a6b81415cb4fbc12dbef746af8e1
+Revision: ed2b51677ffb0a07829de10af79d36390c474556
 License: Apache 2.0
 License File: LICENSE
 Security Critical: yes
diff --git a/ios/web/public/test/fakes/test_web_state.h b/ios/web/public/test/fakes/test_web_state.h
index 4e35b40..8269cd4 100644
--- a/ios/web/public/test/fakes/test_web_state.h
+++ b/ios/web/public/test/fakes/test_web_state.h
@@ -103,6 +103,7 @@
   void SetIsCrashed(bool value);
   void SetIsEvicted(bool value);
   void SetWebViewProxy(CRWWebViewProxyType web_view_proxy);
+  void ClearLastExecutedJavascript();
 
   // Getters for test data.
   CRWContentView* GetTransientContentView();
@@ -114,6 +115,7 @@
   // Uses |policy_deciders| to return whether the navigation corresponding to
   // |response| should be allowed. Defaults to true.
   bool ShouldAllowResponse(NSURLResponse* response, bool for_main_frame);
+  base::string16 GetLastExecutedJavascript() const;
 
   // Notifier for tests.
   void OnPageLoaded(PageLoadCompletionStatus load_completion_status);
@@ -139,6 +141,7 @@
   CRWContentView* transient_content_view_;
   GURL url_;
   base::string16 title_;
+  base::string16 last_executed_javascript_;
   URLVerificationTrustLevel trust_level_;
   bool content_is_html_;
   std::string mime_type_;
diff --git a/ios/web/public/test/fakes/test_web_state.mm b/ios/web/public/test/fakes/test_web_state.mm
index 563fc7cb..50c5595 100644
--- a/ios/web/public/test/fakes/test_web_state.mm
+++ b/ios/web/public/test/fakes/test_web_state.mm
@@ -149,10 +149,13 @@
   return injection_receiver_;
 }
 
-void TestWebState::ExecuteJavaScript(const base::string16& javascript) {}
+void TestWebState::ExecuteJavaScript(const base::string16& javascript) {
+  last_executed_javascript_ = javascript;
+}
 
 void TestWebState::ExecuteJavaScript(const base::string16& javascript,
                                      JavaScriptResultCallback callback) {
+  last_executed_javascript_ = javascript;
   std::move(callback).Run(nullptr);
 }
 
@@ -323,6 +326,10 @@
   return true;
 }
 
+base::string16 TestWebState::GetLastExecutedJavascript() const {
+  return last_executed_javascript_;
+}
+
 void TestWebState::SetCurrentURL(const GURL& url) {
   url_ = url;
 }
@@ -335,6 +342,10 @@
   trust_level_ = trust_level;
 }
 
+void TestWebState::ClearLastExecutedJavascript() {
+  last_executed_javascript_.clear();
+}
+
 CRWWebViewProxyType TestWebState::GetWebViewProxy() const {
   return web_view_proxy_;
 }
diff --git a/ios/web/web_state/navigation_and_load_callbacks_inttest.mm b/ios/web/web_state/navigation_and_load_callbacks_inttest.mm
index da94e9b..8daf8418 100644
--- a/ios/web/web_state/navigation_and_load_callbacks_inttest.mm
+++ b/ios/web/web_state/navigation_and_load_callbacks_inttest.mm
@@ -886,6 +886,9 @@
   EXPECT_CALL(*decider_,
               ShouldAllowRequest(_, RequestInfoMatch(expected_request_info)))
       .WillOnce(Return(true));
+  if (GetWebClient()->IsSlimNavigationManagerEnabled()) {
+    EXPECT_CALL(observer_, DidChangeBackForwardState(web_state()));
+  }
   EXPECT_CALL(observer_, DidStartLoading(web_state()));
   EXPECT_CALL(observer_, DidStartNavigation(web_state(), _))
       .WillOnce(VerifySameDocumentStartedContext(
@@ -934,6 +937,9 @@
 
   // Perform push state using JavaScript.
   const GURL push_url = test_server_->GetURL("/test.html");
+  if (GetWebClient()->IsSlimNavigationManagerEnabled()) {
+    EXPECT_CALL(observer_, DidChangeBackForwardState(web_state()));
+  }
   EXPECT_CALL(observer_, DidStartNavigation(web_state(), _))
       .WillOnce(VerifySameDocumentStartedContext(
           web_state(), push_url, /*has_user_gesture=*/false, &context, &nav_id,
diff --git a/ios/web/web_state/ui/crw_web_view_content_view.mm b/ios/web/web_state/ui/crw_web_view_content_view.mm
index b2a231e0d..43d9452 100644
--- a/ios/web/web_state/ui/crw_web_view_content_view.mm
+++ b/ios/web/web_state/ui/crw_web_view_content_view.mm
@@ -122,10 +122,11 @@
 }
 
 - (void)setContentInset:(UIEdgeInsets)contentInset {
-  CGFloat delta = std::fabs(_contentInset.top - contentInset.top) +
-                  std::fabs(_contentInset.left - contentInset.left) +
-                  std::fabs(_contentInset.bottom - contentInset.bottom) +
-                  std::fabs(_contentInset.right - contentInset.right);
+  UIEdgeInsets oldInsets = self.contentInset;
+  CGFloat delta = std::fabs(oldInsets.top - contentInset.top) +
+                  std::fabs(oldInsets.left - contentInset.left) +
+                  std::fabs(oldInsets.bottom - contentInset.bottom) +
+                  std::fabs(oldInsets.right - contentInset.right);
   if (delta <= std::numeric_limits<CGFloat>::epsilon())
     return;
   if (self.shouldUseViewContentInset) {
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
index 6199136..c34197e3a 100644
--- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
+++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
@@ -42,6 +42,7 @@
   ukm::UkmRecorder* GetUkmRecorder() override;
   ukm::SourceId GetUkmSourceId() override;
   AddressNormalizer* GetAddressNormalizer() override;
+  security_state::SecurityLevel GetSecurityLevelForUmaHistograms() override;
   void ShowAutofillSettings() override;
   void ShowUnmaskPrompt(const CreditCard& card,
                         UnmaskCardReason reason,
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
index 6756839..b5f282d 100644
--- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
+++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
@@ -66,6 +66,13 @@
   return nullptr;
 }
 
+security_state::SecurityLevel
+WebViewAutofillClientIOS::GetSecurityLevelForUmaHistograms() {
+  // The metrics are not recorded for iOS webview, so return the count value
+  // which will not be recorded.
+  return security_state::SecurityLevel::SECURITY_LEVEL_COUNT;
+}
+
 void WebViewAutofillClientIOS::ShowAutofillSettings() {
   NOTREACHED();
 }
diff --git a/media/filters/aom_video_decoder.cc b/media/filters/aom_video_decoder.cc
index 41250ae..fa5b8a53 100644
--- a/media/filters/aom_video_decoder.cc
+++ b/media/filters/aom_video_decoder.cc
@@ -118,61 +118,16 @@
     return;
   }
 
-  ColorSpace color_space = config.color_space();
-  gfx::ColorSpace::PrimaryID primaries = gfx::ColorSpace::PrimaryID::INVALID;
-  gfx::ColorSpace::TransferID transfer = gfx::ColorSpace::TransferID::INVALID;
-  gfx::ColorSpace::MatrixID matrix = gfx::ColorSpace::MatrixID::INVALID;
   gfx::ColorSpace::RangeID range = img->range == AOM_CR_FULL_RANGE
                                        ? gfx::ColorSpace::RangeID::FULL
                                        : gfx::ColorSpace::RangeID::LIMITED;
-  switch (img->cs) {
-    case AOM_CS_BT_601:
-    case AOM_CS_SMPTE_170:
-      primaries = gfx::ColorSpace::PrimaryID::SMPTE170M;
-      transfer = gfx::ColorSpace::TransferID::SMPTE170M;
-      matrix = gfx::ColorSpace::MatrixID::SMPTE170M;
-      color_space = COLOR_SPACE_SD_REC601;
-      break;
-    case AOM_CS_SMPTE_240:
-      primaries = gfx::ColorSpace::PrimaryID::SMPTE240M;
-      transfer = gfx::ColorSpace::TransferID::SMPTE240M;
-      matrix = gfx::ColorSpace::MatrixID::SMPTE240M;
-      break;
-    case AOM_CS_BT_709:
-      primaries = gfx::ColorSpace::PrimaryID::BT709;
-      transfer = gfx::ColorSpace::TransferID::BT709;
-      matrix = gfx::ColorSpace::MatrixID::BT709;
-      color_space = COLOR_SPACE_HD_REC709;
-      break;
-    case AOM_CS_BT_2020_NCL:
-    case AOM_CS_BT_2020_CL:
-      primaries = gfx::ColorSpace::PrimaryID::BT2020;
-      if (img->bit_depth >= 12) {
-        transfer = gfx::ColorSpace::TransferID::BT2020_12;
-      } else if (img->bit_depth >= 10) {
-        transfer = gfx::ColorSpace::TransferID::BT2020_10;
-      } else {
-        transfer = gfx::ColorSpace::TransferID::BT709;
-      }
-      matrix = img->cs == AOM_CS_BT_2020_NCL
-                   ? gfx::ColorSpace::MatrixID::BT2020_NCL
-                   : gfx::ColorSpace::MatrixID::BT2020_CL;
-      break;
-    case AOM_CS_SRGB:
-      primaries = gfx::ColorSpace::PrimaryID::BT709;
-      transfer = gfx::ColorSpace::TransferID::IEC61966_2_1;
-      matrix = gfx::ColorSpace::MatrixID::BT709;
-      break;
-    default:
-      NOTIMPLEMENTED() << "Unsupported color space encountered: " << img->cs;
-      break;
-  }
 
-  // TODO(ccameron): Set a color space even for unspecified values.
-  if (primaries != gfx::ColorSpace::PrimaryID::INVALID)
-    frame->set_color_space(gfx::ColorSpace(primaries, transfer, matrix, range));
-
-  frame->metadata()->SetInteger(VideoFrameMetadata::COLOR_SPACE, color_space);
+  // AOM color space defines match ISO 23001-8:2016 via ISO/IEC 23091-4/ITU-T
+  // H.273.
+  // http://av1-spec.argondesign.com/av1-spec/av1-spec.html#color-config-semantics
+  frame->set_color_space(
+      media::VideoColorSpace(img->cp, img->tc, img->mc, range)
+          .ToGfxColorSpace());
 }
 
 // Copies plane of 8-bit pixels out of a 16-bit values.
@@ -308,8 +263,8 @@
 
   if (aom_codec_decode(
           aom_decoder_.get(), buffer->data(), buffer->data_size(),
-          reinterpret_cast<void*>(buffer->timestamp().InMicroseconds()),
-          0 /* deadline */) != AOM_CODEC_OK) {
+          reinterpret_cast<void*>(buffer->timestamp().InMicroseconds())) !=
+      AOM_CODEC_OK) {
     const char* detail = aom_codec_error_detail(aom_decoder_.get());
     MEDIA_LOG(ERROR, media_log_)
         << "aom_codec_decode() failed: " << aom_codec_error(aom_decoder_.get())
diff --git a/media/filters/aom_video_decoder_unittest.cc b/media/filters/aom_video_decoder_unittest.cc
index 7ab2b07..f48a31f 100644
--- a/media/filters/aom_video_decoder_unittest.cc
+++ b/media/filters/aom_video_decoder_unittest.cc
@@ -33,7 +33,7 @@
  public:
   AomVideoDecoderTest()
       : decoder_(new AomVideoDecoder(&media_log_)),
-        i_frame_buffer_(ReadTestDataFile("av1-I-frame-352x288")) {}
+        i_frame_buffer_(ReadTestDataFile("av1-I-frame-320x240")) {}
 
   ~AomVideoDecoderTest() override { Destroy(); }
 
@@ -208,7 +208,7 @@
 // the output size was adjusted.
 // TODO(dalecurtis): Get an I-frame from a larger video.
 TEST_F(AomVideoDecoderTest, DISABLED_DecodeFrame_LargerWidth) {
-  DecodeIFrameThenTestFile("av1-I-frame-352x288", gfx::Size(1280, 720));
+  DecodeIFrameThenTestFile("av1-I-frame-320x240", gfx::Size(1280, 720));
 }
 
 // Decode a VP9 frame which should trigger a decoder error.
diff --git a/media/test/data/av1-I-frame-320x240 b/media/test/data/av1-I-frame-320x240
new file mode 100644
index 0000000..64c26ef
--- /dev/null
+++ b/media/test/data/av1-I-frame-320x240
Binary files differ
diff --git a/media/test/data/av1-I-frame-352x288 b/media/test/data/av1-I-frame-352x288
deleted file mode 100644
index 5f6901a..0000000
--- a/media/test/data/av1-I-frame-352x288
+++ /dev/null
Binary files differ
diff --git a/media/test/data/bear-av1.webm b/media/test/data/bear-av1.webm
index 7d9d204..2d05d10 100644
--- a/media/test/data/bear-av1.webm
+++ b/media/test/data/bear-av1.webm
Binary files differ
diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc
index 3f9119d..48fbc1e6 100644
--- a/media/test/pipeline_integration_test.cc
+++ b/media/test/pipeline_integration_test.cc
@@ -1209,7 +1209,7 @@
   base::test::ScopedFeatureList scoped_feature_list_;
   scoped_feature_list_.InitAndEnableFeature(kAv1Decoder);
 
-  MockMediaSource source("bear-av1.webm", kWebMAV1, 79943);
+  MockMediaSource source("bear-av1.webm", kWebMAV1, 55788);
   EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source));
   source.EndOfStream();
 
@@ -1591,7 +1591,8 @@
 #endif
 
 #if BUILDFLAG(ENABLE_AV1_DECODER)
-TEST_P(MSEPipelineIntegrationTest, BasicPlayback_AV1_MP4) {
+// TODO(johannkoenig): re-enable when an av1 mp4 muxer is available.
+TEST_P(MSEPipelineIntegrationTest, DISABLED_BasicPlayback_AV1_MP4) {
   base::test::ScopedFeatureList scoped_feature_list_;
   scoped_feature_list_.InitAndEnableFeature(kAv1Decoder);
   MockMediaSource source("bear-av1.mp4", kMP4AV1, 80496);
@@ -1647,7 +1648,8 @@
 }
 
 #if BUILDFLAG(ENABLE_AV1_DECODER)
-TEST_F(PipelineIntegrationTest, BasicPlayback_VideoOnly_AV1_Mp4) {
+// TODO(johannkoenig): re-enable when an av1 mp4 muxer is available.
+TEST_F(PipelineIntegrationTest, DISABLED_BasicPlayback_VideoOnly_AV1_Mp4) {
   base::test::ScopedFeatureList scoped_feature_list_;
   scoped_feature_list_.InitAndEnableFeature(kAv1Decoder);
   ASSERT_EQ(PIPELINE_OK, Start("bear-av1.mp4"));
diff --git a/mojo/edk/BUILD.gn b/mojo/edk/BUILD.gn
index 489b5d0..677b68a4 100644
--- a/mojo/edk/BUILD.gn
+++ b/mojo/edk/BUILD.gn
@@ -66,13 +66,11 @@
     public = [
       "embedder/configuration.h",
       "embedder/connection_params.h",
-      "embedder/entrypoints.h",
       "embedder/named_platform_channel_pair.h",
       "embedder/named_platform_handle.h",
       "embedder/named_platform_handle_utils.h",
       "embedder/platform_channel_pair.h",
       "embedder/platform_handle.h",
-      "embedder/platform_handle_utils.h",
       "embedder/process_error_callback.h",
       "embedder/scoped_platform_handle.h",
       "embedder/transport_protocol.h",
@@ -83,6 +81,7 @@
       "system/data_pipe_control_message.h",
       "system/data_pipe_producer_dispatcher.h",
       "system/dispatcher.h",
+      "system/entrypoints.h",
       "system/handle_signals_state.h",
       "system/handle_table.h",
       "system/invitation_dispatcher.h",
@@ -90,6 +89,7 @@
       "system/node_controller.h",
       "system/options_validation.h",
       "system/platform_handle_dispatcher.h",
+      "system/platform_handle_utils.h",
       "system/platform_shared_memory_mapping.h",
       "system/request_context.h",
       "system/scoped_process_handle.h",
@@ -105,13 +105,10 @@
 
     sources = [
       "embedder/connection_params.cc",
-      "embedder/entrypoints.cc",
       "embedder/named_platform_handle_utils_win.cc",
       "embedder/platform_channel_pair.cc",
       "embedder/platform_channel_pair_win.cc",
       "embedder/platform_handle.cc",
-      "embedder/platform_handle_utils.cc",
-      "embedder/platform_handle_utils_win.cc",
       "system/atomic_flag.h",
       "system/broker.h",
       "system/broker_win.cc",
@@ -123,6 +120,7 @@
       "system/data_pipe_control_message.cc",
       "system/data_pipe_producer_dispatcher.cc",
       "system/dispatcher.cc",
+      "system/entrypoints.cc",
       "system/handle_table.cc",
       "system/invitation_dispatcher.cc",
       "system/message_pipe_dispatcher.cc",
@@ -130,6 +128,7 @@
       "system/node_channel.h",
       "system/node_controller.cc",
       "system/platform_handle_dispatcher.cc",
+      "system/platform_handle_utils.cc",
       "system/platform_shared_memory_mapping.cc",
       "system/request_context.cc",
       "system/scoped_process_handle.cc",
@@ -154,7 +153,6 @@
       sources += [
         "embedder/named_platform_handle_utils_fuchsia.cc",
         "embedder/platform_channel_pair_fuchsia.cc",
-        "embedder/platform_handle_utils_fuchsia.cc",
         "system/channel_fuchsia.cc",
       ]
 
@@ -162,10 +160,7 @@
     }
 
     if (is_posix) {
-      sources += [
-        "embedder/platform_channel_pair_posix.cc",
-        "embedder/platform_handle_utils_posix.cc",
-      ]
+      sources += [ "embedder/platform_channel_pair_posix.cc" ]
 
       if (!is_nacl || is_nacl_nonsfi) {
         public += [ "embedder/platform_channel_utils_posix.h" ]
diff --git a/mojo/edk/embedder/embedder.cc b/mojo/edk/embedder/embedder.cc
index 35670308..e6473f82 100644
--- a/mojo/edk/embedder/embedder.cc
+++ b/mojo/edk/embedder/embedder.cc
@@ -11,9 +11,9 @@
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/task_runner.h"
-#include "mojo/edk/embedder/entrypoints.h"
 #include "mojo/edk/system/configuration.h"
 #include "mojo/edk/system/core.h"
+#include "mojo/edk/system/entrypoints.h"
 #include "mojo/edk/system/node_controller.h"
 #include "mojo/public/c/system/thunks.h"
 
diff --git a/mojo/edk/embedder/platform_handle_utils.cc b/mojo/edk/embedder/platform_handle_utils.cc
deleted file mode 100644
index e3c0cfd..0000000
--- a/mojo/edk/embedder/platform_handle_utils.cc
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/edk/embedder/platform_handle_utils.h"
-
-#include "build/build_config.h"
-
-namespace mojo {
-namespace edk {
-
-MojoResult MojoPlatformHandleToScopedInternalPlatformHandle(
-    const MojoPlatformHandle* platform_handle,
-    ScopedInternalPlatformHandle* out_handle) {
-  if (platform_handle->struct_size != sizeof(MojoPlatformHandle))
-    return MOJO_RESULT_INVALID_ARGUMENT;
-
-  if (platform_handle->type == MOJO_PLATFORM_HANDLE_TYPE_INVALID) {
-    out_handle->reset();
-    return MOJO_RESULT_OK;
-  }
-
-  InternalPlatformHandle handle;
-  switch (platform_handle->type) {
-#if defined(OS_FUCHSIA)
-    case MOJO_PLATFORM_HANDLE_TYPE_FUCHSIA_HANDLE:
-      handle = InternalPlatformHandle::ForHandle(platform_handle->value);
-      break;
-    case MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR:
-      handle = InternalPlatformHandle::ForFd(platform_handle->value);
-      break;
-
-#elif defined(OS_POSIX)
-    case MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR:
-      handle.handle = static_cast<int>(platform_handle->value);
-      break;
-#endif
-
-#if defined(OS_MACOSX) && !defined(OS_IOS)
-    case MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT:
-      handle.type = InternalPlatformHandle::Type::MACH;
-      handle.port = static_cast<mach_port_t>(platform_handle->value);
-      break;
-#endif
-
-#if defined(OS_WIN)
-    case MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE:
-      handle.handle = reinterpret_cast<HANDLE>(platform_handle->value);
-      break;
-#endif
-
-    default:
-      return MOJO_RESULT_INVALID_ARGUMENT;
-  }
-
-  out_handle->reset(handle);
-  return MOJO_RESULT_OK;
-}
-
-MojoResult ScopedInternalPlatformHandleToMojoPlatformHandle(
-    ScopedInternalPlatformHandle handle,
-    MojoPlatformHandle* platform_handle) {
-  if (platform_handle->struct_size != sizeof(MojoPlatformHandle))
-    return MOJO_RESULT_INVALID_ARGUMENT;
-
-  if (!handle.is_valid()) {
-    platform_handle->type = MOJO_PLATFORM_HANDLE_TYPE_INVALID;
-    return MOJO_RESULT_OK;
-  }
-
-#if defined(OS_FUCHSIA)
-  if (handle.get().is_valid_fd()) {
-    platform_handle->type = MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR;
-    platform_handle->value = handle.release().as_fd();
-  } else {
-    platform_handle->type = MOJO_PLATFORM_HANDLE_TYPE_FUCHSIA_HANDLE;
-    platform_handle->value = handle.release().as_handle();
-  }
-#elif defined(OS_POSIX)
-  switch (handle.get().type) {
-    case InternalPlatformHandle::Type::POSIX:
-      platform_handle->type = MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR;
-      platform_handle->value = static_cast<uint64_t>(handle.release().handle);
-      break;
-
-#if defined(OS_MACOSX) && !defined(OS_IOS)
-    case InternalPlatformHandle::Type::MACH:
-      platform_handle->type = MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT;
-      platform_handle->value = static_cast<uint64_t>(handle.release().port);
-      break;
-#endif  // defined(OS_MACOSX) && !defined(OS_IOS)
-
-    default:
-      return MOJO_RESULT_INVALID_ARGUMENT;
-  }
-#elif defined(OS_WIN)
-  platform_handle->type = MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE;
-  platform_handle->value = reinterpret_cast<uint64_t>(handle.release().handle);
-#endif  // defined(OS_WIN)
-
-  return MOJO_RESULT_OK;
-}
-
-void ExtractInternalPlatformHandlesFromSharedMemoryRegionHandle(
-    base::subtle::PlatformSharedMemoryRegion::ScopedPlatformHandle handle,
-    ScopedInternalPlatformHandle* extracted_handle,
-    ScopedInternalPlatformHandle* extracted_readonly_handle) {
-#if defined(OS_WIN)
-  extracted_handle->reset(InternalPlatformHandle(handle.Take()));
-#elif defined(OS_FUCHSIA)
-  extracted_handle->reset(InternalPlatformHandle::ForHandle(handle.release()));
-#elif defined(OS_MACOSX) && !defined(OS_IOS)
-  // This is a Mach port. Same code as below, but separated for clarity.
-  extracted_handle->reset(InternalPlatformHandle(handle.release()));
-#elif defined(OS_ANDROID)
-  // This is a file descriptor. Same code as above, but separated for clarity.
-  extracted_handle->reset(InternalPlatformHandle(handle.release()));
-#else
-  extracted_handle->reset(InternalPlatformHandle(handle.fd.release()));
-  extracted_readonly_handle->reset(
-      InternalPlatformHandle(handle.readonly_fd.release()));
-#endif
-}
-
-base::subtle::PlatformSharedMemoryRegion::ScopedPlatformHandle
-CreateSharedMemoryRegionHandleFromInternalPlatformHandles(
-    ScopedInternalPlatformHandle handle,
-    ScopedInternalPlatformHandle readonly_handle) {
-#if defined(OS_WIN)
-  DCHECK(!readonly_handle.is_valid());
-  return base::win::ScopedHandle(handle.release().handle);
-#elif defined(OS_FUCHSIA)
-  DCHECK(!readonly_handle.is_valid());
-  return base::ScopedZxHandle(handle.release().as_handle());
-#elif defined(OS_MACOSX) && !defined(OS_IOS)
-  DCHECK(!readonly_handle.is_valid());
-  return base::mac::ScopedMachSendRight(handle.release().port);
-#elif defined(OS_ANDROID)
-  DCHECK(!readonly_handle.is_valid());
-  return base::ScopedFD(handle.release().handle);
-#else
-  return base::subtle::ScopedFDPair(
-      base::ScopedFD(handle.release().handle),
-      base::ScopedFD(readonly_handle.release().handle));
-#endif
-}
-
-}  // namespace edk
-}  // namespace mojo
diff --git a/mojo/edk/embedder/platform_handle_utils.h b/mojo/edk/embedder/platform_handle_utils.h
deleted file mode 100644
index 2bdfb3f..0000000
--- a/mojo/edk/embedder/platform_handle_utils.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_EDK_EMBEDDER_PLATFORM_HANDLE_UTILS_H_
-#define MOJO_EDK_EMBEDDER_PLATFORM_HANDLE_UTILS_H_
-
-#include "base/memory/platform_shared_memory_region.h"
-#include "mojo/edk/embedder/platform_handle.h"
-#include "mojo/edk/embedder/scoped_platform_handle.h"
-#include "mojo/edk/system/system_impl_export.h"
-#include "mojo/public/c/system/platform_handle.h"
-#include "mojo/public/c/system/types.h"
-#include "mojo/public/cpp/platform/platform_handle.h"
-
-namespace mojo {
-namespace edk {
-
-// Closes all the |InternalPlatformHandle|s in the given container.
-template <typename InternalPlatformHandleContainer>
-MOJO_SYSTEM_IMPL_EXPORT inline void CloseAllInternalPlatformHandles(
-    InternalPlatformHandleContainer* platform_handles) {
-  for (typename InternalPlatformHandleContainer::iterator it =
-           platform_handles->begin();
-       it != platform_handles->end(); ++it)
-    it->CloseIfNecessary();
-}
-
-MOJO_SYSTEM_IMPL_EXPORT MojoResult
-MojoPlatformHandleToScopedInternalPlatformHandle(
-    const MojoPlatformHandle* platform_handle,
-    ScopedInternalPlatformHandle* out_handle);
-
-MOJO_SYSTEM_IMPL_EXPORT MojoResult
-ScopedInternalPlatformHandleToMojoPlatformHandle(
-    ScopedInternalPlatformHandle handle,
-    MojoPlatformHandle* platform_handle);
-
-// Duplicates the given |InternalPlatformHandle| (which must be valid). (Returns
-// an invalid |ScopedInternalPlatformHandle| on failure.)
-MOJO_SYSTEM_IMPL_EXPORT ScopedInternalPlatformHandle
-DuplicatePlatformHandle(InternalPlatformHandle platform_handle);
-
-// Converts a base shared memory platform handle into one (maybe two on POSIX)
-// EDK ScopedInternalPlatformHandles.
-MOJO_SYSTEM_IMPL_EXPORT void
-ExtractInternalPlatformHandlesFromSharedMemoryRegionHandle(
-    base::subtle::PlatformSharedMemoryRegion::ScopedPlatformHandle handle,
-    ScopedInternalPlatformHandle* extracted_handle,
-    ScopedInternalPlatformHandle* extracted_readonly_handle);
-
-// Converts one (maybe two on POSIX) EDK ScopedInternalPlatformHandles to a base
-// shared memory platform handle.
-MOJO_SYSTEM_IMPL_EXPORT
-base::subtle::PlatformSharedMemoryRegion::ScopedPlatformHandle
-CreateSharedMemoryRegionHandleFromInternalPlatformHandles(
-    ScopedInternalPlatformHandle handle,
-    ScopedInternalPlatformHandle readonly_handle);
-
-}  // namespace edk
-}  // namespace mojo
-
-#endif  // MOJO_EDK_EMBEDDER_PLATFORM_HANDLE_UTILS_H_
diff --git a/mojo/edk/embedder/platform_handle_utils_fuchsia.cc b/mojo/edk/embedder/platform_handle_utils_fuchsia.cc
deleted file mode 100644
index a904a08..0000000
--- a/mojo/edk/embedder/platform_handle_utils_fuchsia.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/edk/embedder/platform_handle_utils.h"
-
-#include "base/logging.h"
-
-namespace mojo {
-namespace edk {
-
-ScopedInternalPlatformHandle DuplicatePlatformHandle(
-    InternalPlatformHandle platform_handle) {
-  DCHECK(platform_handle.is_valid());
-  zx_handle_t duped;
-  // zx_handle_duplicate won't touch |duped| in case of failure.
-  zx_status_t result = zx_handle_duplicate(platform_handle.as_handle(),
-                                           ZX_RIGHT_SAME_RIGHTS, &duped);
-  DLOG_IF(ERROR, result != ZX_OK) << "zx_duplicate_handle failed: " << result;
-  return ScopedInternalPlatformHandle(InternalPlatformHandle::ForHandle(duped));
-}
-
-}  // namespace edk
-}  // namespace mojo
diff --git a/mojo/edk/embedder/platform_handle_utils_posix.cc b/mojo/edk/embedder/platform_handle_utils_posix.cc
deleted file mode 100644
index a29b79f..0000000
--- a/mojo/edk/embedder/platform_handle_utils_posix.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/edk/embedder/platform_handle_utils.h"
-
-#include <unistd.h>
-
-#include "base/logging.h"
-
-namespace mojo {
-namespace edk {
-
-ScopedInternalPlatformHandle DuplicatePlatformHandle(
-    InternalPlatformHandle platform_handle) {
-  DCHECK(platform_handle.is_valid());
-  // Note that |dup()| returns -1 on error (which is exactly the value we use
-  // for invalid |InternalPlatformHandle| FDs).
-  InternalPlatformHandle duped(dup(platform_handle.handle));
-  duped.needs_connection = platform_handle.needs_connection;
-  return ScopedInternalPlatformHandle(duped);
-}
-
-}  // namespace edk
-}  // namespace mojo
diff --git a/mojo/edk/embedder/platform_handle_utils_win.cc b/mojo/edk/embedder/platform_handle_utils_win.cc
deleted file mode 100644
index 4622e925..0000000
--- a/mojo/edk/embedder/platform_handle_utils_win.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/edk/embedder/platform_handle_utils.h"
-
-#include <windows.h>
-
-#include "base/logging.h"
-
-namespace mojo {
-namespace edk {
-
-ScopedInternalPlatformHandle DuplicatePlatformHandle(
-    InternalPlatformHandle platform_handle) {
-  DCHECK(platform_handle.is_valid());
-
-  HANDLE new_handle;
-  CHECK_NE(platform_handle.handle, INVALID_HANDLE_VALUE);
-  if (!DuplicateHandle(GetCurrentProcess(), platform_handle.handle,
-                       GetCurrentProcess(), &new_handle, 0, TRUE,
-                       DUPLICATE_SAME_ACCESS))
-    return ScopedInternalPlatformHandle();
-  DCHECK_NE(new_handle, INVALID_HANDLE_VALUE);
-  return ScopedInternalPlatformHandle(InternalPlatformHandle(new_handle));
-}
-
-}  // namespace edk
-}  // namespace mojo
diff --git a/mojo/edk/mojo_core.cc b/mojo/edk/mojo_core.cc
index b0c6527..658d526 100644
--- a/mojo/edk/mojo_core.cc
+++ b/mojo/edk/mojo_core.cc
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 #include "base/time/time.h"
-#include "mojo/edk/embedder/entrypoints.h"
 #include "mojo/edk/system/core.h"
+#include "mojo/edk/system/entrypoints.h"
 #include "mojo/public/c/system/core.h"
 #include "mojo/public/c/system/thunks.h"
 
diff --git a/mojo/edk/system/broker_host.cc b/mojo/edk/system/broker_host.cc
index 8966e23..dcdf672 100644
--- a/mojo/edk/system/broker_host.cc
+++ b/mojo/edk/system/broker_host.cc
@@ -13,9 +13,9 @@
 #include "build/build_config.h"
 #include "mojo/edk/embedder/named_platform_channel_pair.h"
 #include "mojo/edk/embedder/named_platform_handle.h"
-#include "mojo/edk/embedder/platform_handle_utils.h"
 #include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/broker_messages.h"
+#include "mojo/edk/system/platform_handle_utils.h"
 
 namespace mojo {
 namespace edk {
@@ -110,8 +110,11 @@
 
   std::vector<ScopedInternalPlatformHandle> handles(2);
   if (region.IsValid()) {
-    ExtractInternalPlatformHandlesFromSharedMemoryRegionHandle(
-        region.PassPlatformHandle(), &handles[0], &handles[1]);
+    PlatformHandle h[2];
+    ExtractPlatformHandlesFromSharedMemoryRegionHandle(
+        region.PassPlatformHandle(), &h[0], &h[1]);
+    handles[0] = PlatformHandleToScopedInternalPlatformHandle(std::move(h[0]));
+    handles[1] = PlatformHandleToScopedInternalPlatformHandle(std::move(h[1]));
 #if !defined(OS_POSIX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
     (defined(OS_MACOSX) && !defined(OS_IOS))
     // Non-POSIX systems, as well as Android, Fuchsia, and non-iOS Mac, only use
diff --git a/mojo/edk/system/broker_posix.cc b/mojo/edk/system/broker_posix.cc
index 4b5c15c..71270f5e 100644
--- a/mojo/edk/system/broker_posix.cc
+++ b/mojo/edk/system/broker_posix.cc
@@ -13,10 +13,10 @@
 #include "base/memory/platform_shared_memory_region.h"
 #include "build/build_config.h"
 #include "mojo/edk/embedder/platform_channel_utils_posix.h"
-#include "mojo/edk/embedder/platform_handle_utils.h"
 #include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/broker_messages.h"
 #include "mojo/edk/system/channel.h"
+#include "mojo/edk/system/platform_handle_utils.h"
 
 namespace mojo {
 namespace edk {
@@ -127,13 +127,18 @@
     if (!GetBrokerMessageData(message.get(), &data))
       return base::WritableSharedMemoryRegion();
 
-    if (incoming_platform_handles.size() == 1)
-      incoming_platform_handles.emplace_back();
+    PlatformHandle handles[2];
+    handles[0] = ScopedInternalPlatformHandleToPlatformHandle(
+        std::move(incoming_platform_handles[0]));
+    if (incoming_platform_handles.size() > 1) {
+      handles[1] = ScopedInternalPlatformHandleToPlatformHandle(
+          std::move(incoming_platform_handles[1]));
+    }
+
     return base::WritableSharedMemoryRegion::Deserialize(
         base::subtle::PlatformSharedMemoryRegion::Take(
-            CreateSharedMemoryRegionHandleFromInternalPlatformHandles(
-                std::move(incoming_platform_handles[0]),
-                std::move(incoming_platform_handles[1])),
+            CreateSharedMemoryRegionHandleFromPlatformHandles(
+                std::move(handles[0]), std::move(handles[1])),
             base::subtle::PlatformSharedMemoryRegion::Mode::kWritable,
             num_bytes,
             base::UnguessableToken::Deserialize(data->guid_high,
diff --git a/mojo/edk/system/broker_win.cc b/mojo/edk/system/broker_win.cc
index a2dea366..9070f6e 100644
--- a/mojo/edk/system/broker_win.cc
+++ b/mojo/edk/system/broker_win.cc
@@ -14,11 +14,11 @@
 #include "mojo/edk/embedder/named_platform_handle.h"
 #include "mojo/edk/embedder/named_platform_handle_utils.h"
 #include "mojo/edk/embedder/platform_handle.h"
-#include "mojo/edk/embedder/platform_handle_utils.h"
 #include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/broker.h"
 #include "mojo/edk/system/broker_messages.h"
 #include "mojo/edk/system/channel.h"
+#include "mojo/edk/system/platform_handle_utils.h"
 
 namespace mojo {
 namespace edk {
@@ -147,8 +147,9 @@
       return base::WritableSharedMemoryRegion();
     return base::WritableSharedMemoryRegion::Deserialize(
         base::subtle::PlatformSharedMemoryRegion::Take(
-            CreateSharedMemoryRegionHandleFromInternalPlatformHandles(
-                std::move(handle), ScopedInternalPlatformHandle()),
+            CreateSharedMemoryRegionHandleFromPlatformHandles(
+                ScopedInternalPlatformHandleToPlatformHandle(std::move(handle)),
+                PlatformHandle()),
             base::subtle::PlatformSharedMemoryRegion::Mode::kWritable,
             num_bytes,
             base::UnguessableToken::Deserialize(data->guid_high,
diff --git a/mojo/edk/system/core.cc b/mojo/edk/system/core.cc
index 26cefb3..f9aa2c82 100644
--- a/mojo/edk/system/core.cc
+++ b/mojo/edk/system/core.cc
@@ -23,7 +23,6 @@
 #include "base/time/time.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "build/build_config.h"
-#include "mojo/edk/embedder/platform_handle_utils.h"
 #include "mojo/edk/embedder/process_error_callback.h"
 #include "mojo/edk/system/channel.h"
 #include "mojo/edk/system/configuration.h"
@@ -33,6 +32,7 @@
 #include "mojo/edk/system/invitation_dispatcher.h"
 #include "mojo/edk/system/message_pipe_dispatcher.h"
 #include "mojo/edk/system/platform_handle_dispatcher.h"
+#include "mojo/edk/system/platform_handle_utils.h"
 #include "mojo/edk/system/platform_shared_memory_mapping.h"
 #include "mojo/edk/system/ports/event.h"
 #include "mojo/edk/system/ports/name.h"
@@ -982,16 +982,16 @@
   return dispatcher->GetBufferInfo(info);
 }
 
-MojoResult Core::WrapInternalPlatformHandle(
+MojoResult Core::WrapPlatformHandle(
     const MojoPlatformHandle* platform_handle,
     const MojoWrapPlatformHandleOptions* options,
     MojoHandle* mojo_handle) {
-  ScopedInternalPlatformHandle handle;
-  MojoResult result = MojoPlatformHandleToScopedInternalPlatformHandle(
-      platform_handle, &handle);
-  if (result != MOJO_RESULT_OK)
-    return result;
+  if (!platform_handle ||
+      platform_handle->struct_size < sizeof(*platform_handle)) {
+    return MOJO_RESULT_INVALID_ARGUMENT;
+  }
 
+  auto handle = PlatformHandle::FromMojoPlatformHandle(platform_handle);
   MojoHandle h =
       AddDispatcher(PlatformHandleDispatcher::Create(std::move(handle)));
   if (h == MOJO_HANDLE_INVALID)
@@ -1001,10 +1001,15 @@
   return MOJO_RESULT_OK;
 }
 
-MojoResult Core::UnwrapInternalPlatformHandle(
+MojoResult Core::UnwrapPlatformHandle(
     MojoHandle mojo_handle,
     const MojoUnwrapPlatformHandleOptions* options,
     MojoPlatformHandle* platform_handle) {
+  if (!platform_handle ||
+      platform_handle->struct_size < sizeof(*platform_handle)) {
+    return MOJO_RESULT_INVALID_ARGUMENT;
+  }
+
   scoped_refptr<Dispatcher> dispatcher;
   {
     base::AutoLock lock(handles_->GetLock());
@@ -1020,11 +1025,11 @@
 
   PlatformHandleDispatcher* phd =
       static_cast<PlatformHandleDispatcher*>(dispatcher.get());
-  ScopedInternalPlatformHandle handle = phd->PassInternalPlatformHandle();
+  PlatformHandle handle = phd->TakePlatformHandle();
   phd->Close();
 
-  return ScopedInternalPlatformHandleToMojoPlatformHandle(std::move(handle),
-                                                          platform_handle);
+  PlatformHandle::ToMojoPlatformHandle(std::move(handle), platform_handle);
+  return MOJO_RESULT_OK;
 }
 
 MojoResult Core::WrapPlatformSharedMemoryRegion(
@@ -1048,12 +1053,11 @@
     return MOJO_RESULT_INVALID_ARGUMENT;
 #endif
 
-  ScopedInternalPlatformHandle handles[2];
+  PlatformHandle handles[2];
   bool handles_ok = true;
   for (size_t i = 0; i < num_platform_handles; ++i) {
-    MojoResult result = MojoPlatformHandleToScopedInternalPlatformHandle(
-        &platform_handles[i], &handles[i]);
-    if (result != MOJO_RESULT_OK)
+    handles[i] = PlatformHandle::FromMojoPlatformHandle(&platform_handles[i]);
+    if (!handles[i].is_valid())
       handles_ok = false;
   }
   if (!handles_ok)
@@ -1079,7 +1083,7 @@
 
   base::subtle::PlatformSharedMemoryRegion region =
       base::subtle::PlatformSharedMemoryRegion::Take(
-          CreateSharedMemoryRegionHandleFromInternalPlatformHandles(
+          CreateSharedMemoryRegionHandleFromPlatformHandles(
               std::move(handles[0]), std::move(handles[1])),
           mode, size, token);
   if (!region.IsValid())
@@ -1151,9 +1155,9 @@
       return MOJO_RESULT_INVALID_ARGUMENT;
   }
 
-  ScopedInternalPlatformHandle handle;
-  ScopedInternalPlatformHandle read_only_handle;
-  ExtractInternalPlatformHandlesFromSharedMemoryRegionHandle(
+  PlatformHandle handle;
+  PlatformHandle read_only_handle;
+  ExtractPlatformHandlesFromSharedMemoryRegionHandle(
       region.PassPlatformHandle(), &handle, &read_only_handle);
 
   const uint32_t available_handle_storage_slots = *num_platform_handles;
@@ -1166,19 +1170,17 @@
       base::subtle::PlatformSharedMemoryRegion::Mode::kWritable) {
     if (available_handle_storage_slots < 2)
       return MOJO_RESULT_INVALID_ARGUMENT;
-    if (ScopedInternalPlatformHandleToMojoPlatformHandle(
-            std::move(read_only_handle), &platform_handles[1]) !=
-        MOJO_RESULT_OK) {
+    PlatformHandle::ToMojoPlatformHandle(std::move(read_only_handle),
+                                         &platform_handles[1]);
+    if (platform_handles[1].type == MOJO_PLATFORM_HANDLE_TYPE_INVALID)
       return MOJO_RESULT_INVALID_ARGUMENT;
-    }
     *num_platform_handles = 2;
   }
 #endif
 
-  if (ScopedInternalPlatformHandleToMojoPlatformHandle(
-          std::move(handle), &platform_handles[0]) != MOJO_RESULT_OK) {
+  PlatformHandle::ToMojoPlatformHandle(std::move(handle), &platform_handles[0]);
+  if (platform_handles[0].type == MOJO_PLATFORM_HANDLE_TYPE_INVALID)
     return MOJO_RESULT_INVALID_ARGUMENT;
-  }
 
   return MOJO_RESULT_OK;
 }
@@ -1327,12 +1329,14 @@
   auto* invitation_dispatcher =
       static_cast<InvitationDispatcher*>(dispatcher.get());
 
-  ScopedInternalPlatformHandle endpoint_handle;
-  MojoResult result = MojoPlatformHandleToScopedInternalPlatformHandle(
-      &transport_endpoint->platform_handles[0], &endpoint_handle);
-  if (result != MOJO_RESULT_OK || !endpoint_handle.is_valid())
+  auto endpoint = PlatformHandle::FromMojoPlatformHandle(
+      &transport_endpoint->platform_handles[0]);
+  if (!endpoint.is_valid())
     return MOJO_RESULT_INVALID_ARGUMENT;
 
+  auto endpoint_handle =
+      PlatformHandleToScopedInternalPlatformHandle(std::move(endpoint));
+
 #if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_FUCHSIA))
   if (transport_endpoint->type == MOJO_INVITATION_TRANSPORT_TYPE_CHANNEL_SERVER)
     endpoint_handle.get().needs_connection = true;
@@ -1412,15 +1416,17 @@
   if (*invitation_handle == MOJO_HANDLE_INVALID)
     return MOJO_RESULT_RESOURCE_EXHAUSTED;
 
-  ScopedInternalPlatformHandle endpoint_handle;
-  MojoResult result = MojoPlatformHandleToScopedInternalPlatformHandle(
-      &transport_endpoint->platform_handles[0], &endpoint_handle);
-  if (result != MOJO_RESULT_OK) {
+  auto endpoint = PlatformHandle::FromMojoPlatformHandle(
+      &transport_endpoint->platform_handles[0]);
+  if (!endpoint.is_valid()) {
     Close(*invitation_handle);
     *invitation_handle = MOJO_HANDLE_INVALID;
     return MOJO_RESULT_INVALID_ARGUMENT;
   }
 
+  auto endpoint_handle =
+      PlatformHandleToScopedInternalPlatformHandle(std::move(endpoint));
+
 #if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_FUCHSIA))
   if (transport_endpoint->type == MOJO_INVITATION_TRANSPORT_TYPE_CHANNEL_SERVER)
     endpoint_handle.get().needs_connection = true;
diff --git a/mojo/edk/system/core.h b/mojo/edk/system/core.h
index 7c015ac2..dac66cc 100644
--- a/mojo/edk/system/core.h
+++ b/mojo/edk/system/core.h
@@ -276,11 +276,10 @@
 
   // These methods correspond to the API functions defined in
   // "mojo/public/c/system/platform_handle.h".
-  MojoResult WrapInternalPlatformHandle(
-      const MojoPlatformHandle* platform_handle,
-      const MojoWrapPlatformHandleOptions* options,
-      MojoHandle* mojo_handle);
-  MojoResult UnwrapInternalPlatformHandle(
+  MojoResult WrapPlatformHandle(const MojoPlatformHandle* platform_handle,
+                                const MojoWrapPlatformHandleOptions* options,
+                                MojoHandle* mojo_handle);
+  MojoResult UnwrapPlatformHandle(
       MojoHandle mojo_handle,
       const MojoUnwrapPlatformHandleOptions* options,
       MojoPlatformHandle* platform_handle);
diff --git a/mojo/edk/system/data_pipe_consumer_dispatcher.cc b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
index 78d6d12..957cf6a 100644
--- a/mojo/edk/system/data_pipe_consumer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
@@ -14,10 +14,10 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
-#include "mojo/edk/embedder/platform_handle_utils.h"
 #include "mojo/edk/system/core.h"
 #include "mojo/edk/system/data_pipe_control_message.h"
 #include "mojo/edk/system/node_controller.h"
+#include "mojo/edk/system/platform_handle_utils.h"
 #include "mojo/edk/system/request_context.h"
 #include "mojo/edk/system/user_message_impl.h"
 #include "mojo/public/c/system/data_pipe.h"
@@ -320,13 +320,16 @@
 
   ports[0] = control_port_.name();
 
-  ScopedInternalPlatformHandle ignored_handle;
-  ExtractInternalPlatformHandlesFromSharedMemoryRegionHandle(
-      region_handle.PassPlatformHandle(), &platform_handles[0],
-      &ignored_handle);
-  if (!platform_handles[0].is_valid() || ignored_handle.is_valid())
+  PlatformHandle handle;
+  PlatformHandle ignored_handle;
+  ExtractPlatformHandlesFromSharedMemoryRegionHandle(
+      region_handle.PassPlatformHandle(), &handle, &ignored_handle);
+  if (!handle.is_valid() || ignored_handle.is_valid())
     return false;
 
+  platform_handles[0] =
+      PlatformHandleToScopedInternalPlatformHandle(std::move(handle));
+
   return true;
 }
 
@@ -379,11 +382,10 @@
   if (node_controller->node()->GetPort(ports[0], &port) != ports::OK)
     return nullptr;
 
-  ScopedInternalPlatformHandle buffer_handle;
-  std::swap(buffer_handle, handles[0]);
-  auto region_handle =
-      CreateSharedMemoryRegionHandleFromInternalPlatformHandles(
-          std::move(buffer_handle), ScopedInternalPlatformHandle());
+  auto buffer_handle =
+      ScopedInternalPlatformHandleToPlatformHandle(std::move(handles[0]));
+  auto region_handle = CreateSharedMemoryRegionHandleFromPlatformHandles(
+      std::move(buffer_handle), PlatformHandle());
   auto region = base::subtle::PlatformSharedMemoryRegion::Take(
       std::move(region_handle),
       base::subtle::PlatformSharedMemoryRegion::Mode::kUnsafe,
diff --git a/mojo/edk/system/data_pipe_producer_dispatcher.cc b/mojo/edk/system/data_pipe_producer_dispatcher.cc
index caa76d9..2408dbb0 100644
--- a/mojo/edk/system/data_pipe_producer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_producer_dispatcher.cc
@@ -12,11 +12,11 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
-#include "mojo/edk/embedder/platform_handle_utils.h"
 #include "mojo/edk/system/configuration.h"
 #include "mojo/edk/system/core.h"
 #include "mojo/edk/system/data_pipe_control_message.h"
 #include "mojo/edk/system/node_controller.h"
+#include "mojo/edk/system/platform_handle_utils.h"
 #include "mojo/edk/system/request_context.h"
 #include "mojo/edk/system/user_message_impl.h"
 #include "mojo/public/c/system/data_pipe.h"
@@ -279,13 +279,15 @@
 
   ports[0] = control_port_.name();
 
-  ScopedInternalPlatformHandle ignored_handle;
-  ExtractInternalPlatformHandlesFromSharedMemoryRegionHandle(
-      region_handle.PassPlatformHandle(), &platform_handles[0],
-      &ignored_handle);
-  if (!platform_handles[0].is_valid() || ignored_handle.is_valid())
+  PlatformHandle handle;
+  PlatformHandle ignored_handle;
+  ExtractPlatformHandlesFromSharedMemoryRegionHandle(
+      region_handle.PassPlatformHandle(), &handle, &ignored_handle);
+  if (!handle.is_valid() || ignored_handle.is_valid())
     return false;
 
+  platform_handles[0] =
+      PlatformHandleToScopedInternalPlatformHandle(std::move(handle));
   return true;
 }
 
@@ -340,11 +342,10 @@
   if (node_controller->node()->GetPort(ports[0], &port) != ports::OK)
     return nullptr;
 
-  ScopedInternalPlatformHandle buffer_handle;
-  std::swap(buffer_handle, handles[0]);
-  auto region_handle =
-      CreateSharedMemoryRegionHandleFromInternalPlatformHandles(
-          std::move(buffer_handle), ScopedInternalPlatformHandle());
+  auto buffer_handle =
+      ScopedInternalPlatformHandleToPlatformHandle(std::move(handles[0]));
+  auto region_handle = CreateSharedMemoryRegionHandleFromPlatformHandles(
+      std::move(buffer_handle), PlatformHandle());
   auto region = base::subtle::PlatformSharedMemoryRegion::Take(
       std::move(region_handle),
       base::subtle::PlatformSharedMemoryRegion::Mode::kUnsafe,
diff --git a/mojo/edk/embedder/entrypoints.cc b/mojo/edk/system/entrypoints.cc
similarity index 97%
rename from mojo/edk/embedder/entrypoints.cc
rename to mojo/edk/system/entrypoints.cc
index c57a023..41aa67ae 100644
--- a/mojo/edk/embedder/entrypoints.cc
+++ b/mojo/edk/system/entrypoints.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "mojo/edk/embedder/entrypoints.h"
+#include "mojo/edk/system/entrypoints.h"
 
 #include <stdint.h>
 
@@ -249,16 +249,14 @@
     const MojoPlatformHandle* platform_handle,
     const MojoWrapPlatformHandleOptions* options,
     MojoHandle* mojo_handle) {
-  return g_core->WrapInternalPlatformHandle(platform_handle, options,
-                                            mojo_handle);
+  return g_core->WrapPlatformHandle(platform_handle, options, mojo_handle);
 }
 
 MojoResult MojoUnwrapPlatformHandleImpl(
     MojoHandle mojo_handle,
     const MojoUnwrapPlatformHandleOptions* options,
     MojoPlatformHandle* platform_handle) {
-  return g_core->UnwrapInternalPlatformHandle(mojo_handle, options,
-                                              platform_handle);
+  return g_core->UnwrapPlatformHandle(mojo_handle, options, platform_handle);
 }
 
 MojoResult MojoWrapPlatformSharedMemoryRegionImpl(
diff --git a/mojo/edk/embedder/entrypoints.h b/mojo/edk/system/entrypoints.h
similarity index 83%
rename from mojo/edk/embedder/entrypoints.h
rename to mojo/edk/system/entrypoints.h
index 63299a6..016a024 100644
--- a/mojo/edk/embedder/entrypoints.h
+++ b/mojo/edk/system/entrypoints.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MOJO_EDK_EMBEDDER_ENTRYPOINTS_H_
-#define MOJO_EDK_EMBEDDER_ENTRYPOINTS_H_
+#ifndef MOJO_EDK_SYSTEM_ENTRYPOINTS_H_
+#define MOJO_EDK_SYSTEM_ENTRYPOINTS_H_
 
 #include "mojo/edk/system/system_impl_export.h"
 #include "mojo/public/c/system/thunks.h"
@@ -22,4 +22,4 @@
 }  // namespace edk
 }  // namespace mojo
 
-#endif  // MOJO_EDK_EMBEDDER_ENTRYPOINTS_H_
+#endif  // MOJO_EDK_SYSTEM_ENTRYPOINTS_H_
diff --git a/mojo/edk/system/invitation_unittest.cc b/mojo/edk/system/invitation_unittest.cc
index cc0af571..53bfe6e 100644
--- a/mojo/edk/system/invitation_unittest.cc
+++ b/mojo/edk/system/invitation_unittest.cc
@@ -144,7 +144,7 @@
   PlatformChannel channel;
   MojoPlatformHandle endpoint_handle;
   endpoint_handle.struct_size = sizeof(endpoint_handle);
-  PlatformHandleToMojoPlatformHandle(
+  PlatformHandle::ToMojoPlatformHandle(
       channel.TakeLocalEndpoint().TakePlatformHandle(), &endpoint_handle);
   ASSERT_NE(endpoint_handle.type, MOJO_PLATFORM_HANDLE_TYPE_INVALID);
 
@@ -348,7 +348,7 @@
     uintptr_t error_handler_context,
     base::StringPiece isolated_invitation_name) {
   MojoPlatformHandle handle;
-  PlatformHandleToMojoPlatformHandle(std::move(endpoint_handle), &handle);
+  PlatformHandle::ToMojoPlatformHandle(std::move(endpoint_handle), &handle);
   CHECK_NE(handle.type, MOJO_PLATFORM_HANDLE_TYPE_INVALID);
 
   MojoHandle invitation;
@@ -407,8 +407,8 @@
       }
     }
     MojoPlatformHandle endpoint_handle;
-    PlatformHandleToMojoPlatformHandle(channel_endpoint.TakePlatformHandle(),
-                                       &endpoint_handle);
+    PlatformHandle::ToMojoPlatformHandle(channel_endpoint.TakePlatformHandle(),
+                                         &endpoint_handle);
     CHECK_NE(endpoint_handle.type, MOJO_PLATFORM_HANDLE_TYPE_INVALID);
 
     MojoInvitationTransportEndpoint transport_endpoint;
diff --git a/mojo/edk/system/platform_handle_dispatcher.cc b/mojo/edk/system/platform_handle_dispatcher.cc
index 19b1ed3..16b12a7 100644
--- a/mojo/edk/system/platform_handle_dispatcher.cc
+++ b/mojo/edk/system/platform_handle_dispatcher.cc
@@ -5,19 +5,18 @@
 #include "mojo/edk/system/platform_handle_dispatcher.h"
 
 #include "base/synchronization/lock.h"
-#include "mojo/edk/embedder/scoped_platform_handle.h"
+#include "mojo/edk/system/platform_handle_utils.h"
 
 namespace mojo {
 namespace edk {
 
 // static
 scoped_refptr<PlatformHandleDispatcher> PlatformHandleDispatcher::Create(
-    ScopedInternalPlatformHandle platform_handle) {
+    PlatformHandle platform_handle) {
   return new PlatformHandleDispatcher(std::move(platform_handle));
 }
 
-ScopedInternalPlatformHandle
-PlatformHandleDispatcher::PassInternalPlatformHandle() {
+PlatformHandle PlatformHandleDispatcher::TakePlatformHandle() {
   return std::move(platform_handle_);
 }
 
@@ -49,7 +48,8 @@
   base::AutoLock lock(lock_);
   if (is_closed_)
     return false;
-  handles[0] = ScopedInternalPlatformHandle(platform_handle_.get());
+  handles[0] =
+      PlatformHandleToScopedInternalPlatformHandle(std::move(platform_handle_));
   return true;
 }
 
@@ -63,12 +63,8 @@
 
 void PlatformHandleDispatcher::CompleteTransitAndClose() {
   base::AutoLock lock(lock_);
-
   in_transit_ = false;
   is_closed_ = true;
-
-  // The system has taken ownership of our handle.
-  ignore_result(platform_handle_.release());
 }
 
 void PlatformHandleDispatcher::CancelTransit() {
@@ -87,11 +83,12 @@
   if (num_bytes || num_ports || num_handles != 1)
     return nullptr;
 
-  return PlatformHandleDispatcher::Create(std::move(handles[0]));
+  return PlatformHandleDispatcher::Create(
+      ScopedInternalPlatformHandleToPlatformHandle(std::move(handles[0])));
 }
 
 PlatformHandleDispatcher::PlatformHandleDispatcher(
-    ScopedInternalPlatformHandle platform_handle)
+    PlatformHandle platform_handle)
     : platform_handle_(std::move(platform_handle)) {}
 
 PlatformHandleDispatcher::~PlatformHandleDispatcher() {
diff --git a/mojo/edk/system/platform_handle_dispatcher.h b/mojo/edk/system/platform_handle_dispatcher.h
index 8a377e47f..d5b3b32 100644
--- a/mojo/edk/system/platform_handle_dispatcher.h
+++ b/mojo/edk/system/platform_handle_dispatcher.h
@@ -8,9 +8,9 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/lock.h"
-#include "mojo/edk/embedder/scoped_platform_handle.h"
 #include "mojo/edk/system/dispatcher.h"
 #include "mojo/edk/system/system_impl_export.h"
+#include "mojo/public/cpp/platform/platform_handle.h"
 
 namespace mojo {
 namespace edk {
@@ -18,9 +18,9 @@
 class MOJO_SYSTEM_IMPL_EXPORT PlatformHandleDispatcher : public Dispatcher {
  public:
   static scoped_refptr<PlatformHandleDispatcher> Create(
-      ScopedInternalPlatformHandle platform_handle);
+      PlatformHandle platform_handle);
 
-  ScopedInternalPlatformHandle PassInternalPlatformHandle();
+  PlatformHandle TakePlatformHandle();
 
   // Dispatcher:
   Type GetType() const override;
@@ -44,13 +44,13 @@
       size_t num_handles);
 
  private:
-  PlatformHandleDispatcher(ScopedInternalPlatformHandle platform_handle);
+  PlatformHandleDispatcher(PlatformHandle platform_handle);
   ~PlatformHandleDispatcher() override;
 
   base::Lock lock_;
   bool in_transit_ = false;
   bool is_closed_ = false;
-  ScopedInternalPlatformHandle platform_handle_;
+  PlatformHandle platform_handle_;
 
   DISALLOW_COPY_AND_ASSIGN(PlatformHandleDispatcher);
 };
diff --git a/mojo/edk/system/platform_handle_dispatcher_unittest.cc b/mojo/edk/system/platform_handle_dispatcher_unittest.cc
index 040a3e9..398bd3858 100644
--- a/mojo/edk/system/platform_handle_dispatcher_unittest.cc
+++ b/mojo/edk/system/platform_handle_dispatcher_unittest.cc
@@ -12,8 +12,8 @@
 #include "base/files/scoped_file.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/ref_counted.h"
-#include "mojo/edk/embedder/platform_handle_utils.h"
 #include "mojo/edk/embedder/scoped_platform_handle.h"
+#include "mojo/edk/system/platform_handle_utils.h"
 #include "mojo/edk/test/test_utils.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -22,29 +22,6 @@
 namespace edk {
 namespace {
 
-ScopedInternalPlatformHandle PlatformHandleToScopedInternalPlatformHandle(
-    PlatformHandle platform_handle) {
-  MojoPlatformHandle handle;
-  PlatformHandleToMojoPlatformHandle(std::move(platform_handle), &handle);
-  ScopedInternalPlatformHandle internal_handle;
-  MojoResult result = MojoPlatformHandleToScopedInternalPlatformHandle(
-      &handle, &internal_handle);
-  if (result != MOJO_RESULT_OK)
-    return ScopedInternalPlatformHandle();
-  return internal_handle;
-}
-
-PlatformHandle ScopedInternalPlatformHandleToPlatformHandle(
-    ScopedInternalPlatformHandle internal_handle) {
-  MojoPlatformHandle handle;
-  handle.struct_size = sizeof(handle);
-  MojoResult result = ScopedInternalPlatformHandleToMojoPlatformHandle(
-      std::move(internal_handle), &handle);
-  if (result != MOJO_RESULT_OK)
-    return PlatformHandle();
-  return MojoPlatformHandleToPlatformHandle(&handle);
-}
-
 TEST(PlatformHandleDispatcherTest, Basic) {
   base::ScopedTempDir temp_dir;
   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
@@ -63,13 +40,11 @@
   ASSERT_TRUE(h.is_valid());
 
   scoped_refptr<PlatformHandleDispatcher> dispatcher =
-      PlatformHandleDispatcher::Create(
-          PlatformHandleToScopedInternalPlatformHandle(std::move(h)));
+      PlatformHandleDispatcher::Create(std::move(h));
   EXPECT_FALSE(h.is_valid());
   EXPECT_EQ(Dispatcher::Type::PLATFORM_HANDLE, dispatcher->GetType());
 
-  h = ScopedInternalPlatformHandleToPlatformHandle(
-      dispatcher->PassInternalPlatformHandle());
+  h = dispatcher->TakePlatformHandle();
   EXPECT_TRUE(h.is_valid());
 
   fp = test::FILEFromPlatformHandle(std::move(h), "rb");
@@ -83,7 +58,7 @@
   EXPECT_STREQ(kHelloWorld, read_buffer);
 
   // Try getting the handle again. (It should fail cleanly.)
-  auto internal_handle = dispatcher->PassInternalPlatformHandle();
+  auto internal_handle = dispatcher->TakePlatformHandle();
   EXPECT_FALSE(internal_handle.is_valid());
 
   EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close());
@@ -102,8 +77,7 @@
 
   scoped_refptr<PlatformHandleDispatcher> dispatcher =
       PlatformHandleDispatcher::Create(
-          PlatformHandleToScopedInternalPlatformHandle(
-              test::PlatformHandleFromFILE(std::move(fp))));
+          test::PlatformHandleFromFILE(std::move(fp)));
 
   uint32_t num_bytes = 0;
   uint32_t num_ports = 0;
@@ -122,8 +96,7 @@
 
   EXPECT_TRUE(received_handle.is_valid());
 
-  ScopedInternalPlatformHandle handle =
-      dispatcher->PassInternalPlatformHandle();
+  PlatformHandle handle = dispatcher->TakePlatformHandle();
   EXPECT_FALSE(handle.is_valid());
 
   EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, dispatcher->Close());
@@ -137,10 +110,7 @@
   EXPECT_FALSE(received_handle.is_valid());
   EXPECT_TRUE(dispatcher->GetType() == Dispatcher::Type::PLATFORM_HANDLE);
 
-  fp = test::FILEFromPlatformHandle(
-      ScopedInternalPlatformHandleToPlatformHandle(
-          dispatcher->PassInternalPlatformHandle()),
-      "rb");
+  fp = test::FILEFromPlatformHandle(dispatcher->TakePlatformHandle(), "rb");
   EXPECT_TRUE(fp);
 
   rewind(fp.get());
diff --git a/mojo/edk/system/platform_handle_utils.cc b/mojo/edk/system/platform_handle_utils.cc
new file mode 100644
index 0000000..0602eab
--- /dev/null
+++ b/mojo/edk/system/platform_handle_utils.cc
@@ -0,0 +1,124 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mojo/edk/system/platform_handle_utils.h"
+
+#include "build/build_config.h"
+
+#if defined(OS_FUCHSIA)
+#include "base/fuchsia/scoped_zx_handle.h"
+#elif defined(OS_POSIX)
+#include "base/files/scoped_file.h"
+#elif defined(OS_WIN)
+#include "base/win/scoped_handle.h"
+#endif
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+#include "base/mac/scoped_mach_port.h"
+#endif
+
+namespace mojo {
+namespace edk {
+
+PlatformHandle ScopedInternalPlatformHandleToPlatformHandle(
+    ScopedInternalPlatformHandle handle) {
+#if defined(OS_FUCHSIA)
+  if (handle.get().is_valid_fd())
+    return PlatformHandle(base::ScopedFD(handle.release().as_fd()));
+  else
+    return PlatformHandle(base::ScopedZxHandle(handle.release().as_handle()));
+#elif defined(OS_POSIX)
+  if (handle.get().type == InternalPlatformHandle::Type::POSIX) {
+    return PlatformHandle(base::ScopedFD(handle.release().handle));
+  }
+#elif defined(OS_WIN)
+  return PlatformHandle(base::win::ScopedHandle(handle.release().handle));
+#endif
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+  if (handle.get().type == InternalPlatformHandle::Type::MACH) {
+    return PlatformHandle(
+        base::mac::ScopedMachSendRight(handle.release().port));
+  }
+#endif
+
+  return PlatformHandle();
+}
+
+ScopedInternalPlatformHandle PlatformHandleToScopedInternalPlatformHandle(
+    PlatformHandle handle) {
+#if defined(OS_FUCHSIA)
+  if (handle.is_fd()) {
+    return ScopedInternalPlatformHandle(
+        InternalPlatformHandle::ForFd(handle.ReleaseFD()));
+  } else if (handle.is_handle()) {
+    return ScopedInternalPlatformHandle(
+        InternalPlatformHandle::ForHandle(handle.ReleaseHandle()));
+  }
+#elif defined(OS_POSIX)
+  if (handle.is_fd()) {
+    return ScopedInternalPlatformHandle(
+        InternalPlatformHandle(handle.ReleaseFD()));
+  }
+#elif defined(OS_WIN)
+  if (handle.is_handle()) {
+    return ScopedInternalPlatformHandle(
+        InternalPlatformHandle(handle.ReleaseHandle()));
+  }
+#endif
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+  if (handle.is_mach_port()) {
+    return ScopedInternalPlatformHandle(
+        InternalPlatformHandle(handle.ReleaseMachPort()));
+  }
+#endif
+
+  return ScopedInternalPlatformHandle();
+}
+
+void ExtractPlatformHandlesFromSharedMemoryRegionHandle(
+    base::subtle::PlatformSharedMemoryRegion::ScopedPlatformHandle handle,
+    PlatformHandle* extracted_handle,
+    PlatformHandle* extracted_readonly_handle) {
+#if defined(OS_WIN)
+  *extracted_handle = PlatformHandle(base::win::ScopedHandle(handle.Take()));
+#elif defined(OS_FUCHSIA)
+  *extracted_handle = PlatformHandle(std::move(handle));
+#elif defined(OS_MACOSX) && !defined(OS_IOS)
+  // This is a Mach port. Same code as above and below, but separated for
+  // clarity.
+  *extracted_handle = PlatformHandle(std::move(handle));
+#elif defined(OS_ANDROID)
+  // This is a file descriptor. Same code as above, but separated for clarity.
+  *extracted_handle = PlatformHandle(std::move(handle));
+#else
+  *extracted_handle = PlatformHandle(std::move(handle.fd));
+  *extracted_readonly_handle = PlatformHandle(std::move(handle.readonly_fd));
+#endif
+}
+
+base::subtle::PlatformSharedMemoryRegion::ScopedPlatformHandle
+CreateSharedMemoryRegionHandleFromPlatformHandles(
+    PlatformHandle handle,
+    PlatformHandle readonly_handle) {
+#if defined(OS_WIN)
+  DCHECK(!readonly_handle.is_valid());
+  return handle.TakeHandle();
+#elif defined(OS_FUCHSIA)
+  DCHECK(!readonly_handle.is_valid());
+  return handle.TakeHandle();
+#elif defined(OS_MACOSX) && !defined(OS_IOS)
+  DCHECK(!readonly_handle.is_valid());
+  return handle.TakeMachPort();
+#elif defined(OS_ANDROID)
+  DCHECK(!readonly_handle.is_valid());
+  return handle.TakeFD();
+#else
+  return base::subtle::ScopedFDPair(handle.TakeFD(), readonly_handle.TakeFD());
+#endif
+}
+
+}  // namespace edk
+}  // namespace mojo
diff --git a/mojo/edk/system/platform_handle_utils.h b/mojo/edk/system/platform_handle_utils.h
new file mode 100644
index 0000000..05a06eb
--- /dev/null
+++ b/mojo/edk/system/platform_handle_utils.h
@@ -0,0 +1,43 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MOJO_EDK_SYSTEM_PLATFORM_HANDLE_UTILS_H_
+#define MOJO_EDK_SYSTEM_PLATFORM_HANDLE_UTILS_H_
+
+#include "base/memory/platform_shared_memory_region.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
+#include "mojo/edk/system/system_impl_export.h"
+#include "mojo/public/c/system/platform_handle.h"
+#include "mojo/public/c/system/types.h"
+#include "mojo/public/cpp/platform/platform_handle.h"
+
+namespace mojo {
+namespace edk {
+
+// Conversion between an internal handle type and the public PlatformHandle.
+MOJO_SYSTEM_IMPL_EXPORT PlatformHandle
+ScopedInternalPlatformHandleToPlatformHandle(
+    ScopedInternalPlatformHandle handle);
+MOJO_SYSTEM_IMPL_EXPORT ScopedInternalPlatformHandle
+PlatformHandleToScopedInternalPlatformHandle(PlatformHandle handle);
+
+// Converts a base shared memory platform handle into one (maybe two on POSIX)
+// PlatformHandle(s).
+MOJO_SYSTEM_IMPL_EXPORT void ExtractPlatformHandlesFromSharedMemoryRegionHandle(
+    base::subtle::PlatformSharedMemoryRegion::ScopedPlatformHandle handle,
+    PlatformHandle* extracted_handle,
+    PlatformHandle* extracted_readonly_handle);
+
+// Converts one (maybe two on POSIX) PlatformHandle(s) to a base shared memory
+// platform handle.
+MOJO_SYSTEM_IMPL_EXPORT
+base::subtle::PlatformSharedMemoryRegion::ScopedPlatformHandle
+CreateSharedMemoryRegionHandleFromPlatformHandles(
+    PlatformHandle handle,
+    PlatformHandle readonly_handle);
+
+}  // namespace edk
+}  // namespace mojo
+
+#endif  // MOJO_EDK_SYSTEM_PLATFORM_HANDLE_UTILS_H_
diff --git a/mojo/edk/system/shared_buffer_dispatcher.cc b/mojo/edk/system/shared_buffer_dispatcher.cc
index 73b2c03..15bff51 100644
--- a/mojo/edk/system/shared_buffer_dispatcher.cc
+++ b/mojo/edk/system/shared_buffer_dispatcher.cc
@@ -14,10 +14,10 @@
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
 #include "build/build_config.h"
-#include "mojo/edk/embedder/platform_handle_utils.h"
 #include "mojo/edk/system/configuration.h"
 #include "mojo/edk/system/node_controller.h"
 #include "mojo/edk/system/options_validation.h"
+#include "mojo/edk/system/platform_handle_utils.h"
 #include "mojo/edk/system/platform_shared_memory_mapping.h"
 #include "mojo/public/c/system/platform_handle.h"
 
@@ -140,14 +140,15 @@
   if (num_ports)
     return nullptr;
 
-  ScopedInternalPlatformHandle handles[2];
+  PlatformHandle handles[2];
 #if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_FUCHSIA) && \
     (!defined(OS_MACOSX) || defined(OS_IOS))
   if (serialized_state->access_mode ==
       MOJO_PLATFORM_SHARED_MEMORY_REGION_ACCESS_MODE_WRITABLE) {
     if (num_platform_handles != 2)
       return nullptr;
-    handles[1] = std::move(platform_handles[1]);
+    handles[1] = ScopedInternalPlatformHandleToPlatformHandle(
+        std::move(platform_handles[1]));
   } else {
     if (num_platform_handles != 1)
       return nullptr;
@@ -156,7 +157,8 @@
   if (num_platform_handles != 1)
     return nullptr;
 #endif
-  handles[0] = std::move(platform_handles[0]);
+  handles[0] = ScopedInternalPlatformHandleToPlatformHandle(
+      std::move(platform_handles[0]));
 
   base::UnguessableToken guid = base::UnguessableToken::Deserialize(
       serialized_state->guid_high, serialized_state->guid_low);
@@ -176,9 +178,10 @@
       LOG(ERROR) << "Invalid serialized shared buffer access mode.";
       return nullptr;
   }
+
   auto region = base::subtle::PlatformSharedMemoryRegion::Take(
-      CreateSharedMemoryRegionHandleFromInternalPlatformHandles(
-          std::move(handles[0]), std::move(handles[1])),
+      CreateSharedMemoryRegionHandleFromPlatformHandles(std::move(handles[0]),
+                                                        std::move(handles[1])),
       mode, static_cast<size_t>(serialized_state->num_bytes), guid);
   if (!region.IsValid()) {
     LOG(ERROR)
@@ -356,15 +359,24 @@
     (!defined(OS_MACOSX) || defined(OS_IOS))
   if (region.GetMode() ==
       base::subtle::PlatformSharedMemoryRegion::Mode::kWritable) {
-    ExtractInternalPlatformHandlesFromSharedMemoryRegionHandle(
-        region.PassPlatformHandle(), &handles[0], &handles[1]);
+    PlatformHandle platform_handles[2];
+    ExtractPlatformHandlesFromSharedMemoryRegionHandle(
+        region.PassPlatformHandle(), &platform_handles[0],
+        &platform_handles[1]);
+    handles[0] = PlatformHandleToScopedInternalPlatformHandle(
+        std::move(platform_handles[0]));
+    handles[1] = PlatformHandleToScopedInternalPlatformHandle(
+        std::move(platform_handles[1]));
     return true;
   }
 #endif
 
-  ScopedInternalPlatformHandle ignored_handle;
-  ExtractInternalPlatformHandlesFromSharedMemoryRegionHandle(
-      region.PassPlatformHandle(), &handles[0], &ignored_handle);
+  PlatformHandle platform_handle;
+  PlatformHandle ignored_handle;
+  ExtractPlatformHandlesFromSharedMemoryRegionHandle(
+      region.PassPlatformHandle(), &platform_handle, &ignored_handle);
+  handles[0] =
+      PlatformHandleToScopedInternalPlatformHandle(std::move(platform_handle));
   return true;
 }
 
diff --git a/mojo/public/cpp/platform/BUILD.gn b/mojo/public/cpp/platform/BUILD.gn
index 1b109b33..29f7698 100644
--- a/mojo/public/cpp/platform/BUILD.gn
+++ b/mojo/public/cpp/platform/BUILD.gn
@@ -31,6 +31,7 @@
 
   public_deps = [
     "//base",
+    "//mojo/public/c/system:headers",
   ]
 
   if (is_posix && (!is_nacl && !is_fuchsia)) {
diff --git a/mojo/public/cpp/platform/DEPS b/mojo/public/cpp/platform/DEPS
index aa2ee21..375d67b 100644
--- a/mojo/public/cpp/platform/DEPS
+++ b/mojo/public/cpp/platform/DEPS
@@ -2,6 +2,7 @@
   # Mojo platform support must not depend on any other part of the Mojo public
   # library.
   "-mojo",
+  "+mojo/public/c/system",
   "+mojo/public/cpp/platform",
 
   # For some syscalls when building in NaCl toolchains.
diff --git a/mojo/public/cpp/platform/platform_handle.cc b/mojo/public/cpp/platform/platform_handle.cc
index 0d2a58b..fc29361 100644
--- a/mojo/public/cpp/platform/platform_handle.cc
+++ b/mojo/public/cpp/platform/platform_handle.cc
@@ -9,19 +9,26 @@
 
 #if defined(OS_WIN)
 #include <windows.h>
+
+#include "base/win/scoped_handle.h"
 #elif defined(OS_FUCHSIA)
 #include <lib/fdio/limits.h>
 #include <unistd.h>
 #include <zircon/status.h>
 #include <zircon/syscalls.h>
+
+#include "base/fuchsia/scoped_zx_handle.h"
 #elif defined(OS_MACOSX) && !defined(OS_IOS)
 #include <mach/mach_vm.h>
 
 #include "base/mac/mach_logging.h"
+#include "base/mac/scoped_mach_port.h"
 #endif
 
 #if defined(OS_POSIX)
 #include <unistd.h>
+
+#include "base/files/scoped_file.h"
 #endif
 
 namespace mojo {
@@ -81,17 +88,18 @@
 
 #if defined(OS_WIN)
 PlatformHandle::PlatformHandle(base::win::ScopedHandle handle)
-    : handle_(std::move(handle)) {}
+    : type_(Type::kHandle), handle_(std::move(handle)) {}
 #elif defined(OS_FUCHSIA)
 PlatformHandle::PlatformHandle(base::ScopedZxHandle handle)
-    : handle_(std::move(handle)) {}
+    : type_(Type::kHandle), handle_(std::move(handle)) {}
 #elif defined(OS_MACOSX) && !defined(OS_IOS)
 PlatformHandle::PlatformHandle(base::mac::ScopedMachSendRight mach_port)
-    : mach_port_(std::move(mach_port)) {}
+    : type_(Type::kMachPort), mach_port_(std::move(mach_port)) {}
 #endif
 
 #if defined(OS_POSIX) || defined(OS_FUCHSIA)
-PlatformHandle::PlatformHandle(base::ScopedFD fd) : fd_(std::move(fd)) {
+PlatformHandle::PlatformHandle(base::ScopedFD fd)
+    : type_(Type::kFd), fd_(std::move(fd)) {
 #if defined(OS_FUCHSIA)
   DCHECK_LT(fd_.get(), FDIO_MAX_FD);
 #endif
@@ -102,7 +110,82 @@
 
 PlatformHandle& PlatformHandle::operator=(PlatformHandle&& other) = default;
 
+// static
+void PlatformHandle::ToMojoPlatformHandle(PlatformHandle handle,
+                                          MojoPlatformHandle* out_handle) {
+  DCHECK(out_handle);
+  out_handle->struct_size = sizeof(MojoPlatformHandle);
+  if (handle.type_ == Type::kNone) {
+    out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_INVALID;
+    out_handle->value = 0;
+    return;
+  }
+
+  do {
+#if defined(OS_WIN)
+    out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE;
+    out_handle->value =
+        static_cast<uint64_t>(HandleToLong(handle.TakeHandle().Take()));
+    break;
+#elif defined(OS_FUCHSIA)
+    if (handle.is_handle()) {
+      out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_FUCHSIA_HANDLE;
+      out_handle->value = handle.TakeHandle().release();
+      break;
+    }
+#elif defined(OS_MACOSX) && !defined(OS_IOS)
+    if (handle.is_mach_port()) {
+      out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT;
+      out_handle->value =
+          static_cast<uint64_t>(handle.TakeMachPort().release());
+      break;
+    }
+#endif
+
+#if defined(OS_POSIX) || defined(OS_FUCHSIA)
+    DCHECK(handle.is_fd());
+    out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR;
+    out_handle->value = static_cast<uint64_t>(handle.TakeFD().release());
+#endif
+  } while (false);
+
+  // One of the above cases must take ownership of |handle|.
+  DCHECK(!handle.is_valid());
+}
+
+// static
+PlatformHandle PlatformHandle::FromMojoPlatformHandle(
+    const MojoPlatformHandle* handle) {
+  if (handle->struct_size < sizeof(*handle) ||
+      handle->type == MOJO_PLATFORM_HANDLE_TYPE_INVALID) {
+    return PlatformHandle();
+  }
+
+#if defined(OS_WIN)
+  if (handle->type != MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE)
+    return PlatformHandle();
+  return PlatformHandle(
+      base::win::ScopedHandle(LongToHandle(static_cast<long>(handle->value))));
+#elif defined(OS_FUCHSIA)
+  if (handle->type == MOJO_PLATFORM_HANDLE_TYPE_FUCHSIA_HANDLE)
+    return PlatformHandle(base::ScopedZxHandle(handle->value));
+#elif defined(OS_MACOSX) && !defined(OS_IOS)
+  if (handle->type == MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT) {
+    return PlatformHandle(base::mac::ScopedMachSendRight(
+        static_cast<mach_port_t>(handle->value)));
+  }
+#endif
+
+#if defined(OS_POSIX) || defined(OS_FUCHSIA)
+  if (handle->type != MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR)
+    return PlatformHandle();
+  return PlatformHandle(base::ScopedFD(static_cast<int>(handle->value)));
+#endif
+}
+
 void PlatformHandle::reset() {
+  type_ = Type::kNone;
+
 #if defined(OS_WIN)
   handle_.Close();
 #elif defined(OS_FUCHSIA)
diff --git a/mojo/public/cpp/platform/platform_handle.h b/mojo/public/cpp/platform/platform_handle.h
index c9608fa..d9a5218 100644
--- a/mojo/public/cpp/platform/platform_handle.h
+++ b/mojo/public/cpp/platform/platform_handle.h
@@ -9,6 +9,7 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "build/build_config.h"
+#include "mojo/public/c/system/platform_handle.h"
 
 #if defined(OS_WIN)
 #include "base/win/scoped_handle.h"
@@ -40,6 +41,18 @@
 // NOTE: This assumes ownership if the handle it represents.
 class COMPONENT_EXPORT(MOJO_CPP_PLATFORM) PlatformHandle {
  public:
+  enum class Type {
+    kNone,
+#if defined(OS_WIN) || defined(OS_FUCHSIA)
+    kHandle,
+#elif defined(OS_MACOSX) && !defined(OS_IOS)
+    kMachPort,
+#endif
+#if defined(OS_POSIX) || defined(OS_FUCHSIA)
+    kFd,
+#endif
+  };
+
   PlatformHandle();
   PlatformHandle(PlatformHandle&& other);
 
@@ -59,7 +72,20 @@
 
   PlatformHandle& operator=(PlatformHandle&& other);
 
+  // Takes ownership of |handle|'s underlying platform handle and fills in
+  // |mojo_handle| with a representation of it. The caller assumes ownership of
+  // the platform handle.
+  static void ToMojoPlatformHandle(PlatformHandle handle,
+                                   MojoPlatformHandle* mojo_handle);
+
   // Closes the underlying platform handle.
+  // Assumes ownership of the platform handle described by |handle|, and returns
+  // it as a new PlatformHandle.
+  static PlatformHandle FromMojoPlatformHandle(
+      const MojoPlatformHandle* handle);
+
+  Type type() const { return type_; }
+
   void reset();
 
   // Duplicates the underlying platform handle, returning a new PlatformHandle
@@ -67,21 +93,23 @@
   PlatformHandle Clone() const;
 
 #if defined(OS_WIN)
-  bool is_valid() const { return handle_.IsValid(); }
+  bool is_valid() const { return is_valid_handle(); }
+  bool is_valid_handle() const { return handle_.IsValid(); }
+  bool is_handle() const { return type_ == Type::kHandle; }
   const base::win::ScopedHandle& GetHandle() const { return handle_; }
   base::win::ScopedHandle TakeHandle() { return std::move(handle_); }
   HANDLE ReleaseHandle() WARN_UNUSED_RESULT { return handle_.Take(); }
 #elif defined(OS_FUCHSIA)
   bool is_valid() const { return is_valid_fd() || is_valid_handle(); }
-
   bool is_valid_handle() const { return handle_.is_valid(); }
+  bool is_handle() const { return type_ == Type::kHandle; }
   const base::ScopedZxHandle& GetHandle() const { return handle_; }
   base::ScopedZxHandle TakeHandle() { return std::move(handle_); }
   zx_handle_t ReleaseHandle() WARN_UNUSED_RESULT { return handle_.release(); }
 #elif defined(OS_MACOSX) && !defined(OS_IOS)
   bool is_valid() const { return is_valid_fd() || is_valid_mach_port(); }
-
   bool is_valid_mach_port() const { return mach_port_.is_valid(); }
+  bool is_mach_port() const { return type_ == Type::kMachPort; }
   const base::mac::ScopedMachSendRight& GetMachPort() const {
     return mach_port_;
   }
@@ -99,12 +127,15 @@
 
 #if defined(OS_POSIX) || defined(OS_FUCHSIA)
   bool is_valid_fd() const { return fd_.is_valid(); }
+  bool is_fd() const { return type_ == Type::kFd; }
   const base::ScopedFD& GetFD() const { return fd_; }
   base::ScopedFD TakeFD() { return std::move(fd_); }
   int ReleaseFD() WARN_UNUSED_RESULT { return fd_.release(); }
 #endif
 
  private:
+  Type type_ = Type::kNone;
+
 #if defined(OS_WIN)
   base::win::ScopedHandle handle_;
 #elif defined(OS_FUCHSIA)
diff --git a/mojo/public/cpp/platform/tests/platform_handle_unittest.cc b/mojo/public/cpp/platform/tests/platform_handle_unittest.cc
index 26533f9c..d68733a 100644
--- a/mojo/public/cpp/platform/tests/platform_handle_unittest.cc
+++ b/mojo/public/cpp/platform/tests/platform_handle_unittest.cc
@@ -237,9 +237,9 @@
   EXPECT_EQ(kTestData, GetObjectContents(test_handle()));
 
   MojoPlatformHandle c_handle;
-  PlatformHandleToMojoPlatformHandle(std::move(test_handle()), &c_handle);
+  PlatformHandle::ToMojoPlatformHandle(std::move(test_handle()), &c_handle);
 
-  PlatformHandle handle = MojoPlatformHandleToPlatformHandle(&c_handle);
+  PlatformHandle handle = PlatformHandle::FromMojoPlatformHandle(&c_handle);
   EXPECT_EQ(kTestData, GetObjectContents(handle));
 }
 
diff --git a/mojo/public/cpp/system/invitation.cc b/mojo/public/cpp/system/invitation.cc
index 4dcc9d3..f70c435e 100644
--- a/mojo/public/cpp/system/invitation.cc
+++ b/mojo/public/cpp/system/invitation.cc
@@ -31,8 +31,8 @@
     PlatformHandle platform_handle,
     MojoPlatformHandle* endpoint_handle,
     MojoInvitationTransportEndpoint* endpoint) {
-  PlatformHandleToMojoPlatformHandle(std::move(platform_handle),
-                                     endpoint_handle);
+  PlatformHandle::ToMojoPlatformHandle(std::move(platform_handle),
+                                       endpoint_handle);
   CHECK_NE(endpoint_handle->type, MOJO_PLATFORM_HANDLE_TYPE_INVALID);
 
   endpoint->struct_size = sizeof(*endpoint);
@@ -216,8 +216,8 @@
 IncomingInvitation IncomingInvitation::Accept(
     PlatformChannelEndpoint channel_endpoint) {
   MojoPlatformHandle endpoint_handle;
-  PlatformHandleToMojoPlatformHandle(channel_endpoint.TakePlatformHandle(),
-                                     &endpoint_handle);
+  PlatformHandle::ToMojoPlatformHandle(channel_endpoint.TakePlatformHandle(),
+                                       &endpoint_handle);
   CHECK_NE(endpoint_handle.type, MOJO_PLATFORM_HANDLE_TYPE_INVALID);
 
   MojoInvitationTransportEndpoint transport_endpoint;
@@ -240,8 +240,8 @@
 ScopedMessagePipeHandle IncomingInvitation::AcceptIsolated(
     PlatformChannelEndpoint channel_endpoint) {
   MojoPlatformHandle endpoint_handle;
-  PlatformHandleToMojoPlatformHandle(channel_endpoint.TakePlatformHandle(),
-                                     &endpoint_handle);
+  PlatformHandle::ToMojoPlatformHandle(channel_endpoint.TakePlatformHandle(),
+                                       &endpoint_handle);
   CHECK_NE(endpoint_handle.type, MOJO_PLATFORM_HANDLE_TYPE_INVALID);
 
   MojoInvitationTransportEndpoint transport_endpoint;
diff --git a/mojo/public/cpp/system/platform_handle.cc b/mojo/public/cpp/system/platform_handle.cc
index 353b236b3..9e55f550 100644
--- a/mojo/public/cpp/system/platform_handle.cc
+++ b/mojo/public/cpp/system/platform_handle.cc
@@ -181,7 +181,7 @@
 
 ScopedHandle WrapPlatformHandle(PlatformHandle handle) {
   MojoPlatformHandle platform_handle;
-  PlatformHandleToMojoPlatformHandle(std::move(handle), &platform_handle);
+  PlatformHandle::ToMojoPlatformHandle(std::move(handle), &platform_handle);
 
   MojoHandle wrapped_handle;
   MojoResult result =
@@ -198,78 +198,7 @@
                                                nullptr, &platform_handle);
   if (result != MOJO_RESULT_OK)
     return PlatformHandle();
-  return MojoPlatformHandleToPlatformHandle(&platform_handle);
-}
-
-void PlatformHandleToMojoPlatformHandle(PlatformHandle handle,
-                                        MojoPlatformHandle* out_handle) {
-  DCHECK(out_handle);
-  out_handle->struct_size = sizeof(MojoPlatformHandle);
-  if (!handle.is_valid()) {
-    out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_INVALID;
-    out_handle->value = 0;
-    return;
-  }
-
-  do {
-#if defined(OS_WIN)
-    out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE;
-    out_handle->value =
-        static_cast<uint64_t>(HandleToLong(handle.TakeHandle().Take()));
-    break;
-#elif defined(OS_FUCHSIA)
-    if (handle.is_valid_handle()) {
-      out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_FUCHSIA_HANDLE;
-      out_handle->value = handle.TakeHandle().release();
-      break;
-    }
-#elif defined(OS_MACOSX) && !defined(OS_IOS)
-    if (handle.is_valid_mach_port()) {
-      out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT;
-      out_handle->value =
-          static_cast<uint64_t>(handle.TakeMachPort().release());
-      break;
-    }
-#endif
-
-#if defined(OS_POSIX) || defined(OS_FUCHSIA)
-    DCHECK(handle.is_valid_fd());
-    out_handle->type = MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR;
-    out_handle->value = static_cast<uint64_t>(handle.TakeFD().release());
-#endif
-  } while (false);
-
-  // One of the above cases must take ownership of |handle|.
-  DCHECK(!handle.is_valid());
-}
-
-PlatformHandle MojoPlatformHandleToPlatformHandle(
-    const MojoPlatformHandle* handle) {
-  if (handle->struct_size < sizeof(*handle) ||
-      handle->type == MOJO_PLATFORM_HANDLE_TYPE_INVALID) {
-    return PlatformHandle();
-  }
-
-#if defined(OS_WIN)
-  if (handle->type != MOJO_PLATFORM_HANDLE_TYPE_WINDOWS_HANDLE)
-    return PlatformHandle();
-  return PlatformHandle(
-      base::win::ScopedHandle(LongToHandle(static_cast<long>(handle->value))));
-#elif defined(OS_FUCHSIA)
-  if (handle->type == MOJO_PLATFORM_HANDLE_TYPE_FUCHSIA_HANDLE)
-    return PlatformHandle(base::ScopedZxHandle(handle->value));
-#elif defined(OS_MACOSX) && !defined(OS_IOS)
-  if (handle->type == MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT) {
-    return PlatformHandle(base::mac::ScopedMachSendRight(
-        static_cast<mach_port_t>(handle->value)));
-  }
-#endif
-
-#if defined(OS_POSIX) || defined(OS_FUCHSIA)
-  if (handle->type != MOJO_PLATFORM_HANDLE_TYPE_FILE_DESCRIPTOR)
-    return PlatformHandle();
-  return PlatformHandle(base::ScopedFD(static_cast<int>(handle->value)));
-#endif
+  return PlatformHandle::FromMojoPlatformHandle(&platform_handle);
 }
 
 // Wraps a PlatformFile as a Mojo handle. Takes ownership of the file object.
diff --git a/mojo/public/cpp/system/platform_handle.h b/mojo/public/cpp/system/platform_handle.h
index e2ee374..b18ceaf 100644
--- a/mojo/public/cpp/system/platform_handle.h
+++ b/mojo/public/cpp/system/platform_handle.h
@@ -76,19 +76,6 @@
   kReadOnly,
 };
 
-// Converts a PlatformHandle to the MojoPlatformHandle C struct for use with
-// Mojo APIs. Note that although MojoPlatformHandle has weak ownership, this
-// relinquishes ownership from |handle|.
-void MOJO_CPP_SYSTEM_EXPORT
-PlatformHandleToMojoPlatformHandle(PlatformHandle handle,
-                                   MojoPlatformHandle* out_handle);
-
-// Converts a MojoPlatformHandle C struct to a PlatformHandle for use with
-// various C++ APIs. Note that although MojoPlatformHandle has weak ownership,
-// the new handle assumes ownership of the represented platform handle.
-PlatformHandle MOJO_CPP_SYSTEM_EXPORT
-MojoPlatformHandleToPlatformHandle(const MojoPlatformHandle* handle);
-
 // Wraps a PlatformHandle from the C++ platform support library as a Mojo
 // handle.
 MOJO_CPP_SYSTEM_EXPORT ScopedHandle WrapPlatformHandle(PlatformHandle handle);
diff --git a/services/identity/BUILD.gn b/services/identity/BUILD.gn
index 90ecc5c..045e94b 100644
--- a/services/identity/BUILD.gn
+++ b/services/identity/BUILD.gn
@@ -51,6 +51,7 @@
   ]
   sources = [
     "identity_manager_impl_unittest.cc",
+    "public/cpp/access_token_fetcher_unittest.cc",
     "public/cpp/identity_manager_unittest.cc",
     "public/cpp/primary_account_access_token_fetcher_unittest.cc",
   ]
diff --git a/services/identity/public/cpp/BUILD.gn b/services/identity/public/cpp/BUILD.gn
index b6a9766..3d93387 100644
--- a/services/identity/public/cpp/BUILD.gn
+++ b/services/identity/public/cpp/BUILD.gn
@@ -4,6 +4,8 @@
 
 source_set("cpp") {
   sources = [
+    "access_token_fetcher.cc",
+    "access_token_fetcher.h",
     "identity_manager.cc",
     "identity_manager.h",
     "primary_account_access_token_fetcher.cc",
diff --git a/services/identity/public/cpp/access_token_fetcher.cc b/services/identity/public/cpp/access_token_fetcher.cc
new file mode 100644
index 0000000..073692e
--- /dev/null
+++ b/services/identity/public/cpp/access_token_fetcher.cc
@@ -0,0 +1,67 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/identity/public/cpp/access_token_fetcher.h"
+
+#include <utility>
+
+#include "base/logging.h"
+
+namespace identity {
+
+AccessTokenFetcher::AccessTokenFetcher(
+    const std::string& account_id,
+    const std::string& oauth_consumer_name,
+    OAuth2TokenService* token_service,
+    const OAuth2TokenService::ScopeSet& scopes,
+    TokenCallback callback)
+    : OAuth2TokenService::Consumer(oauth_consumer_name),
+      account_id_(account_id),
+      token_service_(token_service),
+      scopes_(scopes),
+      callback_(std::move(callback)) {
+  // TODO(843510): Consider making the request to ProfileOAuth2TokenService
+  // asynchronously once there are no direct clients of PO2TS (i.e., PO2TS is
+  // used only by this class and IdentityManager).
+  access_token_request_ =
+      token_service_->StartRequest(account_id_, scopes_, this);
+}
+
+AccessTokenFetcher::~AccessTokenFetcher() {}
+
+void AccessTokenFetcher::OnGetTokenSuccess(
+    const OAuth2TokenService::Request* request,
+    const std::string& access_token,
+    const base::Time& expiration_time) {
+  DCHECK_EQ(request, access_token_request_.get());
+  std::unique_ptr<OAuth2TokenService::Request> request_deleter(
+      std::move(access_token_request_));
+
+  RunCallbackAndMaybeDie(GoogleServiceAuthError::AuthErrorNone(), access_token);
+
+  // Potentially dead after the above invocation; nothing to do except return.
+}
+
+void AccessTokenFetcher::OnGetTokenFailure(
+    const OAuth2TokenService::Request* request,
+    const GoogleServiceAuthError& error) {
+  DCHECK_EQ(request, access_token_request_.get());
+  std::unique_ptr<OAuth2TokenService::Request> request_deleter(
+      std::move(access_token_request_));
+
+  RunCallbackAndMaybeDie(error, std::string());
+
+  // Potentially dead after the above invocation; nothing to do except return.
+}
+
+void AccessTokenFetcher::RunCallbackAndMaybeDie(
+    const GoogleServiceAuthError& error,
+    const std::string& access_token) {
+  // Per the contract of this class, it is allowed for consumers to delete this
+  // object from within the callback that is run below. Hence, it is not safe to
+  // add any code below this call.
+  std::move(callback_).Run(error, access_token);
+}
+
+}  // namespace identity
diff --git a/services/identity/public/cpp/access_token_fetcher.h b/services/identity/public/cpp/access_token_fetcher.h
new file mode 100644
index 0000000..5e0fbc1
--- /dev/null
+++ b/services/identity/public/cpp/access_token_fetcher.h
@@ -0,0 +1,76 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_IDENTITY_PUBLIC_CPP_ACCESS_TOKEN_FETCHER_H_
+#define SERVICES_IDENTITY_PUBLIC_CPP_ACCESS_TOKEN_FETCHER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "google_apis/gaia/google_service_auth_error.h"
+#include "google_apis/gaia/oauth2_token_service.h"
+
+namespace identity {
+
+// Helper class to ease the task of obtaining an OAuth2 access token for a
+// given account.
+// May only be used on the UI thread.
+class AccessTokenFetcher : public OAuth2TokenService::Observer,
+                           public OAuth2TokenService::Consumer {
+ public:
+  // Callback for when a request completes (successful or not). On successful
+  // requests, |error| is NONE and |access_token| contains the obtained OAuth2
+  // access token. On failed requests, |error| contains the actual error and
+  // |access_token| is empty.
+  // NOTE: At the time that this method is invoked, it is safe for the client to
+  // destroy the AccessTokenFetcher instance that is invoking this callback.
+  using TokenCallback = base::OnceCallback<void(GoogleServiceAuthError error,
+                                                std::string access_token)>;
+
+  // Instantiates a fetcher and immediately starts the process of obtaining an
+  // OAuth2 access token for |account_id| and |scopes|. The |callback| is called
+  // once the request completes (successful or not). If the AccessTokenFetcher
+  // is destroyed before the process completes, the callback is not called.
+  AccessTokenFetcher(const std::string& account_id,
+                     const std::string& oauth_consumer_name,
+                     OAuth2TokenService* token_service,
+                     const OAuth2TokenService::ScopeSet& scopes,
+                     TokenCallback callback);
+
+  ~AccessTokenFetcher() override;
+
+ private:
+  // OAuth2TokenService::Consumer implementation.
+  void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
+                         const std::string& access_token,
+                         const base::Time& expiration_time) override;
+  void OnGetTokenFailure(const OAuth2TokenService::Request* request,
+                         const GoogleServiceAuthError& error) override;
+
+  // Invokes |callback_| with (|error|, |access_token|). Per the contract of
+  // this class, it is allowed for clients to delete this object as part of the
+  // invocation of |callback_|. Hence, this object must assume that it is dead
+  // after invoking this method and must not run any more code.
+  void RunCallbackAndMaybeDie(const GoogleServiceAuthError& error,
+                              const std::string& access_token);
+
+  std::string account_id_;
+  OAuth2TokenService* token_service_;
+  OAuth2TokenService::ScopeSet scopes_;
+
+  // NOTE: This callback should only be invoked from |RunCallbackAndMaybeDie|,
+  // as invoking it has the potential to destroy this object per this class's
+  // contract.
+  TokenCallback callback_;
+
+  std::unique_ptr<OAuth2TokenService::Request> access_token_request_;
+
+  DISALLOW_COPY_AND_ASSIGN(AccessTokenFetcher);
+};
+
+}  // namespace identity
+
+#endif  // SERVICES_IDENTITY_PUBLIC_CPP_ACCESS_TOKEN_FETCHER_H_
diff --git a/services/identity/public/cpp/access_token_fetcher_unittest.cc b/services/identity/public/cpp/access_token_fetcher_unittest.cc
new file mode 100644
index 0000000..23cd913
--- /dev/null
+++ b/services/identity/public/cpp/access_token_fetcher_unittest.cc
@@ -0,0 +1,382 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/identity/public/cpp/access_token_fetcher.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "base/test/mock_callback.h"
+#include "components/prefs/testing_pref_service.h"
+#include "components/signin/core/browser/account_tracker_service.h"
+#include "components/signin/core/browser/fake_profile_oauth2_token_service.h"
+#include "components/signin/core/browser/test_signin_client.h"
+#include "components/sync_preferences/testing_pref_service_syncable.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using base::MockCallback;
+using sync_preferences::TestingPrefServiceSyncable;
+using testing::StrictMock;
+
+namespace identity {
+
+namespace {
+
+const char kTestGaiaId[] = "dummyId";
+const char kTestGaiaId2[] = "dummyId2";
+const char kTestEmail[] = "me@gmail.com";
+const char kTestEmail2[] = "me2@gmail.com";
+
+}  // namespace
+
+class AccessTokenFetcherTest : public testing::Test,
+                               public OAuth2TokenService::DiagnosticsObserver {
+ public:
+  using TestTokenCallback =
+      StrictMock<MockCallback<AccessTokenFetcher::TokenCallback>>;
+
+  AccessTokenFetcherTest() : signin_client_(&pref_service_) {
+    AccountTrackerService::RegisterPrefs(pref_service_.registry());
+
+    account_tracker_ = std::make_unique<AccountTrackerService>();
+    account_tracker_->Initialize(&signin_client_);
+
+    token_service_.AddDiagnosticsObserver(this);
+  }
+
+  ~AccessTokenFetcherTest() override {
+    token_service_.RemoveDiagnosticsObserver(this);
+  }
+
+  std::string AddAccount(const std::string& gaia_id, const std::string& email) {
+    account_tracker()->SeedAccountInfo(gaia_id, email);
+    return account_tracker()->FindAccountInfoByGaiaId(gaia_id).account_id;
+  }
+
+  std::unique_ptr<AccessTokenFetcher> CreateFetcher(
+      const std::string& account_id,
+      AccessTokenFetcher::TokenCallback callback) {
+    std::set<std::string> scopes{"scope"};
+    return std::make_unique<AccessTokenFetcher>(account_id, "test_consumer",
+                                                &token_service_, scopes,
+                                                std::move(callback));
+  }
+
+  AccountTrackerService* account_tracker() { return account_tracker_.get(); }
+
+  FakeProfileOAuth2TokenService* token_service() { return &token_service_; }
+
+  void set_on_access_token_request_callback(base::OnceClosure callback) {
+    on_access_token_request_callback_ = std::move(callback);
+  }
+
+ private:
+  // OAuth2TokenService::DiagnosticsObserver:
+  void OnAccessTokenRequested(
+      const std::string& account_id,
+      const std::string& consumer_id,
+      const OAuth2TokenService::ScopeSet& scopes) override {
+    if (on_access_token_request_callback_)
+      std::move(on_access_token_request_callback_).Run();
+  }
+
+  base::MessageLoop message_loop_;
+  TestingPrefServiceSyncable pref_service_;
+  TestSigninClient signin_client_;
+  FakeProfileOAuth2TokenService token_service_;
+
+  std::unique_ptr<AccountTrackerService> account_tracker_;
+  base::OnceClosure on_access_token_request_callback_;
+};
+
+TEST_F(AccessTokenFetcherTest, CallsBackOnFulfilledRequest) {
+  TestTokenCallback callback;
+
+  base::RunLoop run_loop;
+  set_on_access_token_request_callback(run_loop.QuitClosure());
+
+  std::string account_id = AddAccount(kTestGaiaId, kTestEmail);
+  token_service()->UpdateCredentials(account_id, "refresh token");
+
+  // This should result in a request for an access token.
+  auto fetcher = CreateFetcher(account_id, callback.Get());
+
+  run_loop.Run();
+
+  // Once the access token request is fulfilled, we should get called back with
+  // the access token.
+  EXPECT_CALL(callback,
+              Run(GoogleServiceAuthError::AuthErrorNone(), "access token"));
+  token_service()->IssueAllTokensForAccount(
+      account_id, "access token",
+      base::Time::Now() + base::TimeDelta::FromHours(1));
+}
+
+TEST_F(AccessTokenFetcherTest, ShouldNotReplyIfDestroyed) {
+  TestTokenCallback callback;
+
+  base::RunLoop run_loop;
+  set_on_access_token_request_callback(run_loop.QuitClosure());
+
+  std::string account_id = AddAccount(kTestGaiaId, kTestEmail);
+  token_service()->UpdateCredentials(account_id, "refresh token");
+
+  // This should result in a request for an access token.
+  auto fetcher = CreateFetcher(account_id, callback.Get());
+
+  run_loop.Run();
+
+  // Destroy the fetcher before the access token request is fulfilled.
+  fetcher.reset();
+
+  // Now fulfilling the access token request should have no effect.
+  token_service()->IssueAllTokensForAccount(
+      account_id, "access token",
+      base::Time::Now() + base::TimeDelta::FromHours(1));
+}
+
+TEST_F(AccessTokenFetcherTest, ReturnsErrorWhenAccountIsUnknown) {
+  TestTokenCallback callback;
+
+  base::RunLoop run_loop;
+
+  // Account not present -> we should get called back.
+  auto fetcher = CreateFetcher("dummy_account_id", callback.Get());
+
+  EXPECT_CALL(callback,
+              Run(GoogleServiceAuthError(
+                      GoogleServiceAuthError::State::USER_NOT_SIGNED_UP),
+                  ""))
+      .WillOnce(testing::InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
+
+  run_loop.Run();
+}
+
+TEST_F(AccessTokenFetcherTest, ReturnsErrorWhenAccountHasNoRefreshToken) {
+  TestTokenCallback callback;
+
+  base::RunLoop run_loop;
+
+  std::string account_id = AddAccount(kTestGaiaId, kTestEmail);
+
+  // Account has no refresh token -> we should get called back.
+  auto fetcher = CreateFetcher(account_id, callback.Get());
+
+  EXPECT_CALL(callback,
+              Run(GoogleServiceAuthError(
+                      GoogleServiceAuthError::State::USER_NOT_SIGNED_UP),
+                  ""))
+      .WillOnce(testing::InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
+
+  run_loop.Run();
+}
+
+TEST_F(AccessTokenFetcherTest, CanceledAccessTokenRequest) {
+  TestTokenCallback callback;
+
+  base::RunLoop run_loop;
+  set_on_access_token_request_callback(run_loop.QuitClosure());
+
+  std::string account_id = AddAccount(kTestGaiaId, kTestEmail);
+  token_service()->UpdateCredentials(account_id, "refresh token");
+
+  // This should result in a request for an access token.
+  auto fetcher = CreateFetcher(account_id, callback.Get());
+
+  run_loop.Run();
+
+  base::RunLoop run_loop2;
+  EXPECT_CALL(
+      callback,
+      Run(GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED), ""))
+      .WillOnce(testing::InvokeWithoutArgs(&run_loop2, &base::RunLoop::Quit));
+
+  // A canceled access token request should result in a callback.
+  token_service()->IssueErrorForAllPendingRequestsForAccount(
+      account_id,
+      GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED));
+
+  run_loop2.Run();
+}
+
+TEST_F(AccessTokenFetcherTest, RefreshTokenRevoked) {
+  base::RunLoop run_loop;
+  set_on_access_token_request_callback(run_loop.QuitClosure());
+
+  TestTokenCallback callback;
+
+  std::string account_id = AddAccount(kTestGaiaId, kTestEmail);
+  token_service()->UpdateCredentials(account_id, "refresh token");
+
+  // This should result in a request for an access token.
+  auto fetcher = CreateFetcher(account_id, callback.Get());
+
+  run_loop.Run();
+
+  // Simulate the refresh token getting invalidated. In this case, pending
+  // access token requests get canceled, and the fetcher should *not* retry.
+  token_service()->RevokeCredentials(account_id);
+  EXPECT_CALL(
+      callback,
+      Run(GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED),
+          std::string()));
+  token_service()->IssueErrorForAllPendingRequestsForAccount(
+      account_id,
+      GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED));
+}
+
+TEST_F(AccessTokenFetcherTest, FailedAccessTokenRequest) {
+  base::RunLoop run_loop;
+  set_on_access_token_request_callback(run_loop.QuitClosure());
+
+  TestTokenCallback callback;
+
+  std::string account_id = AddAccount(kTestGaiaId, kTestEmail);
+  token_service()->UpdateCredentials(account_id, "refresh token");
+
+  // Signed in and refresh token already exists, so this should result in a
+  // request for an access token.
+  auto fetcher = CreateFetcher(account_id, callback.Get());
+
+  run_loop.Run();
+
+  // We should immediately get called back with an empty access token.
+  EXPECT_CALL(
+      callback,
+      Run(GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE),
+          std::string()));
+  token_service()->IssueErrorForAllPendingRequestsForAccount(
+      account_id,
+      GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE));
+}
+
+TEST_F(AccessTokenFetcherTest, MultipleRequestsForSameAccountFulfilled) {
+  TestTokenCallback callback;
+
+  base::RunLoop run_loop;
+  set_on_access_token_request_callback(run_loop.QuitClosure());
+
+  std::string account_id = AddAccount(kTestGaiaId, kTestEmail);
+  token_service()->UpdateCredentials(account_id, "refresh token");
+
+  // This should result in a request for an access token.
+  auto fetcher = CreateFetcher(account_id, callback.Get());
+
+  run_loop.Run();
+
+  // This should also result in a request for an access token.
+  TestTokenCallback callback2;
+  base::RunLoop run_loop2;
+  set_on_access_token_request_callback(run_loop2.QuitClosure());
+  auto fetcher2 = CreateFetcher(account_id, callback2.Get());
+  run_loop2.Run();
+
+  // Once the access token request is fulfilled, both requests should get
+  // called back with the access token.
+  EXPECT_CALL(callback,
+              Run(GoogleServiceAuthError::AuthErrorNone(), "access token"));
+  EXPECT_CALL(callback2,
+              Run(GoogleServiceAuthError::AuthErrorNone(), "access token"));
+  token_service()->IssueAllTokensForAccount(
+      account_id, "access token",
+      base::Time::Now() + base::TimeDelta::FromHours(1));
+}
+
+TEST_F(AccessTokenFetcherTest, MultipleRequestsForDifferentAccountsFulfilled) {
+  TestTokenCallback callback;
+
+  base::RunLoop run_loop;
+  set_on_access_token_request_callback(run_loop.QuitClosure());
+
+  std::string account_id = AddAccount(kTestGaiaId, kTestEmail);
+  token_service()->UpdateCredentials(account_id, "refresh token");
+
+  // This should result in a request for an access token.
+  auto fetcher = CreateFetcher(account_id, callback.Get());
+
+  run_loop.Run();
+
+  // Add a second account and request an access token for it.
+  std::string account_id2 = AddAccount(kTestGaiaId2, kTestEmail2);
+  token_service()->UpdateCredentials(account_id2, "refresh token");
+  TestTokenCallback callback2;
+  base::RunLoop run_loop2;
+  set_on_access_token_request_callback(run_loop2.QuitClosure());
+  auto fetcher2 = CreateFetcher(account_id2, callback2.Get());
+  run_loop2.Run();
+
+  // Once the first access token request is fulfilled, it should get
+  // called back with the access token.
+  EXPECT_CALL(callback,
+              Run(GoogleServiceAuthError::AuthErrorNone(), "access token"));
+  token_service()->IssueAllTokensForAccount(
+      account_id, "access token",
+      base::Time::Now() + base::TimeDelta::FromHours(1));
+
+  // Once the second access token request is fulfilled, it should get
+  // called back with the access token.
+  EXPECT_CALL(callback2,
+              Run(GoogleServiceAuthError::AuthErrorNone(), "access token"));
+  token_service()->IssueAllTokensForAccount(
+      account_id2, "access token",
+      base::Time::Now() + base::TimeDelta::FromHours(1));
+}
+
+TEST_F(AccessTokenFetcherTest,
+       MultipleRequestsForDifferentAccountsCanceledAndFulfilled) {
+  TestTokenCallback callback;
+
+  base::RunLoop run_loop;
+  set_on_access_token_request_callback(run_loop.QuitClosure());
+
+  std::string account_id = AddAccount(kTestGaiaId, kTestEmail);
+  token_service()->UpdateCredentials(account_id, "refresh token");
+
+  // This should result in a request for an access token.
+  auto fetcher = CreateFetcher(account_id, callback.Get());
+  run_loop.Run();
+
+  // Add a second account and request an access token for it.
+  std::string account_id2 = AddAccount(kTestGaiaId2, kTestEmail2);
+  token_service()->UpdateCredentials(account_id2, "refresh token");
+
+  base::RunLoop run_loop2;
+  set_on_access_token_request_callback(run_loop2.QuitClosure());
+
+  TestTokenCallback callback2;
+  auto fetcher2 = CreateFetcher(account_id2, callback2.Get());
+  run_loop2.Run();
+
+  // Cancel the first access token request: This should result in a callback
+  // for the first fetcher.
+  base::RunLoop run_loop3;
+  EXPECT_CALL(
+      callback,
+      Run(GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED), ""))
+      .WillOnce(testing::InvokeWithoutArgs(&run_loop3, &base::RunLoop::Quit));
+
+  token_service()->IssueErrorForAllPendingRequestsForAccount(
+      account_id,
+      GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED));
+
+  run_loop3.Run();
+
+  // Once the second access token request is fulfilled, it should get
+  // called back with the access token.
+  base::RunLoop run_loop4;
+  EXPECT_CALL(callback2,
+              Run(GoogleServiceAuthError::AuthErrorNone(), "access token"))
+      .WillOnce(testing::InvokeWithoutArgs(&run_loop4, &base::RunLoop::Quit));
+  token_service()->IssueAllTokensForAccount(
+      account_id2, "access token",
+      base::Time::Now() + base::TimeDelta::FromHours(1));
+
+  run_loop4.Run();
+}
+
+}  // namespace identity
diff --git a/services/identity/public/cpp/identity_manager.cc b/services/identity/public/cpp/identity_manager.cc
index 5b991ff8..fa009e1 100644
--- a/services/identity/public/cpp/identity_manager.cc
+++ b/services/identity/public/cpp/identity_manager.cc
@@ -83,11 +83,22 @@
   return !primary_account_info_.account_id.empty();
 }
 
+std::unique_ptr<AccessTokenFetcher>
+IdentityManager::CreateAccessTokenFetcherForAccount(
+    const std::string& account_id,
+    const std::string& oauth_consumer_name,
+    const OAuth2TokenService::ScopeSet& scopes,
+    AccessTokenFetcher::TokenCallback callback) {
+  return std::make_unique<AccessTokenFetcher>(account_id, oauth_consumer_name,
+                                              token_service_, scopes,
+                                              std::move(callback));
+}
+
 std::unique_ptr<PrimaryAccountAccessTokenFetcher>
 IdentityManager::CreateAccessTokenFetcherForPrimaryAccount(
     const std::string& oauth_consumer_name,
     const OAuth2TokenService::ScopeSet& scopes,
-    PrimaryAccountAccessTokenFetcher::TokenCallback callback,
+    AccessTokenFetcher::TokenCallback callback,
     PrimaryAccountAccessTokenFetcher::Mode mode) {
   return std::make_unique<PrimaryAccountAccessTokenFetcher>(
       oauth_consumer_name, signin_manager_, token_service_, scopes,
diff --git a/services/identity/public/cpp/identity_manager.h b/services/identity/public/cpp/identity_manager.h
index 65e0380..6bd648864 100644
--- a/services/identity/public/cpp/identity_manager.h
+++ b/services/identity/public/cpp/identity_manager.h
@@ -10,6 +10,7 @@
 #include "components/signin/core/browser/account_tracker_service.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager_base.h"
+#include "services/identity/public/cpp/access_token_fetcher.h"
 #include "services/identity/public/cpp/primary_account_access_token_fetcher.h"
 
 #if !defined(OS_CHROMEOS)
@@ -119,12 +120,19 @@
   // primary account info has a valid account ID.
   bool HasPrimaryAccount();
 
+  // Creates an AccessTokenFetcher given the passed-in information.
+  std::unique_ptr<AccessTokenFetcher> CreateAccessTokenFetcherForAccount(
+      const std::string& account_id,
+      const std::string& oauth_consumer_name,
+      const OAuth2TokenService::ScopeSet& scopes,
+      AccessTokenFetcher::TokenCallback callback);
+
   // Creates a PrimaryAccountAccessTokenFetcher given the passed-in information.
   std::unique_ptr<PrimaryAccountAccessTokenFetcher>
   CreateAccessTokenFetcherForPrimaryAccount(
       const std::string& oauth_consumer_name,
       const OAuth2TokenService::ScopeSet& scopes,
-      PrimaryAccountAccessTokenFetcher::TokenCallback callback,
+      AccessTokenFetcher::TokenCallback callback,
       PrimaryAccountAccessTokenFetcher::Mode mode);
 
   // If an entry exists in the Identity Service's cache corresponding to the
diff --git a/services/identity/public/cpp/identity_manager_unittest.cc b/services/identity/public/cpp/identity_manager_unittest.cc
index de12f49..43b4552 100644
--- a/services/identity/public/cpp/identity_manager_unittest.cc
+++ b/services/identity/public/cpp/identity_manager_unittest.cc
@@ -315,7 +315,9 @@
     token_requestor_account_id_ = account_id;
     token_requestor_consumer_id_ = consumer_id;
     token_requestor_scopes_ = scopes;
-    std::move(on_access_token_requested_callback_).Run();
+
+    if (on_access_token_requested_callback_)
+      std::move(on_access_token_requested_callback_).Run();
   }
 
   IdentityManager* identity_manager_;
@@ -499,9 +501,20 @@
   run_loop.Run();
 }
 
+TEST_F(IdentityManagerTest, CreateAccessTokenFetcher) {
+  std::set<std::string> scopes{"scope"};
+  AccessTokenFetcher::TokenCallback callback = base::BindOnce(
+      [](GoogleServiceAuthError error, std::string access_token) {});
+  std::unique_ptr<AccessTokenFetcher> token_fetcher =
+      identity_manager()->CreateAccessTokenFetcherForAccount(
+          identity_manager()->GetPrimaryAccountInfo().account_id,
+          "dummy_consumer", scopes, std::move(callback));
+  EXPECT_TRUE(token_fetcher);
+}
+
 TEST_F(IdentityManagerTest, CreateAccessTokenFetcherForPrimaryAccount) {
   std::set<std::string> scopes{"scope"};
-  PrimaryAccountAccessTokenFetcher::TokenCallback callback = base::BindOnce(
+  AccessTokenFetcher::TokenCallback callback = base::BindOnce(
       [](GoogleServiceAuthError error, std::string access_token) {});
   std::unique_ptr<PrimaryAccountAccessTokenFetcher> token_fetcher =
       identity_manager()->CreateAccessTokenFetcherForPrimaryAccount(
@@ -520,7 +533,7 @@
   token_service()->UpdateCredentials(account_id, "refresh_token");
 
   std::set<std::string> scopes{"scope"};
-  PrimaryAccountAccessTokenFetcher::TokenCallback callback = base::BindOnce(
+  AccessTokenFetcher::TokenCallback callback = base::BindOnce(
       [](GoogleServiceAuthError error, std::string access_token) {});
   std::unique_ptr<PrimaryAccountAccessTokenFetcher> token_fetcher =
       identity_manager()->CreateAccessTokenFetcherForPrimaryAccount(
diff --git a/services/identity/public/cpp/primary_account_access_token_fetcher.cc b/services/identity/public/cpp/primary_account_access_token_fetcher.cc
index a76db14..805491e06 100644
--- a/services/identity/public/cpp/primary_account_access_token_fetcher.cc
+++ b/services/identity/public/cpp/primary_account_access_token_fetcher.cc
@@ -15,9 +15,9 @@
     SigninManagerBase* signin_manager,
     OAuth2TokenService* token_service,
     const OAuth2TokenService::ScopeSet& scopes,
-    TokenCallback callback,
+    AccessTokenFetcher::TokenCallback callback,
     Mode mode)
-    : OAuth2TokenService::Consumer(oauth_consumer_name),
+    : oauth_consumer_name_(oauth_consumer_name),
       signin_manager_(signin_manager),
       token_service_(token_service),
       scopes_(scopes),
@@ -59,13 +59,14 @@
   // Note: We might get here even in cases where we know that there's no refresh
   // token. We're requesting an access token anyway, so that the token service
   // will generate an appropriate error code that we can return to the client.
-  DCHECK(!access_token_request_);
+  DCHECK(!access_token_fetcher_);
 
-  // TODO(843510): Consider making the request to ProfileOAuth2TokenService
-  // asynchronously once there are no direct clients of PO2TS (i.e., PO2TS is
-  // used only by this class and IdentityManager).
-  access_token_request_ = token_service_->StartRequest(
-      signin_manager_->GetAuthenticatedAccountId(), scopes_, this);
+  access_token_fetcher_ = std::make_unique<AccessTokenFetcher>(
+      signin_manager_->GetAuthenticatedAccountId(), oauth_consumer_name_,
+      token_service_, scopes_,
+      base::BindOnce(
+          &PrimaryAccountAccessTokenFetcher::OnAccessTokenFetchComplete,
+          base::Unretained(this)));
 }
 
 void PrimaryAccountAccessTokenFetcher::GoogleSigninSucceeded(
@@ -91,25 +92,10 @@
   StartAccessTokenRequest();
 }
 
-void PrimaryAccountAccessTokenFetcher::OnGetTokenSuccess(
-    const OAuth2TokenService::Request* request,
-    const std::string& access_token,
-    const base::Time& expiration_time) {
-  DCHECK_EQ(request, access_token_request_.get());
-  std::unique_ptr<OAuth2TokenService::Request> request_deleter(
-      std::move(access_token_request_));
-
-  RunCallbackAndMaybeDie(GoogleServiceAuthError::AuthErrorNone(), access_token);
-
-  // Potentially dead after the above invocation; nothing to do except return.
-}
-
-void PrimaryAccountAccessTokenFetcher::OnGetTokenFailure(
-    const OAuth2TokenService::Request* request,
-    const GoogleServiceAuthError& error) {
-  DCHECK_EQ(request, access_token_request_.get());
-  std::unique_ptr<OAuth2TokenService::Request> request_deleter(
-      std::move(access_token_request_));
+void PrimaryAccountAccessTokenFetcher::OnAccessTokenFetchComplete(
+    GoogleServiceAuthError error,
+    std::string access_token) {
+  access_token_fetcher_.reset();
 
   // There is a special case for Android that RefreshTokenIsAvailable and
   // StartRequest are called to pre-fetch the account image and name before
@@ -130,14 +116,6 @@
     return;
   }
 
-  RunCallbackAndMaybeDie(error, std::string());
-
-  // Potentially dead after the above invocation; nothing to do except return.
-}
-
-void PrimaryAccountAccessTokenFetcher::RunCallbackAndMaybeDie(
-    const GoogleServiceAuthError& error,
-    const std::string& access_token) {
   // Per the contract of this class, it is allowed for consumers to delete this
   // object from within the callback that is run below. Hence, it is not safe to
   // add any code below this call.
diff --git a/services/identity/public/cpp/primary_account_access_token_fetcher.h b/services/identity/public/cpp/primary_account_access_token_fetcher.h
index 346ee6e0..92a5395 100644
--- a/services/identity/public/cpp/primary_account_access_token_fetcher.h
+++ b/services/identity/public/cpp/primary_account_access_token_fetcher.h
@@ -14,6 +14,7 @@
 #include "components/signin/core/browser/signin_manager_base.h"
 #include "google_apis/gaia/google_service_auth_error.h"
 #include "google_apis/gaia/oauth2_token_service.h"
+#include "services/identity/public/cpp/access_token_fetcher.h"
 
 namespace identity {
 
@@ -23,19 +24,8 @@
 // transient error.
 // May only be used on the UI thread.
 class PrimaryAccountAccessTokenFetcher : public SigninManagerBase::Observer,
-                                         public OAuth2TokenService::Observer,
-                                         public OAuth2TokenService::Consumer {
+                                         public OAuth2TokenService::Observer {
  public:
-  // Callback for when a request completes (successful or not). On successful
-  // requests, |error| is NONE and |access_token| contains the obtained OAuth2
-  // access token. On failed requests, |error| contains the actual error and
-  // |access_token| is empty.
-  // NOTE: At the time that this method is invoked, it is safe for the client to
-  // destroy the PrimaryAccountAccessTokenFetcher instance that is invoking
-  // this callback.
-  using TokenCallback = base::OnceCallback<void(GoogleServiceAuthError error,
-                                                std::string access_token)>;
-
   // Specifies how this instance should behave:
   // |kImmediate|: Makes one-shot immediate request.
   // |kWaitUntilAvailable|: Waits for the primary account to be available
@@ -53,7 +43,7 @@
                                    SigninManagerBase* signin_manager,
                                    OAuth2TokenService* token_service,
                                    const OAuth2TokenService::ScopeSet& scopes,
-                                   TokenCallback callback,
+                                   AccessTokenFetcher::TokenCallback callback,
                                    Mode mode);
 
   ~PrimaryAccountAccessTokenFetcher() override;
@@ -76,35 +66,28 @@
   // request if so. Should only be called in mode |kWaitUntilAvailable|.
   void ProcessSigninStateChange();
 
-  // OAuth2TokenService::Consumer implementation.
-  void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
-                         const std::string& access_token,
-                         const base::Time& expiration_time) override;
-  void OnGetTokenFailure(const OAuth2TokenService::Request* request,
-                         const GoogleServiceAuthError& error) override;
+  // Invoked by |fetcher_| when an access token request completes.
+  void OnAccessTokenFetchComplete(GoogleServiceAuthError error,
+                                  std::string access_token);
 
-  // Invokes |callback_| with (|error|, |access_token|). Per the contract of
-  // this class, it is allowed for clients to delete this object as part of the
-  // invocation of |callback_|. Hence, this object must assume that it is dead
-  // after invoking this method and must not run any more code.
-  void RunCallbackAndMaybeDie(const GoogleServiceAuthError& error,
-                              const std::string& access_token);
-
+  std::string oauth_consumer_name_;
   SigninManagerBase* signin_manager_;
   OAuth2TokenService* token_service_;
   OAuth2TokenService::ScopeSet scopes_;
 
-  // NOTE: This callback should only be invoked from |RunCallbackAndMaybeDie|,
-  // as invoking it has the potential to destroy this object per this class's
-  // contract.
-  TokenCallback callback_;
+  // Per the contract of this class, it is allowed for clients to delete this
+  // object as part of the invocation of |callback_|. Hence, this object must
+  // assume that it is dead after invoking |callback_| and must not run any more
+  // code.
+  AccessTokenFetcher::TokenCallback callback_;
 
   ScopedObserver<SigninManagerBase, PrimaryAccountAccessTokenFetcher>
       signin_manager_observer_;
   ScopedObserver<OAuth2TokenService, PrimaryAccountAccessTokenFetcher>
       token_service_observer_;
 
-  std::unique_ptr<OAuth2TokenService::Request> access_token_request_;
+  // Internal fetcher that does the actual access token request.
+  std::unique_ptr<AccessTokenFetcher> access_token_fetcher_;
 
   // When a token request gets canceled, we want to retry once.
   bool access_token_retried_;
diff --git a/services/identity/public/cpp/primary_account_access_token_fetcher_unittest.cc b/services/identity/public/cpp/primary_account_access_token_fetcher_unittest.cc
index b71db25..35edf74 100644
--- a/services/identity/public/cpp/primary_account_access_token_fetcher_unittest.cc
+++ b/services/identity/public/cpp/primary_account_access_token_fetcher_unittest.cc
@@ -57,7 +57,7 @@
       public OAuth2TokenService::DiagnosticsObserver {
  public:
   using TestTokenCallback =
-      StrictMock<MockCallback<PrimaryAccountAccessTokenFetcher::TokenCallback>>;
+      StrictMock<MockCallback<AccessTokenFetcher::TokenCallback>>;
 
   PrimaryAccountAccessTokenFetcherTest() : signin_client_(&pref_service_) {
     AccountTrackerService::RegisterPrefs(pref_service_.registry());
@@ -88,7 +88,7 @@
   }
 
   std::unique_ptr<PrimaryAccountAccessTokenFetcher> CreateFetcher(
-      PrimaryAccountAccessTokenFetcher::TokenCallback callback,
+      AccessTokenFetcher::TokenCallback callback,
       PrimaryAccountAccessTokenFetcher::Mode mode) {
     std::set<std::string> scopes{"scope"};
     return std::make_unique<PrimaryAccountAccessTokenFetcher>(
diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom
index ef2c01d..32a303d 100644
--- a/services/network/public/mojom/network_context.mojom
+++ b/services/network/public/mojom/network_context.mojom
@@ -290,6 +290,17 @@
 
   // Cross-origin read blocking (CORB) configuration.
   bool is_corb_enabled = true;
+  // TODO(lukasza): https://crbug.com/846339: Remove the field below and instead
+  // make plugins use a separate URLoaderFactory.  The field below in practice
+  // is always set to RESOURCE_TYPE_PLUGIN_RESOURCE by the //content layer, but
+  // in the long-term we want to avoid using resource types (even as an opaque
+  // int) in //services/network.  See also the TODO comment for
+  // network::ResourceRequest::resource_type.
+  int32 corb_excluded_resource_type = -1;
+  // TODO(lukasza): https://crbug.com/846346: Replace the field below with a
+  // granular list of origins that content scripts can XHR into (based on
+  // extension manifest V3 / assumming that content scripts have a
+  // URLLoaderFactory separate from the rest of the renderer).
   string corb_excluded_initiator_scheme;
 };
 
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc
index 3ed58f465..8a010ae 100644
--- a/services/network/url_loader.cc
+++ b/services/network/url_loader.cc
@@ -609,7 +609,8 @@
                  base::Unretained(this)));
 
   // Figure out if we need to sniff (for MIME type detection or for CORB).
-  if (factory_params_->is_corb_enabled) {
+  if (factory_params_->is_corb_enabled &&
+      resource_type_ != factory_params_->corb_excluded_resource_type) {
     CrossOriginReadBlocking::LogAction(
         CrossOriginReadBlocking::Action::kResponseStarted);
 
diff --git a/services/ui/public/cpp/input_devices/BUILD.gn b/services/ui/public/cpp/input_devices/BUILD.gn
index 55e2ac4..624ea7b 100644
--- a/services/ui/public/cpp/input_devices/BUILD.gn
+++ b/services/ui/public/cpp/input_devices/BUILD.gn
@@ -66,9 +66,11 @@
       "//services/ui/public/interfaces/input_devices",
     ]
 
-    # This target is really an implementation detail of the ui service, but
-    # until Chrome is switched over to mus it needs to be visible to Chrome too.
+    # This target is really an implementation detail of the ui service, which
+    # is hosted in ash. Until Ash is switched out of process chrome needs to
+    # depend upon it too.
     visibility = [
+      "//ash:ash",
       "//chrome/browser",
       "//services/ui:lib",
     ]
diff --git a/services/ui/ws2/window_service.cc b/services/ui/ws2/window_service.cc
index befc350..caa0f7e 100644
--- a/services/ui/ws2/window_service.cc
+++ b/services/ui/ws2/window_service.cc
@@ -102,6 +102,8 @@
       &WindowService::BindInputDeviceServerRequest, base::Unretained(this)));
   registry_.AddInterface(base::BindRepeating(
       &WindowService::BindWindowTreeFactoryRequest, base::Unretained(this)));
+  registry_.AddInterface(base::BindRepeating(
+      &WindowService::BindUserActivityMonitorRequest, base::Unretained(this)));
 
   // |gpu_interface_provider_| may be null in tests.
   if (gpu_interface_provider_)
@@ -141,6 +143,12 @@
   input_device_server_.AddBinding(std::move(request));
 }
 
+void WindowService::BindUserActivityMonitorRequest(
+    ui::mojom::UserActivityMonitorRequest request) {
+  // TODO: https://crbug.com/854700.
+  NOTIMPLEMENTED_LOG_ONCE();
+}
+
 void WindowService::BindWindowTreeFactoryRequest(
     ui::mojom::WindowTreeFactoryRequest request) {
   window_tree_factory_->AddBinding(std::move(request));
diff --git a/services/ui/ws2/window_service.h b/services/ui/ws2/window_service.h
index 7a9928d..ad4ca14a 100644
--- a/services/ui/ws2/window_service.h
+++ b/services/ui/ws2/window_service.h
@@ -17,6 +17,7 @@
 #include "services/ui/input_devices/input_device_server.h"
 #include "services/ui/public/interfaces/ime/ime.mojom.h"
 #include "services/ui/public/interfaces/screen_provider.mojom.h"
+#include "services/ui/public/interfaces/user_activity_monitor.mojom.h"
 #include "services/ui/public/interfaces/window_tree.mojom.h"
 #include "services/ui/ws2/ids.h"
 #include "ui/aura/mus/property_converter.h"
@@ -84,6 +85,8 @@
 
   const std::set<WindowTree*>& window_trees() const { return window_trees_; }
 
+  service_manager::BinderRegistry* registry() { return &registry_; }
+
   // Called when a WindowServiceClient is about to be destroyed.
   void OnWillDestroyWindowTree(WindowTree* tree);
 
@@ -103,6 +106,8 @@
   void BindImeRegistrarRequest(mojom::IMERegistrarRequest request);
   void BindImeDriverRequest(mojom::IMEDriverRequest request);
   void BindInputDeviceServerRequest(mojom::InputDeviceServerRequest request);
+  void BindUserActivityMonitorRequest(
+      mojom::UserActivityMonitorRequest request);
   void BindWindowTreeFactoryRequest(
       ui::mojom::WindowTreeFactoryRequest request);
 
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index 4a28eee7..6295bc8 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -3550,6 +3550,29 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_browser_tests.filter"
+        ],
+        "name": "network_service_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 15
+        },
+        "test": "browser_tests"
+      },
+      {
+        "args": [
+          "--disable-site-isolation-trials"
+        ],
+        "name": "not_site_per_process_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 10
+        },
+        "test": "browser_tests"
+      },
+      {
+        "args": [
           "--enable-features=VizDisplayCompositor",
           "--test-launcher-filter-file=../../testing/buildbot/filters/viz.browser_tests.filter"
         ],
@@ -3603,6 +3626,36 @@
         "test": "components_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_components_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "components_browsertests"
+      },
+      {
+        "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_components_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "components_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "components_unittests"
+      },
+      {
+        "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_components_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -3622,6 +3675,29 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter"
+        ],
+        "name": "network_service_content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 2
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "args": [
+          "--site-per-process",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/site-per-process.content_browsertests.filter"
+        ],
+        "name": "site_per_process_content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "args": [
           "--enable-features=VizDisplayCompositor",
           "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_browsertests.filter"
         ],
@@ -3640,6 +3716,16 @@
       },
       {
         "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_content_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
+        "args": [
           "--enable-features=VizDisplayCompositor",
           "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_unittests.filter"
         ],
@@ -3698,6 +3784,36 @@
         "test": "extensions_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_extensions_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "extensions_browsertests"
+      },
+      {
+        "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_extensions_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "extensions_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "extensions_unittests"
+      },
+      {
+        "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_extensions_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -3801,6 +3917,27 @@
         "test": "interactive_ui_tests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_interactive_ui_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 3
+        },
+        "test": "interactive_ui_tests"
+      },
+      {
+        "args": [
+          "--disable-site-isolation-trials"
+        ],
+        "name": "not_site_per_process_interactive_ui_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "interactive_ui_tests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -3975,6 +4112,16 @@
         "test": "sync_integration_tests"
       },
       {
+        "args": [
+          "--disable-site-isolation-trials"
+        ],
+        "name": "not_site_per_process_sync_integration_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "sync_integration_tests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -3999,6 +4146,16 @@
         "test": "unit_tests"
       },
       {
+        "args": [
+          "--disable-site-isolation-trials"
+        ],
+        "name": "not_site_per_process_unit_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "unit_tests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -5181,6 +5338,29 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_browser_tests.filter"
+        ],
+        "name": "network_service_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 15
+        },
+        "test": "browser_tests"
+      },
+      {
+        "args": [
+          "--disable-site-isolation-trials"
+        ],
+        "name": "not_site_per_process_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 10
+        },
+        "test": "browser_tests"
+      },
+      {
+        "args": [
           "--enable-features=VizDisplayCompositor",
           "--test-launcher-filter-file=../../testing/buildbot/filters/viz.browser_tests.filter"
         ],
@@ -5234,6 +5414,36 @@
         "test": "components_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_components_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "components_browsertests"
+      },
+      {
+        "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_components_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "components_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "components_unittests"
+      },
+      {
+        "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_components_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -5253,6 +5463,29 @@
       },
       {
         "args": [
+          "--enable-features=NetworkService",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter"
+        ],
+        "name": "network_service_content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 2
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "args": [
+          "--site-per-process",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/site-per-process.content_browsertests.filter"
+        ],
+        "name": "site_per_process_content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "args": [
           "--enable-features=VizDisplayCompositor",
           "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_browsertests.filter"
         ],
@@ -5271,6 +5504,16 @@
       },
       {
         "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_content_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
+        "args": [
           "--enable-features=VizDisplayCompositor",
           "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_unittests.filter"
         ],
@@ -5329,6 +5572,36 @@
         "test": "extensions_browsertests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_extensions_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "extensions_browsertests"
+      },
+      {
+        "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_extensions_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "extensions_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "extensions_unittests"
+      },
+      {
+        "args": [
+          "--site-per-process"
+        ],
+        "name": "site_per_process_extensions_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -5402,6 +5675,27 @@
         "test": "interactive_ui_tests"
       },
       {
+        "args": [
+          "--enable-features=NetworkService"
+        ],
+        "name": "network_service_interactive_ui_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 3
+        },
+        "test": "interactive_ui_tests"
+      },
+      {
+        "args": [
+          "--disable-site-isolation-trials"
+        ],
+        "name": "not_site_per_process_interactive_ui_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "interactive_ui_tests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -5570,6 +5864,16 @@
         "test": "sync_integration_tests"
       },
       {
+        "args": [
+          "--disable-site-isolation-trials"
+        ],
+        "name": "not_site_per_process_sync_integration_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "sync_integration_tests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -5594,6 +5898,16 @@
         "test": "unit_tests"
       },
       {
+        "args": [
+          "--disable-site-isolation-trials"
+        ],
+        "name": "not_site_per_process_unit_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "unit_tests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
diff --git a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
index 7ce5a21..5c227426 100644
--- a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
+++ b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
@@ -404,9 +404,6 @@
 -NativeBindings/ExternallyConnectableMessagingTest.WebConnectableWithNonEmptyTlsChannelId/0
 -NativeBindings/MessagingApiTest.DifferentStoragePartitionTLSChannelID/0
 
-# https://crbug.com/846339: CORB: Don't block requests from plugins.
--OutOfProcessPPAPITest.URLLoaderTrusted
-
 # https://crbug.com/845559
 # Reporting needs to check BACKGROUND_SYNC permission before uploading reports
 # about an origin.
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 9b137ff6..77afe146 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -1681,6 +1681,9 @@
   },
   'network_service_browser_tests': {
     'remove_from': [
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
       'Win10 Tests x64 (dbg)',  # Matches browser_tests.
@@ -1688,6 +1691,9 @@
   },
   'network_service_components_browsertests': {
     'remove_from': [
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
       'Win10 Tests x64 (dbg)',  # Matches components_browsertests.
@@ -1695,6 +1701,9 @@
   },
   'network_service_content_browsertests': {
     'remove_from': [
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
       'Win10 Tests x64 (dbg)',  # flaky: https://crbug.com/852786
@@ -1702,6 +1711,9 @@
   },
   'network_service_extensions_browsertests': {
     'remove_from': [
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
       'Win10 Tests x64 (dbg)',  # Matches extensions_browsertests.
@@ -1709,6 +1721,9 @@
   },
   'network_service_interactive_ui_tests': {
     'remove_from': [
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
       # chromium.win
       'Win7 Tests (1)',  # For swarming capacity reasons.
     ],
@@ -1825,6 +1840,9 @@
       'Site Isolation Android',
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
     'modifications': {
       'Linux Tests (dbg)(1)': {
@@ -1844,18 +1862,27 @@
     'remove_from': [
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
   },
   'site_per_process_components_unittests': {
     'remove_from': [
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
   },
   'site_per_process_content_browsertests': {
     'remove_from': [
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
     'modifications': {
       # chromium.fyi
@@ -1870,30 +1897,45 @@
     'remove_from': [
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
   },
   'site_per_process_extensions_browsertests': {
     'remove_from': [
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
   },
   'site_per_process_extensions_unittests': {
     'remove_from': [
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
   },
   'not_site_per_process_interactive_ui_tests': {
     'remove_from': [
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
   },
   'not_site_per_process_sync_integration_tests': {
     'remove_from': [
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
   },
   'not_site_per_process_unit_tests': {
@@ -1902,6 +1944,9 @@
       'Site Isolation Android',
       # chromium.linux
       'Linux Tests (dbg)(1)(32)',
+      # chromium.memory
+      'Linux ASan LSan Tests (1)',  # No capacity, https://crbug.com/852442
+      'Linux TSan Tests',  # No capacity, https://crbug.com/852442
     ],
   },
   'site_per_process_webkit_layout_tests': {
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index 4ba67f2b..424e7750 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -2512,20 +2512,6 @@
     'non_mac_chromium_gtests',
   ],
 
-  'chromium_memory_linux_asan_gtests': [
-    'aura_gtests',
-    'chromium_gtests',
-    'chromium_gtests_for_devices_with_graphical_output',
-    'chromium_gtests_for_linux_and_chromeos_only',
-    'gl_gtests',
-    'linux_flavor_specific_chromium_gtests',
-    'linux_specific_chromium_gtests',
-    'non_android_chromium_gtests',
-    'non_android_and_cast_and_chromeos_chromium_gtests',
-    'non_mac_chromium_gtests',
-    'vr_platform_specific_chromium_gtests',
-  ],
-
   'chromium_win_gtests': [
     'aura_gtests',
     'chromium_gtests',
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 2c469e1..784be8e 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -2905,7 +2905,7 @@
       },
       'Linux ASan LSan Tests (1)': {
         'test_suites': {
-          'gtest_tests': 'chromium_memory_linux_asan_gtests',
+          'gtest_tests': 'chromium_linux_and_gl_gtests',
         },
         'args': [
           '--test-launcher-batch-limit=1',
@@ -2919,7 +2919,7 @@
       },
       'Linux CFI': {
         'test_suites': {
-          'gtest_tests': 'chromium_memory_linux_asan_gtests',
+          'gtest_tests': 'chromium_linux_and_gl_gtests',
         },
       },
       'Linux Chromium OS ASan LSan Tests (1)': {
@@ -2934,12 +2934,12 @@
       },
       'Linux MSan Tests': {
         'test_suites': {
-          'gtest_tests': 'chromium_memory_linux_asan_gtests',
+          'gtest_tests': 'chromium_linux_and_gl_gtests',
         },
       },
       'Linux TSan Tests': {
         'test_suites': {
-          'gtest_tests': 'chromium_memory_linux_asan_gtests',
+          'gtest_tests': 'chromium_linux_and_gl_gtests',
         },
       },
       'Mac ASan 64 Tests (1)': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index ea80c06..f3e3151 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -2345,6 +2345,24 @@
             ]
         }
     ],
+    "NativeCrxBindings": [
+        {
+            "platforms": [
+                "chromeos",
+                "linux",
+                "mac",
+                "win"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "NativeCrxBindings"
+                    ]
+                }
+            ]
+        }
+    ],
     "NetworkQualityEstimator": [
         {
             "platforms": [
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
index 3182f7b8..4100b24 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -24,8 +24,8 @@
 crbug.com/591099 fast/block/marquee-width-shrinks-to-fit-in-fixed-size-container.html [ Failure ]
 
 # Whitespace differences only
-crbug.com/854889 accessibility/canvas-fallback-content-2.html [ Failure ]
-crbug.com/854889 accessibility/css-generated-content.html [ Failure Pass ]
+crbug.com/854889 accessibility/canvas-fallback-content-2.html [ Timeout ]
+crbug.com/854889 accessibility/css-generated-content.html [ Failure ]
 crbug.com/854889 accessibility/css-styles.html [ Failure ]
 
 # Hit test failure due to vertical-rl writing mode
@@ -304,6 +304,7 @@
 crbug.com/591099 external/wpt/editing/run/justifyfull.html [ Pass ]
 crbug.com/591099 external/wpt/editing/run/justifyright.html [ Pass ]
 crbug.com/591099 external/wpt/editing/run/multitest.html [ Pass ]
+crbug.com/591099 external/wpt/geolocation-API/PositionOptions.https.html [ Pass ]
 crbug.com/591099 external/wpt/html-media-capture/capture_audio_cancel-manual.html [ Failure ]
 crbug.com/591099 external/wpt/html-media-capture/capture_image_cancel-manual.html [ Failure ]
 crbug.com/591099 external/wpt/html-media-capture/capture_video_cancel-manual.html [ Failure ]
@@ -314,7 +315,7 @@
 crbug.com/591099 external/wpt/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-img-auto.html [ Failure ]
 crbug.com/591099 external/wpt/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-img-percentage.html [ Failure ]
 crbug.com/591099 external/wpt/html/rendering/replaced-elements/svg-inline-sizing/svg-inline.html [ Failure ]
-crbug.com/591099 external/wpt/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout.html [ Failure ]
+crbug.com/591099 external/wpt/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout.html [ Failure Pass ]
 crbug.com/591099 external/wpt/html/semantics/interactive-elements/the-dialog-element/centering.html [ Crash ]
 crbug.com/591099 external/wpt/payment-handler/can-make-payment-event-constructor.https.worker.html [ Pass ]
 crbug.com/591099 external/wpt/payment-request/payment-allowed-by-feature-policy.https.sub.html [ Pass ]
@@ -422,7 +423,7 @@
 crbug.com/591099 fast/css/getComputedStyle/computed-style-percentage-top-with-position-inline.html [ Failure ]
 crbug.com/591099 fast/css/getComputedStyle/getComputedStyle-margin-auto.html [ Failure ]
 crbug.com/591099 fast/css/getComputedStyle/getComputedStyle-margin-percentage.html [ Failure ]
-crbug.com/591099 fast/css/import_with_baseurl.html [ Failure Pass ]
+crbug.com/591099 fast/css/import_with_baseurl.html [ Failure ]
 crbug.com/591099 fast/css/negative-text-indent-in-inline-block.html [ Failure ]
 crbug.com/591099 fast/css/opacity-float.html [ Pass ]
 crbug.com/591099 fast/css/outline-narrowLine.html [ Failure ]
@@ -498,25 +499,25 @@
 crbug.com/591099 fast/masking/clip-path-selection.html [ Failure ]
 crbug.com/824918 fast/multicol/break-before-first-line-in-first-child.html [ Failure ]
 crbug.com/824918 fast/multicol/nested-one-line-in-inner.html [ Failure ]
-crbug.com/591099 fast/multicol/newmulticol/hide-box-vertical-lr.html [ Failure ]
+crbug.com/850504 fast/multicol/newmulticol/hide-box-vertical-lr.html [ Failure ]
 crbug.com/591099 fast/multicol/out-of-flow/abspos-auto-position-on-line-rtl.html [ Failure ]
 crbug.com/824918 fast/multicol/span/overflow-on-multicol.html [ Failure ]
-crbug.com/591099 fast/multicol/span/vertical-lr.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/abspos-auto-position-on-line.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/column-break-with-balancing.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/column-count-with-rules.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/column-rules.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/float-avoidance.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/float-big-line.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/float-break.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/float-content-break.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/float-edge.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/float-paginate.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/nested-columns.html [ Failure ]
-crbug.com/591099 fast/multicol/vertical-lr/unsplittable-inline-block.html [ Failure ]
+crbug.com/850504 fast/multicol/span/vertical-lr.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/abspos-auto-position-on-line.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/column-break-with-balancing.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/column-count-with-rules.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/column-rules.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/float-avoidance.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/float-big-line.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/float-break.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/float-content-break.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/float-edge.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/float-paginate.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/nested-columns.html [ Failure ]
+crbug.com/850504 fast/multicol/vertical-lr/unsplittable-inline-block.html [ Failure ]
 crbug.com/591099 fast/overflow/overflow-update-transform.html [ Failure ]
 crbug.com/591099 fast/overflow/recompute-overflow-of-layout-root-container.html [ Failure ]
-crbug.com/591099 fast/pagination/modal-dialog.html [ Failure ]
+crbug.com/591099 fast/pagination/modal-dialog.html [ Failure Pass ]
 crbug.com/591099 fast/parser/001.html [ Failure ]
 crbug.com/591099 fast/parser/entities-in-html.html [ Failure ]
 crbug.com/591099 fast/parser/entities-in-xhtml.xhtml [ Failure ]
@@ -587,10 +588,10 @@
 crbug.com/591099 fullscreen/full-screen-with-flex-item.html [ Failure ]
 crbug.com/591099 hittesting/border-hittest-inlineFlowBox.html [ Failure ]
 crbug.com/591099 hittesting/inline-with-clip-path.html [ Failure ]
-crbug.com/591099 html/details_summary/details-writing-mode-align-center.html [ Failure ]
-crbug.com/591099 html/details_summary/details-writing-mode-align-left.html [ Failure ]
-crbug.com/591099 html/details_summary/details-writing-mode-align-right.html [ Failure ]
-crbug.com/591099 html/details_summary/details-writing-mode.html [ Failure ]
+crbug.com/855039 html/details_summary/details-writing-mode-align-center.html [ Failure ]
+crbug.com/855039 html/details_summary/details-writing-mode-align-left.html [ Failure ]
+crbug.com/855039 html/details_summary/details-writing-mode-align-right.html [ Failure ]
+crbug.com/855039 html/details_summary/details-writing-mode.html [ Failure ]
 crbug.com/591099 http/tests/csspaint/invalidation-background-image.html [ Timeout ]
 crbug.com/591099 http/tests/csspaint/invalidation-border-image.html [ Timeout ]
 crbug.com/591099 http/tests/csspaint/invalidation-content-image.html [ Timeout ]
@@ -602,7 +603,7 @@
 crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.js [ Failure ]
 crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-style-recalc-invalidations.js [ Failure ]
 crbug.com/591099 http/tests/images/restyle-decode-error.html [ Failure ]
-crbug.com/783102 http/tests/incremental/frame-focus-before-load.html [ Timeout ]
+crbug.com/783102 http/tests/incremental/frame-focus-before-load.html [ Pass Timeout ]
 crbug.com/591099 http/tests/incremental/slow-utf8-text.pl [ Pass Timeout ]
 crbug.com/591099 http/tests/loading/nested_bad_objects.php [ Failure ]
 crbug.com/591099 http/tests/loading/preload-picture-nested.html [ Failure ]
@@ -625,9 +626,9 @@
 crbug.com/591099 http/tests/websocket/invalid-subprotocol-characters.html [ Pass Timeout ]
 crbug.com/714962 images/color-profile-background-clip-text.html [ Failure ]
 crbug.com/591099 images/color-profile-image-filter-all.html [ Failure ]
-crbug.com/591099 inspector-protocol/accessibility/accessibility-ignoredNodes.js [ Failure ]
-crbug.com/714962 inspector-protocol/accessibility/accessibility-ignoredNodesModal.js [ Failure ]
-crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-labelledby.js [ Failure ]
+crbug.com/591099 inspector-protocol/accessibility/accessibility-ignoredNodes.js [ Failure Pass ]
+crbug.com/714962 inspector-protocol/accessibility/accessibility-ignoredNodesModal.js [ Failure Pass ]
+crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-labelledby.js [ Failure Pass ]
 crbug.com/714962 inspector-protocol/css/css-get-platform-fonts.js [ Failure ]
 crbug.com/714962 inspector-protocol/dom-snapshot/dom-snapshot-getSnapshot-viewport.js [ Failure ]
 crbug.com/591099 inspector-protocol/dom-snapshot/dom-snapshot-getSnapshot.js [ Failure ]
@@ -787,28 +788,17 @@
 crbug.com/591099 paint/invalidation/svg/scale-change-huge-geometry.html [ Failure ]
 crbug.com/591099 paint/invalidation/svg/scroll-hit-test.xhtml [ Failure ]
 crbug.com/728378 paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/cached-cell-append.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/cached-change-cell-border-color.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/cached-change-cell-border-width.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/cached-change-cell-sl-border-color.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/cached-change-col-border-width.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/cached-change-colgroup-border-width.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/cached-change-row-border-width.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/cached-change-table-border-width.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/cached-change-tbody-border-width.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/collapsed-border-cell-resize.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/collapsed-border-change-rowspan.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/composited-table-row.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/repaint-table-row-in-composited-document.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/replace-col.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/resize-table-repaint-percent-size-cell.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/resize-table-repaint-vertical-align-cell.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/resize-table-row-repaint.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/table-cell-collapsed-border.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/table-cell-move.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/table-collapsed-border.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/table-extra-bottom-grow.html [ Failure ]
-crbug.com/591099 paint/invalidation/table/table-outer-border.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/table-row.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/table-section-overflow.html [ Failure ]
 crbug.com/591099 paint/invalidation/table/table-section-repaint.html [ Failure ]
@@ -826,12 +816,12 @@
 crbug.com/591099 paint/invalidation/vertical-rl-as-paint-container.html [ Failure ]
 crbug.com/591099 paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos.html [ Failure ]
 crbug.com/591099 paint/invalidation/window-resize/window-resize-vertical-writing-mode.html [ Failure ]
-crbug.com/591099 paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers.html [ Failure ]
-crbug.com/591099 paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers.html [ Failure ]
-crbug.com/591099 paint/markers/ellipsis-mixed-text-in-ltr-flow-with-markers.html [ Failure ]
-crbug.com/591099 paint/markers/ellipsis-mixed-text-in-rtl-flow-with-markers.html [ Failure ]
-crbug.com/591099 paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers.html [ Failure ]
-crbug.com/591099 paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers.html [ Failure ]
+crbug.com/591099 paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers.html [ Failure Pass ]
+crbug.com/591099 paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers.html [ Failure Pass ]
+crbug.com/591099 paint/markers/ellipsis-mixed-text-in-ltr-flow-with-markers.html [ Failure Pass ]
+crbug.com/591099 paint/markers/ellipsis-mixed-text-in-rtl-flow-with-markers.html [ Failure Pass ]
+crbug.com/591099 paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers.html [ Failure Pass ]
+crbug.com/591099 paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers.html [ Failure Pass ]
 crbug.com/591099 paint/overflow/background-mask-should-be-recorded-full.html [ Failure ]
 crbug.com/591099 paint/pagination/pagination-change-clip-crash.html [ Failure ]
 crbug.com/714962 paint/text/text-match-highlights-big-line-height.html [ Failure ]
@@ -841,7 +831,7 @@
 crbug.com/591099 scrollbars/scrollbar-miss-mousemove-disabled.html [ Failure ]
 crbug.com/591099 shapedetection/detection-HTMLVideoElement.html [ Pass ]
 crbug.com/591099 storage/indexeddb/cursor-continue-validity.html [ Pass Timeout ]
-crbug.com/591099 storage/indexeddb/index-cursor.html [ Timeout ]
+crbug.com/591099 storage/indexeddb/index-cursor.html [ Pass Timeout ]
 crbug.com/591099 storage/indexeddb/mozilla/indexes.html [ Timeout ]
 crbug.com/591099 storage/indexeddb/mozilla/test_objectStore_openKeyCursor.html [ Timeout ]
 crbug.com/591099 storage/indexeddb/objectstore-cursor.html [ Pass ]
@@ -856,7 +846,6 @@
 crbug.com/591099 svg/in-html/sizing/svg-inline.html [ Failure ]
 crbug.com/714962 svg/text/tspan-multiple-outline.svg [ Failure ]
 crbug.com/591099 svg/transforms/text-with-pattern-inside-transformed-html.xhtml [ Failure ]
-crbug.com/591099 svg/wicd/rightsizing-grid.html [ Failure Pass ]
 crbug.com/591099 svg/zoom/page/zoom-img-preserveAspectRatio-support-1.html [ Failure ]
 crbug.com/591099 svg/zoom/page/zoom-svg-through-object-with-absolute-size-2.xhtml [ Failure ]
 crbug.com/591099 svg/zoom/page/zoom-svg-through-object-with-absolute-size.xhtml [ Failure ]
@@ -907,6 +896,7 @@
 crbug.com/591099 virtual/reporting-api/external/wpt/content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html [ Pass ]
 crbug.com/591099 virtual/scroll_customization/ [ Skip ]
 crbug.com/591099 virtual/scroll_customization/fast/events/touch/compositor-touch-hit-rects.html [ Failure ]
+crbug.com/591099 virtual/sharedarraybuffer/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.worker.html [ Pass ]
 crbug.com/591099 virtual/spv2/paint/invalidation/box/margin.html [ Failure Pass ]
 crbug.com/591099 virtual/stable/ [ Skip ]
 crbug.com/591099 virtual/threaded/ [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService b/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
index 72df7a7..08b0215 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
@@ -21,6 +21,7 @@
 # Only passes with Network Servce enabled (unfortunately this expectation still
 # allows Timeout from the top-level exctations though).
 crbug.com/800898 external/wpt/FileAPI/url/url-in-tags-revoke.window.html [ Pass ]
+crbug.com/800898 external/wpt/workers/worker-from-blob-url.window.html [ Pass ]
 
 # Flaky on non-NetworkService (disabled), consistent failing on NetworkService. Probably due to DCHECK.
 crbug.com/849670 http/tests/devtools/service-workers/service-worker-v8-cache.js [ Pass Failure ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 1375844..f09cd520 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2651,6 +2651,7 @@
 crbug.com/654477 [ Mac10.10 Mac10.11 Retina ] http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
 crbug.com/638621 [ Win7 ] http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
 
+crbug.com/855166 svg/as-background-image/svg-as-background-5.html [ Pass Failure ]
 
 crbug.com/637930 http/tests/media/video-buffered.html [ Pass Failure ]
 
@@ -2827,6 +2828,7 @@
 crbug.com/849859 external/wpt/web-animations/timing-model/animations/pausing-an-animation.html [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual.html [ Skip ]
 crbug.com/626703 external/wpt/css/css-scoping/shadow-directionality-002.tentative.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-scoping/shadow-directionality-001.tentative.html [ Failure ]
 crbug.com/626703 external/wpt/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html [ Timeout ]
@@ -4178,10 +4180,6 @@
 crbug.com/817175 compositing/overflow/clip-escaping-reverse-order-should-not-crash.html [ Failure ]
 crbug.com/817175 virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-escaping-reverse-order-should-not-crash.html [ Failure ]
 
-# These tests are intrinsically slow. Even when marked as [ Slow ], they can still time out.
-crbug.com/787971 external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.worker.html [ Pass Timeout ]
-crbug.com/787971 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.html [ Pass Timeout ]
-
 # Tests occasionaly timing out (flaky) on WebKit Win7 dbg builder
 crbug.com/757955 [ Win7 Debug ] http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.js [ Pass Timeout ]
 crbug.com/757955 [ Win7 Debug ] storage/indexeddb/mozilla/cursors.html [ Pass Timeout ]
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index e99619a..f7030ed 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -4135,6 +4135,12 @@
      {}
     ]
    ],
+   "html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual.html": [
+    [
+     "/html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual.html",
+     {}
+    ]
+   ],
    "html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-manual.html": [
     [
      "/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-manual.html",
@@ -101178,6 +101184,11 @@
      {}
     ]
    ],
+   "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker-expected.txt": [
     [
      {}
@@ -101193,6 +101204,26 @@
      {}
     ]
    ],
+   "WebCryptoAPI/derive_bits_keys/hkdf.https.any_1-1000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/hkdf.https.any_1001-2000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/hkdf.https.any_2001-3000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/hkdf.https.any_3001-last-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "WebCryptoAPI/derive_bits_keys/hkdf.https.worker-expected.txt": [
     [
      {}
@@ -101208,6 +101239,51 @@
      {}
     ]
    ],
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1-1000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1001-2000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_2001-3000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_3001-4000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_4001-5000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_5001-6000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_6001-7000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_7001-8000-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_8001-last-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker-expected.txt": [
     [
      {}
@@ -139393,6 +139469,11 @@
      {}
     ]
    ],
+   "dom/nodes/attributes-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "dom/nodes/attributes.js": [
     [
      {}
@@ -144108,16 +144189,6 @@
      {}
     ]
    ],
-   "html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-lr-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-rl-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "html/browsers/browsing-the-web/unloading-documents/.gitkeep": [
     [
      {}
@@ -144393,12 +144464,7 @@
      {}
     ]
    ],
-   "html/browsers/browsing-the-web/unloading-documents/unload/manual-001-1.html": [
-    [
-     {}
-    ]
-   ],
-   "html/browsers/browsing-the-web/unloading-documents/unload/manual-001.html": [
+   "html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual-1.html": [
     [
      {}
     ]
@@ -157223,16 +157289,6 @@
      {}
     ]
    ],
-   "infrastructure/server/order-of-metas.any-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "infrastructure/server/order-of-metas.window-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "infrastructure/server/resources/expect-global.js": [
     [
      {}
@@ -157548,6 +157604,11 @@
      {}
     ]
    ],
+   "interfaces/mediacapture-depth.idl": [
+    [
+     {}
+    ]
+   ],
    "interfaces/mediacapture-fromelement.idl": [
     [
      {}
@@ -157613,6 +157674,11 @@
      {}
     ]
    ],
+   "interfaces/presentation-api.idl": [
+    [
+     {}
+    ]
+   ],
    "interfaces/proximity.idl": [
     [
      {}
@@ -157663,6 +157729,11 @@
      {}
     ]
    ],
+   "interfaces/shape-detection-api.idl": [
+    [
+     {}
+    ]
+   ],
    "interfaces/storage.idl": [
     [
      {}
@@ -158428,6 +158499,11 @@
      {}
     ]
    ],
+   "mediacapture-depth/META.yml": [
+    [
+     {}
+    ]
+   ],
    "mediacapture-fromelement/META.yml": [
     [
      {}
@@ -166643,6 +166719,21 @@
      {}
     ]
    ],
+   "shape-detection/META.yml": [
+    [
+     {}
+    ]
+   ],
+   "shape-detection/idlharness.any-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "shape-detection/idlharness.any.worker-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "speech-api/META.yml": [
     [
      {}
@@ -181190,123 +181281,165 @@
      }
     ]
    ],
-   "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.js": [
+   "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js": [
     [
-     "/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.html",
+     "/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.html",
+     {}
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.worker.html",
      {}
     ]
    ],
-   "WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.js": [
+   "WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js": [
     [
-     "/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.html",
+     "/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.html",
+     {}
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.worker.html",
      {}
     ]
    ],
-   "WebCryptoAPI/derive_bits_keys/hkdf.https.worker.js": [
+   "WebCryptoAPI/derive_bits_keys/hkdf.https.any.js": [
     [
-     "/WebCryptoAPI/derive_bits_keys/hkdf.https.worker.html",
+     "/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1-1000",
+     {}
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1001-2000",
+     {}
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?2001-3000",
+     {}
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?3001-last",
+     {}
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?1-1000",
+     {}
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?1001-2000",
+     {}
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?2001-3000",
+     {}
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?3001-last",
      {}
     ]
    ],
-   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.js": [
+   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js": [
     [
-     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?1-1000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?1001-2000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?2001-3000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_hkdf.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_hkdf.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?3001-4000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?4001-5000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?5001-6000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?6001-7000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?7001-8000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?8001-last",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?1-1000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?1001-2000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?2001-3000",
      {
       "timeout": "long"
      }
-    ]
-   ],
-   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html": [
+    ],
     [
-     "/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html",
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?3001-4000",
+     {
+      "timeout": "long"
+     }
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?4001-5000",
+     {
+      "timeout": "long"
+     }
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?5001-6000",
+     {
+      "timeout": "long"
+     }
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?6001-7000",
+     {
+      "timeout": "long"
+     }
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?7001-8000",
+     {
+      "timeout": "long"
+     }
+    ],
+    [
+     "/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?8001-last",
      {
       "timeout": "long"
      }
@@ -196244,6 +196377,12 @@
      {}
     ]
    ],
+   "css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html": [
+    [
+     "/css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html",
+     {}
+    ]
+   ],
    "css/cssom-view/scrollWidthHeight.xht": [
     [
      "/css/cssom-view/scrollWidthHeight.xht",
@@ -198151,11 +198290,15 @@
    "dom/interfaces.html": [
     [
      "/dom/interfaces.html?exclude=Node",
-     {}
+     {
+      "timeout": "long"
+     }
     ],
     [
      "/dom/interfaces.html?include=Node",
-     {}
+     {
+      "timeout": "long"
+     }
     ]
    ],
    "dom/lists/DOMTokenList-Iterable.html": [
@@ -214404,10 +214547,60 @@
    ],
    "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html": [
     [
-     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html",
-     {
-      "timeout": "long"
-     }
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?1-10",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?101-110",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?11-20",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?111-120",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?121-130",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?131-last",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?21-30",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?31-40",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?41-50",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?51-60",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?61-70",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?71-80",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?81-90",
+     {}
+    ],
+    [
+     "/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html?91-100",
+     {}
     ]
    ],
    "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/remove-from-document.html": [
@@ -223604,6 +223797,12 @@
      {}
     ]
    ],
+   "mediacapture-depth/idlharness.html": [
+    [
+     "/mediacapture-depth/idlharness.html",
+     {}
+    ]
+   ],
    "mediacapture-fromelement/capture.html": [
     [
      "/mediacapture-fromelement/capture.html",
@@ -247534,6 +247733,16 @@
      {}
     ]
    ],
+   "shape-detection/idlharness.any.js": [
+    [
+     "/shape-detection/idlharness.any.html",
+     {}
+    ],
+    [
+     "/shape-detection/idlharness.any.worker.html",
+     {}
+    ]
+   ],
    "speech-api/SpeechSynthesis-speak-ownership.html": [
     [
      "/speech-api/SpeechSynthesis-speak-ownership.html",
@@ -250742,12 +250951,6 @@
      {}
     ]
    ],
-   "webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html": [
-    [
-     "/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html",
-     {}
-    ]
-   ],
    "webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html": [
     [
      "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html",
@@ -250772,12 +250975,6 @@
      {}
     ]
    ],
-   "webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html": [
-    [
-     "/webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html",
-     {}
-    ]
-   ],
    "webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules.html": [
     [
      "/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules.html",
@@ -250904,12 +251101,6 @@
      {}
     ]
    ],
-   "webaudio/the-audio-api/the-audioparam-interface/idl-test.html": [
-    [
-     "/webaudio/the-audio-api/the-audioparam-interface/idl-test.html",
-     {}
-    ]
-   ],
    "webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html": [
     [
      "/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html",
@@ -253765,15 +253956,11 @@
    "websockets/constructor/014.html": [
     [
      "/websockets/constructor/014.html",
-     {
-      "timeout": "long"
-     }
+     {}
     ],
     [
      "/websockets/constructor/014.html?wss",
-     {
-      "timeout": "long"
-     }
+     {}
     ]
    ],
    "websockets/constructor/016.html": [
@@ -270385,52 +270572,108 @@
    "de7dd2ee8b4d23b5170349e7c2dc94862e5faed2",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker-expected.txt": [
+  "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any-expected.txt": [
    "c19d4651fdca1ddb398043d7ed3ca9e690d0166a",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.js": [
-   "b5b14e550d5dbff9f63666b42bd46e29b5be8709",
+  "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js": [
+   "864eecab9e1a79b80118c0c3f678b8f38d204bed",
    "testharness"
   ],
+  "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker-expected.txt": [
+   "c19d4651fdca1ddb398043d7ed3ca9e690d0166a",
+   "support"
+  ],
   "WebCryptoAPI/derive_bits_keys/ecdh_bits.js": [
    "becf212639e53f6cae83994feeb2a2d0ecb6feeb",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.js": [
-   "25bcc549b62ecc99df4e2af27753e311c3910e70",
+  "WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js": [
+   "e18057a3c9fda70c897950a6e6eb4251efef55c4",
    "testharness"
   ],
   "WebCryptoAPI/derive_bits_keys/ecdh_keys.js": [
    "c030ebe3984538c73ee1fca4ec378e4356bccbf4",
    "support"
   ],
+  "WebCryptoAPI/derive_bits_keys/hkdf.https.any.js": [
+   "ab1a44ea74a479a73c122537505b8655479e515f",
+   "testharness"
+  ],
+  "WebCryptoAPI/derive_bits_keys/hkdf.https.any_1-1000-expected.txt": [
+   "e7f9d1bc0480eb9851e83269abc97eca5be3ebd8",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/hkdf.https.any_1001-2000-expected.txt": [
+   "b5b38b8cf14ed4cf89c3c3dee0aaec8da969d9ee",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/hkdf.https.any_2001-3000-expected.txt": [
+   "e41e73ac16e36bb57acf55509b07cb4ff00e6df7",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/hkdf.https.any_3001-last-expected.txt": [
+   "fe8ed31ec316ed4340a6cf21ca619d1e5eeec6b6",
+   "support"
+  ],
   "WebCryptoAPI/derive_bits_keys/hkdf.https.worker-expected.txt": [
    "8dbe958d26a3e9a614d66f44634d540180103661",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/hkdf.https.worker.js": [
-   "0ea6fb5e51a60e8a521da7a2853fde9a4ff2af8f",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/hkdf.js": [
-   "7c50dfe98c29038cc758cf90d56cf4b328d1fc37",
+   "0b64461f3017121398eee84980565ffdec11da78",
    "support"
   ],
   "WebCryptoAPI/derive_bits_keys/hkdf_vectors.js": [
    "766a7184da406918e9dc6718125975a59d3d5d36",
    "support"
   ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js": [
+   "1570f67d4d803e12d1711e861e0ea1b37e76db45",
+   "testharness"
+  ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1-1000-expected.txt": [
+   "5e5949051fbe28adbc2ebd9d80dbd5a194384b9b",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1001-2000-expected.txt": [
+   "96e7cb0391bdb493734d7a972bcd8988156222fe",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_2001-3000-expected.txt": [
+   "b0c2aaa6f80ef5a7b4672200573b3af4c83aceee",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_3001-4000-expected.txt": [
+   "d25f674dddaeb63cf390003f30e9e97ab6cdaf76",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_4001-5000-expected.txt": [
+   "795b390502fa7c58b0c3f6ae29a9123cde6874b1",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_5001-6000-expected.txt": [
+   "90462b97051493fccea3cc2faec338e3b90de7e7",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_6001-7000-expected.txt": [
+   "87b133429e1b9067162d9ac4966128d254f4ea0d",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_7001-8000-expected.txt": [
+   "95e470f9c88da87c526b2a1b92d2adbd2835ce69",
+   "support"
+  ],
+  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_8001-last-expected.txt": [
+   "8e95c678c8af0fe0be3242ea8dee85588c9c1f0c",
+   "support"
+  ],
   "WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker-expected.txt": [
    "bbc9e6ea6464cb50fdd14aee00e460e831f1c507",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.js": [
-   "1149c335951baa52b7d1ad3192292fb46176d491",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/pbkdf2.js": [
-   "dfd8eea5707720186820549837c8a1a319a8ecc4",
+   "d91520b4b779d5a8ecd55398a23a1e0fdbe1a9b3",
    "support"
   ],
   "WebCryptoAPI/derive_bits_keys/pbkdf2_vectors.js": [
@@ -270441,94 +270684,46 @@
    "c19d4651fdca1ddb398043d7ed3ca9e690d0166a",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html": [
-   "eb82990143fa33de7b62cdacd2db566512d74d44",
-   "testharness"
-  ],
-  "WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html": [
-   "d896626491b4f710970b28d30eb89604034fb8c4",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_hkdf.https-expected.txt": [
    "8dbe958d26a3e9a614d66f44634d540180103661",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_hkdf.https.html": [
-   "6d0def388fed4db1606d03f2cbfd59020bd00c56",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https-expected.txt": [
    "7c16f4d5caffe49c230c2512c1ed47151ae4f98d",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html": [
-   "48b0c6ac60cc130a5bc109fd43b5b1da74bad6da",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https-expected.txt": [
    "0ef5256cb45bd685b732b6b21b9245afdccc96ee",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html": [
-   "9f28363c1c182c354d688a44249abe3f6c6e9ff5",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https-expected.txt": [
    "f9a5f0b657b3c2b965d3061b49819f87327b14fd",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html": [
-   "2a6b28ee191cc62575872c19a21b402f668cd0d5",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https-expected.txt": [
    "e69fd214b1d28f8035a8aab2039a36e7352d1930",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html": [
-   "e1d654a4ccefef12b57ef32388debf5df170e938",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https-expected.txt": [
    "33c1c018a24773f279c485349dadb5d15caef69a",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html": [
-   "2e3e354fe0b4b96d2429bd6e3b5b702a327d9e84",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https-expected.txt": [
    "55213f66a4dcd6b345ca5d8a390f075441bcc569",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html": [
-   "b53dd1eb6d350d6546e71e77d829eb3da4fc4c68",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https-expected.txt": [
    "b980153eba192a916120dbe1295e0c54a0245fe9",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html": [
-   "d36de62c712d53d29aa8cc6995851493d814654f",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https-expected.txt": [
    "dcda23d6d892e297e4b88dd8df027f5421659a33",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html": [
-   "518afb29e8f859a793e0e39317c6516aae99fb67",
-   "testharness"
-  ],
   "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https-expected.txt": [
    "9c890a1582edfad7c0777296bc7370ef0fdd0dc7",
    "support"
   ],
-  "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html": [
-   "5e776aa3f202bb72a328947983b020f03ba6ec4d",
-   "testharness"
-  ],
   "WebCryptoAPI/digest/digest.https.worker.js": [
    "a9a6b7a15bf0b795729190a94bdda6ed1ddc013d",
    "testharness"
@@ -270630,7 +270825,7 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js": [
-   "43e43b7fbf6441d1fcd6ddf46c30f0621b1edba7",
+   "8dcb56464b85de7d54bb3bc1c06d6bda630cf4a0",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker-expected.txt": [
@@ -270646,7 +270841,7 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js": [
-   "2c884e027696683642ea9a554fbb458c80d7c250",
+   "135d0fdf4e8ca3c44af7af73919ea8ffe7129c5b",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker-expected.txt": [
@@ -270662,7 +270857,7 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js": [
-   "a04245d270369f78f8043d0e18e78813d023143c",
+   "3d5858db114e2bcd58c7a5f2fd60c47643433007",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker-expected.txt": [
@@ -270678,7 +270873,7 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/failures_AES-KW.https.any.js": [
-   "926c029def9b80da51ebff1185692f24d403cecf",
+   "c1cba74aeccf6d59d9b1d8aa84cacf2352d1aa93",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker-expected.txt": [
@@ -270690,27 +270885,27 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/failures_ECDH.https.any.js": [
-   "89fe37aa9252d976f76823cdf285630ddadfbfce",
+   "a4e5c1acc05e321904fda9a8ab442aa63af2fb43",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/failures_ECDSA.https.any.js": [
-   "ab6acf474fb27f7a630847ce07d6fb6a9167ad92",
+   "a2bc85c93a660752db6250b9798240de8b3d3f96",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/failures_HMAC.https.any.js": [
-   "6f00681d254f24abf00f073806a162738bcbe8e7",
+   "13e7fd5352320e6e9e2af9cf54c45e2eae5032ca",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js": [
-   "c6d7efb5ed58bb1ea96e141763e249b1ad99a6be",
+   "fb73abf86b9aaf51b032b57d1813d45256e2cbeb",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js": [
-   "dc18838f5c4f84436c892051a728de7ad83fe854",
+   "51b1195ef2c2f3084b35460c772c355515e2803c",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js": [
-   "170964b911cd3d1aacaa261de01b013ee3fd745a",
+   "eebe6f227f86a0359690c36d118fb6d516991b5b",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes.js": [
@@ -270722,7 +270917,7 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js": [
-   "49ce28516303c7525f74d29fbbe36b578e9e0d08",
+   "4f11c263cf8c1a10805dbdbf37e68441cc1524db",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker-expected.txt": [
@@ -270738,7 +270933,7 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js": [
-   "377e8f0ec969f36949c9dc08ae935063d25c08d8",
+   "7f71cabebd7c4771b0338a86f0db249275c166e6",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker-expected.txt": [
@@ -270754,7 +270949,7 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js": [
-   "a65a71f8f83b017fe9eb8fccbd8da3489ed1f9f0",
+   "b2818ac6f3bd48fc5343e11c9f3a5fb4e7e159b7",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker-expected.txt": [
@@ -270770,7 +270965,7 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/successes_AES-KW.https.any.js": [
-   "165159903403f67cc27d29f78d46369eb598811c",
+   "7fb055fd3d32f9b0f0934f0bcf6e4cc8e914c0bc",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker-expected.txt": [
@@ -270782,27 +270977,27 @@
    "support"
   ],
   "WebCryptoAPI/generateKey/successes_ECDH.https.any.js": [
-   "525b874eff610c6db8cca7f50ba0c074b8975001",
+   "e9ac12b43efef8652a12a3a7dfdaf1f6d14c31fc",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes_ECDSA.https.any.js": [
-   "2a63f8d0d12987ca2e4c41e5eb28a53741a091f5",
+   "c1e3ea8f949413099f4d5c9903d4f86ae6b9ddeb",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes_HMAC.https.any.js": [
-   "af064fd9cc422c35718d1dcf2f6c861aab7385cc",
+   "6bc1c27059fca5fd8ec0eacb5a4092affd934aa2",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js": [
-   "f82ce4307fea94a097ccdf470b766f110d876b87",
+   "c18bce1c96c0904d80ed0e8f6c6f52c422bd04cd",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js": [
-   "8ff33e42d855b7482455ebb3caab5ac311e7cbf5",
+   "e91f38538a40c448cbeaea5e3188df4a4c02870a",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js": [
-   "fbbbef333461a7845ea1b3cba2169435c7f82761",
+   "7a507269004b76a7455cb41e476f69178fed7162",
    "testharness"
   ],
   "WebCryptoAPI/generateKey/test_aes-cbc.https-expected.txt": [
@@ -338333,6 +338528,10 @@
    "7461663514681b85aaa1b2be6e2e2807c71a9e51",
    "testharness"
   ],
+  "css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html": [
+   "c630846b4220925cb92e6cfda77f8d54b09d4a05",
+   "testharness"
+  ],
   "css/cssom-view/scrollTop-display-change-ref.html": [
    "bb9079ba597cbcc27604cf8cc5556b4e6e0cda93",
    "support"
@@ -338774,11 +338973,11 @@
    "testharness"
   ],
   "css/cssom/getComputedStyle-pseudo-expected.txt": [
-   "941d196cf423c6a9ef6dfd06230817055e2e0543",
+   "05e2dcc67a8a79ba5b93e46820173dbb9d6c3aa1",
    "support"
   ],
   "css/cssom/getComputedStyle-pseudo.html": [
-   "d3ef09fb6092078562f8923879b9ece97938df47",
+   "1e5befe5a5494fef67f7c001301f0caddf1aa060",
    "testharness"
   ],
   "css/cssom/historical.html": [
@@ -345958,7 +346157,7 @@
    "support"
   ],
   "dom/interfaces.html": [
-   "46cfe52f726e7b5fdbe737470b05b34aaff2e358",
+   "de6fe70821503daa1d134113c644371feee4c7e5",
    "testharness"
   ],
   "dom/interfaces_exclude=Node-expected.txt": [
@@ -346917,8 +347116,12 @@
    "8af56db026eb164f45b6004404cdf280c5977026",
    "testharness"
   ],
+  "dom/nodes/attributes-expected.txt": [
+   "6920ceca18994c98cbb963853e4ec21de779a0ce",
+   "support"
+  ],
   "dom/nodes/attributes.html": [
-   "cddff48a942168622772069ca2b2bcf0318deed4",
+   "a39c668569ca64cddb49ea050884580fcb18aa68",
    "testharness"
   ],
   "dom/nodes/attributes.js": [
@@ -354157,18 +354360,10 @@
    "ac172eb5c05ee24b8e3059cbc68851729f1be943",
    "testharness"
   ],
-  "html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-lr-expected.txt": [
-   "0c0708bcd4c9db16ab198bd56b1a600908735752",
-   "support"
-  ],
   "html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-lr.html": [
    "3b90310d446c577e2dcf0b6e0bea4a13c9b08b7d",
    "testharness"
   ],
-  "html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-rl-expected.txt": [
-   "06294cba53e662f054384ee4474272afd88b882b",
-   "support"
-  ],
   "html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-rl.html": [
    "9a47642ec55caf4228728e28d37324cc9220b2bf",
    "testharness"
@@ -354466,7 +354661,7 @@
    "testharness"
   ],
   "html/browsers/browsing-the-web/unloading-documents/unload/006-1.html": [
-   "73183ec1fbbdb0f8bbf7ef0c0e2ca2d940465299",
+   "a26197e9ed1f2fc73b9b297cb1e92c21619dcbbb",
    "support"
   ],
   "html/browsers/browsing-the-web/unloading-documents/unload/006-2.html": [
@@ -354501,13 +354696,13 @@
    "97d775ccd5a50fe561100794417c7c7eb97939e7",
    "testharness"
   ],
-  "html/browsers/browsing-the-web/unloading-documents/unload/manual-001-1.html": [
+  "html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual-1.html": [
    "ff9aaf41f253012553868cc998e0b97ab6fe2970",
    "support"
   ],
-  "html/browsers/browsing-the-web/unloading-documents/unload/manual-001.html": [
-   "2a96f64ae79f1f1089ead1d0bae17b733540a8c5",
-   "support"
+  "html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual.html": [
+   "8e6158718a67cef7e4912dda69d1287b2171654f",
+   "manual"
   ],
   "html/browsers/history/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
@@ -364034,7 +364229,7 @@
    "testharness"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html": [
-   "80aa762a69d2ed8a702ad42fc38a3b9ef58c8be1",
+   "aec3c5c7f676e0bb3a94d945587ef51c8ac35078",
    "testharness"
   ],
   "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/remove-from-document.html": [
@@ -373641,18 +373836,10 @@
    "7c39501c8a2ddcd9ee0405af1df84e259205ab04",
    "reftest"
   ],
-  "infrastructure/server/order-of-metas.any-expected.txt": [
-   "eead08f85859baaee78a90ef2b059a1d98dc2a96",
-   "support"
-  ],
   "infrastructure/server/order-of-metas.any.js": [
    "13cf63163e3aad97c71982929fbcc27ebf4fd5d1",
    "testharness"
   ],
-  "infrastructure/server/order-of-metas.window-expected.txt": [
-   "eead08f85859baaee78a90ef2b059a1d98dc2a96",
-   "support"
-  ],
   "infrastructure/server/order-of-metas.window.js": [
    "43c1f60e50759125c485fea1c536715b51b47444",
    "testharness"
@@ -373957,6 +374144,10 @@
    "17413896d6281553091cf2c369c29de42d450962",
    "support"
   ],
+  "interfaces/mediacapture-depth.idl": [
+   "d14de04445755e1f6bc88023d3bd85b601ed5209",
+   "support"
+  ],
   "interfaces/mediacapture-fromelement.idl": [
    "501b9ce0b557e52c122a2bb7f3be1a3e360da512",
    "support"
@@ -374009,6 +374200,10 @@
    "6d3ff2b3f8b4015f3cb282db2cd2dbb8c2e90db5",
    "support"
   ],
+  "interfaces/presentation-api.idl": [
+   "2f9d2c446e561acea02f9954f4f35f1c4dc61f2c",
+   "support"
+  ],
   "interfaces/proximity.idl": [
    "5416752c31de2d0f7a3b72941e24a0030d98599c",
    "support"
@@ -374049,6 +374244,10 @@
    "0c9862d6e00d02a0955a1eaf2ec4f237bd060ac4",
    "support"
   ],
+  "interfaces/shape-detection-api.idl": [
+   "e348a282e353caac1d0bb93e453e06031b1aca75",
+   "support"
+  ],
   "interfaces/storage.idl": [
    "a1ad440d60e04902f494ecaced1fceb8560adc5c",
    "support"
@@ -375141,6 +375340,14 @@
    "c3f2ab0ca87e837a5ffc6dfc1e757e1357c49d1f",
    "support"
   ],
+  "mediacapture-depth/META.yml": [
+   "13b336e701676dce031336c06116fef63930ad45",
+   "support"
+  ],
+  "mediacapture-depth/idlharness.html": [
+   "72bf5f2a0d73828f2b0e60046b978e0a9490e7a5",
+   "testharness"
+  ],
   "mediacapture-fromelement/META.yml": [
    "40a8ff568344b2cb7809312603fd2fe82f123719",
    "support"
@@ -384378,7 +384585,7 @@
    "testharness"
   ],
   "payment-request/payment-request-canmakepayment-method-manual.https.html": [
-   "9d0df3f544b0183130d4d3e59e457edbb6f5202f",
+   "20edcf57236087023cf7379cec4a4ab3b57f3155",
    "manual"
   ],
   "payment-request/payment-request-canmakepayment-method.https-expected.txt": [
@@ -385366,7 +385573,7 @@
    "testharness"
   ],
   "presentation-api/controlling-ua/idlharness.https.html": [
-   "2c04fce046431ca8e3ddb3eee5428ac99e4c217a",
+   "75dca68e8398772129feacc28bfe574e9c8d402b",
    "testharness"
   ],
   "presentation-api/controlling-ua/reconnectToPresentation_notfound_error.https.html": [
@@ -385494,7 +385701,7 @@
    "support"
   ],
   "presentation-api/receiving-ua/support/idlharness_receiving-ua.html": [
-   "7d2a67a137e77029179039e34a86a9abe81189d7",
+   "b6845e5a67df93b3631ab2c45cf920ae85613981",
    "support"
   ],
   "presentation-api/receiving-ua/support/iframe.html": [
@@ -398457,6 +398664,22 @@
    "bc28599cea839c13daf4739168f8c1ea42526050",
    "testharness"
   ],
+  "shape-detection/META.yml": [
+   "35f8c1f9b9d7489b1dc57b71c1a9d6a99f9129b7",
+   "support"
+  ],
+  "shape-detection/idlharness.any-expected.txt": [
+   "347fbdbd7cbf07ac1076752355dbf3433e7e941d",
+   "support"
+  ],
+  "shape-detection/idlharness.any.js": [
+   "da1729edd2fbb4552c67029572940b8d5ad71b16",
+   "testharness"
+  ],
+  "shape-detection/idlharness.any.worker-expected.txt": [
+   "fbb1b4648018e9901ddfd40aa2d0b04609d4788c",
+   "support"
+  ],
   "speech-api/META.yml": [
    "52d79b2a35757493915c591ff306a108a5e77121",
    "support"
@@ -402761,10 +402984,6 @@
    "34d9e7ccb333ce23c838126a4e84918321292d33",
    "testharness"
   ],
-  "webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html": [
-   "480a05cc2a25f50ccc61771f6b149c7090432d07",
-   "testharness"
-  ],
   "webaudio/the-audio-api/the-audiobuffersourcenode-interface/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
@@ -402793,10 +403012,6 @@
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
-  "webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html": [
-   "e8b85f97399b430c338e75a90b32d07277d6ef0c",
-   "testharness"
-  ],
   "webaudio/the-audio-api/the-audiolistener-interface/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
@@ -402897,10 +403112,6 @@
    "a41ff42bd211f135a9942e885f2134fa41a1e1d7",
    "testharness"
   ],
-  "webaudio/the-audio-api/the-audioparam-interface/idl-test.html": [
-   "871ff25a150ee9a893d4580b13acd79ca3dd5a4d",
-   "testharness"
-  ],
   "webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html": [
    "cfe68d4899ed1582d2827f6dea5cf8960ac4e192",
    "testharness"
@@ -405210,7 +405421,7 @@
    "testharness"
   ],
   "websockets/constructor/014.html": [
-   "13b62c474c2b1f2604cc1f65a13c3ae6705200df",
+   "c6edfd33ef3f0e6644d344ed24387ce610992723",
    "testharness"
   ],
   "websockets/constructor/016.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any-expected.txt
new file mode 100644
index 0000000..8330c21d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any-expected.txt
@@ -0,0 +1,45 @@
+This is a testharness.js-based test.
+PASS P-521 good parameters
+PASS P-521 mixed case parameters
+FAIL P-521 with null length assert_true: Derived correct bits expected true got false
+PASS P-521 short result
+PASS P-521 non-multiple of 8 bits
+PASS P-521 missing public curve
+PASS P-521 public property of algorithm is not a CryptoKey
+PASS P-521 mismatched curves
+PASS P-521 public property of algorithm is not an ECDSA public key
+PASS P-521 no deriveBits usage for base key
+PASS P-521 base key is not a private key
+PASS P-521 public property value is a private key
+PASS P-521 public property value is a secret key
+PASS P-521 asking for too many bits
+PASS P-256 good parameters
+PASS P-256 mixed case parameters
+FAIL P-256 with null length assert_true: Derived correct bits expected true got false
+PASS P-256 short result
+PASS P-256 non-multiple of 8 bits
+PASS P-256 missing public curve
+PASS P-256 public property of algorithm is not a CryptoKey
+PASS P-256 mismatched curves
+PASS P-256 public property of algorithm is not an ECDSA public key
+PASS P-256 no deriveBits usage for base key
+PASS P-256 base key is not a private key
+PASS P-256 public property value is a private key
+PASS P-256 public property value is a secret key
+PASS P-256 asking for too many bits
+PASS P-384 good parameters
+PASS P-384 mixed case parameters
+FAIL P-384 with null length assert_true: Derived correct bits expected true got false
+PASS P-384 short result
+PASS P-384 non-multiple of 8 bits
+PASS P-384 missing public curve
+PASS P-384 public property of algorithm is not a CryptoKey
+PASS P-384 mismatched curves
+PASS P-384 public property of algorithm is not an ECDSA public key
+PASS P-384 no deriveBits usage for base key
+PASS P-384 base key is not a private key
+PASS P-384 public property value is a private key
+PASS P-384 public property value is a secret key
+PASS P-384 asking for too many bits
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js
new file mode 100644
index 0000000..c692490
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js
@@ -0,0 +1,3 @@
+// META: title=WebCryptoAPI: deriveBits() Using ECDH
+// META: script=ecdh_bits.js
+run_test();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.js
deleted file mode 100644
index 8ff0ac30..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.js
+++ /dev/null
@@ -1,4 +0,0 @@
-importScripts("/resources/testharness.js");
-importScripts("ecdh_bits.js");
-
-run_test();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js
new file mode 100644
index 0000000..b212b92
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js
@@ -0,0 +1,3 @@
+// META: title=WebCryptoAPI: deriveKey() Using ECDH
+// META: script=ecdh_keys.js
+run_test();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.js
deleted file mode 100644
index 488d6021..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.js
+++ /dev/null
@@ -1,4 +0,0 @@
-importScripts("/resources/testharness.js");
-importScripts("ecdh_keys.js");
-
-run_test();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js
new file mode 100644
index 0000000..d0d545a7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js
@@ -0,0 +1,9 @@
+// META: title=WebCryptoAPI: deriveBits() and deriveKey() Using HKDF
+// META: variant=?1-1000
+// META: variant=?1001-2000
+// META: variant=?2001-3000
+// META: variant=?3001-last
+// META: script=/common/subset-tests.js
+// META: script=hkdf_vectors.js
+// META: script=hkdf.js
+run_test();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_1-1000-expected.txt
new file mode 100644
index 0000000..124cfdd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_1-1000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS short derivedKey, normal salt, SHA-384, with normal info
+PASS short derivedKey, normal salt, SHA-384, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-384, with normal info with missing salt
+PASS short derivedKey, normal salt, SHA-384, with normal info with missing info
+FAIL short derivedKey, normal salt, SHA-384, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, normal salt, SHA-384, with normal info with non-multiple of 8 length
+PASS short derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS short derivedKey, normal salt, SHA-384, with normal info with missing deriveBits usage
+PASS short derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-384, with empty info
+PASS short derivedKey, normal salt, SHA-384, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-384, with empty info with missing salt
+PASS short derivedKey, normal salt, SHA-384, with empty info with missing info
+FAIL short derivedKey, normal salt, SHA-384, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, normal salt, SHA-384, with empty info with non-multiple of 8 length
+PASS short derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS short derivedKey, normal salt, SHA-384, with empty info with missing deriveBits usage
+PASS short derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-512, with normal info
+PASS short derivedKey, normal salt, SHA-512, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-512, with normal info with missing salt
+PASS short derivedKey, normal salt, SHA-512, with normal info with missing info
+FAIL short derivedKey, normal salt, SHA-512, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, normal salt, SHA-512, with normal info with non-multiple of 8 length
+PASS short derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS short derivedKey, normal salt, SHA-512, with normal info with missing deriveBits usage
+PASS short derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-512, with empty info
+PASS short derivedKey, normal salt, SHA-512, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-512, with empty info with missing salt
+PASS short derivedKey, normal salt, SHA-512, with empty info with missing info
+FAIL short derivedKey, normal salt, SHA-512, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, normal salt, SHA-512, with empty info with non-multiple of 8 length
+PASS short derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS short derivedKey, normal salt, SHA-512, with empty info with missing deriveBits usage
+PASS short derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-1, with normal info
+PASS short derivedKey, normal salt, SHA-1, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-1, with normal info with missing salt
+PASS short derivedKey, normal salt, SHA-1, with normal info with missing info
+FAIL short derivedKey, normal salt, SHA-1, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, normal salt, SHA-1, with normal info with non-multiple of 8 length
+PASS short derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS short derivedKey, normal salt, SHA-1, with normal info with missing deriveBits usage
+PASS short derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-1, with empty info
+PASS short derivedKey, normal salt, SHA-1, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-1, with empty info with missing salt
+PASS short derivedKey, normal salt, SHA-1, with empty info with missing info
+FAIL short derivedKey, normal salt, SHA-1, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, normal salt, SHA-1, with empty info with non-multiple of 8 length
+PASS short derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS short derivedKey, normal salt, SHA-1, with empty info with missing deriveBits usage
+PASS short derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-256, with normal info
+PASS short derivedKey, normal salt, SHA-256, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-256, with normal info with missing salt
+PASS short derivedKey, normal salt, SHA-256, with normal info with missing info
+FAIL short derivedKey, normal salt, SHA-256, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, normal salt, SHA-256, with normal info with non-multiple of 8 length
+PASS short derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS short derivedKey, normal salt, SHA-256, with normal info with missing deriveBits usage
+PASS short derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-256, with empty info
+PASS short derivedKey, normal salt, SHA-256, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS short derivedKey, normal salt, SHA-256, with empty info with missing salt
+PASS short derivedKey, normal salt, SHA-256, with empty info with missing info
+FAIL short derivedKey, normal salt, SHA-256, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, normal salt, SHA-256, with empty info with non-multiple of 8 length
+PASS short derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS short derivedKey, normal salt, SHA-256, with empty info with missing deriveBits usage
+PASS short derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS short derivedKey, normal salt, PBKDF2, with normal info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, PBKDF2, with normal info
+PASS short derivedKey, normal salt, PBKDF2, with empty info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, normal salt, PBKDF2, with empty info
+PASS short derivedKey, empty salt, SHA-384, with normal info
+PASS short derivedKey, empty salt, SHA-384, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-384, with normal info with missing salt
+PASS short derivedKey, empty salt, SHA-384, with normal info with missing info
+FAIL short derivedKey, empty salt, SHA-384, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, empty salt, SHA-384, with normal info with non-multiple of 8 length
+PASS short derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS short derivedKey, empty salt, SHA-384, with normal info with missing deriveBits usage
+PASS short derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-384, with empty info
+PASS short derivedKey, empty salt, SHA-384, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-384, with empty info with missing salt
+PASS short derivedKey, empty salt, SHA-384, with empty info with missing info
+FAIL short derivedKey, empty salt, SHA-384, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, empty salt, SHA-384, with empty info with non-multiple of 8 length
+PASS short derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS short derivedKey, empty salt, SHA-384, with empty info with missing deriveBits usage
+PASS short derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-512, with normal info
+PASS short derivedKey, empty salt, SHA-512, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-512, with normal info with missing salt
+PASS short derivedKey, empty salt, SHA-512, with normal info with missing info
+FAIL short derivedKey, empty salt, SHA-512, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, empty salt, SHA-512, with normal info with non-multiple of 8 length
+PASS short derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS short derivedKey, empty salt, SHA-512, with normal info with missing deriveBits usage
+PASS short derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-512, with empty info
+PASS short derivedKey, empty salt, SHA-512, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-512, with empty info with missing salt
+PASS short derivedKey, empty salt, SHA-512, with empty info with missing info
+FAIL short derivedKey, empty salt, SHA-512, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, empty salt, SHA-512, with empty info with non-multiple of 8 length
+PASS short derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS short derivedKey, empty salt, SHA-512, with empty info with missing deriveBits usage
+PASS short derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-1, with normal info
+PASS short derivedKey, empty salt, SHA-1, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-1, with normal info with missing salt
+PASS short derivedKey, empty salt, SHA-1, with normal info with missing info
+FAIL short derivedKey, empty salt, SHA-1, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, empty salt, SHA-1, with normal info with non-multiple of 8 length
+PASS short derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS short derivedKey, empty salt, SHA-1, with normal info with missing deriveBits usage
+PASS short derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-1, with empty info
+PASS short derivedKey, empty salt, SHA-1, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_1001-2000-expected.txt
new file mode 100644
index 0000000..57c54c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_1001-2000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-1, with empty info with missing salt
+PASS short derivedKey, empty salt, SHA-1, with empty info with missing info
+FAIL short derivedKey, empty salt, SHA-1, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, empty salt, SHA-1, with empty info with non-multiple of 8 length
+PASS short derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS short derivedKey, empty salt, SHA-1, with empty info with missing deriveBits usage
+PASS short derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-256, with normal info
+PASS short derivedKey, empty salt, SHA-256, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-256, with normal info with missing salt
+PASS short derivedKey, empty salt, SHA-256, with normal info with missing info
+FAIL short derivedKey, empty salt, SHA-256, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, empty salt, SHA-256, with normal info with non-multiple of 8 length
+PASS short derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS short derivedKey, empty salt, SHA-256, with normal info with missing deriveBits usage
+PASS short derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-256, with empty info
+PASS short derivedKey, empty salt, SHA-256, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS short derivedKey, empty salt, SHA-256, with empty info with missing salt
+PASS short derivedKey, empty salt, SHA-256, with empty info with missing info
+FAIL short derivedKey, empty salt, SHA-256, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS short derivedKey, empty salt, SHA-256, with empty info with non-multiple of 8 length
+PASS short derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS short derivedKey, empty salt, SHA-256, with empty info with missing deriveBits usage
+PASS short derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS short derivedKey, empty salt, PBKDF2, with normal info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, PBKDF2, with normal info
+PASS short derivedKey, empty salt, PBKDF2, with empty info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 192  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 192  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 192  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 128  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 192  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 256  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short derivedKey, empty salt, PBKDF2, with empty info
+PASS long derivedKey, normal salt, SHA-384, with normal info
+PASS long derivedKey, normal salt, SHA-384, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-384, with normal info with missing salt
+PASS long derivedKey, normal salt, SHA-384, with normal info with missing info
+FAIL long derivedKey, normal salt, SHA-384, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, normal salt, SHA-384, with normal info with non-multiple of 8 length
+PASS long derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS long derivedKey, normal salt, SHA-384, with normal info with missing deriveBits usage
+PASS long derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-384, with empty info
+PASS long derivedKey, normal salt, SHA-384, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-384, with empty info with missing salt
+PASS long derivedKey, normal salt, SHA-384, with empty info with missing info
+FAIL long derivedKey, normal salt, SHA-384, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, normal salt, SHA-384, with empty info with non-multiple of 8 length
+PASS long derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS long derivedKey, normal salt, SHA-384, with empty info with missing deriveBits usage
+PASS long derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-512, with normal info
+PASS long derivedKey, normal salt, SHA-512, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-512, with normal info with missing salt
+PASS long derivedKey, normal salt, SHA-512, with normal info with missing info
+FAIL long derivedKey, normal salt, SHA-512, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, normal salt, SHA-512, with normal info with non-multiple of 8 length
+PASS long derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS long derivedKey, normal salt, SHA-512, with normal info with missing deriveBits usage
+PASS long derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-512, with empty info
+PASS long derivedKey, normal salt, SHA-512, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-512, with empty info with missing salt
+PASS long derivedKey, normal salt, SHA-512, with empty info with missing info
+FAIL long derivedKey, normal salt, SHA-512, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, normal salt, SHA-512, with empty info with non-multiple of 8 length
+PASS long derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS long derivedKey, normal salt, SHA-512, with empty info with missing deriveBits usage
+PASS long derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-1, with normal info
+PASS long derivedKey, normal salt, SHA-1, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-1, with normal info with missing salt
+PASS long derivedKey, normal salt, SHA-1, with normal info with missing info
+FAIL long derivedKey, normal salt, SHA-1, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, normal salt, SHA-1, with normal info with non-multiple of 8 length
+PASS long derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS long derivedKey, normal salt, SHA-1, with normal info with missing deriveBits usage
+PASS long derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-1, with empty info
+PASS long derivedKey, normal salt, SHA-1, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-1, with empty info with missing salt
+PASS long derivedKey, normal salt, SHA-1, with empty info with missing info
+FAIL long derivedKey, normal salt, SHA-1, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, normal salt, SHA-1, with empty info with non-multiple of 8 length
+PASS long derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS long derivedKey, normal salt, SHA-1, with empty info with missing deriveBits usage
+PASS long derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-256, with normal info
+PASS long derivedKey, normal salt, SHA-256, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-256, with normal info with missing salt
+PASS long derivedKey, normal salt, SHA-256, with normal info with missing info
+FAIL long derivedKey, normal salt, SHA-256, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, normal salt, SHA-256, with normal info with non-multiple of 8 length
+PASS long derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS long derivedKey, normal salt, SHA-256, with normal info with missing deriveBits usage
+PASS long derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-256, with empty info
+PASS long derivedKey, normal salt, SHA-256, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS long derivedKey, normal salt, SHA-256, with empty info with missing salt
+PASS long derivedKey, normal salt, SHA-256, with empty info with missing info
+FAIL long derivedKey, normal salt, SHA-256, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, normal salt, SHA-256, with empty info with non-multiple of 8 length
+PASS long derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS long derivedKey, normal salt, SHA-256, with empty info with missing deriveBits usage
+PASS long derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS long derivedKey, normal salt, PBKDF2, with normal info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, PBKDF2, with normal info
+PASS long derivedKey, normal salt, PBKDF2, with empty info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, normal salt, PBKDF2, with empty info
+PASS long derivedKey, empty salt, SHA-384, with normal info
+PASS long derivedKey, empty salt, SHA-384, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-384, with normal info with missing salt
+PASS long derivedKey, empty salt, SHA-384, with normal info with missing info
+FAIL long derivedKey, empty salt, SHA-384, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, empty salt, SHA-384, with normal info with non-multiple of 8 length
+PASS long derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS long derivedKey, empty salt, SHA-384, with normal info with missing deriveBits usage
+PASS long derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-384, with empty info
+PASS long derivedKey, empty salt, SHA-384, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-384, with empty info with missing salt
+PASS long derivedKey, empty salt, SHA-384, with empty info with missing info
+FAIL long derivedKey, empty salt, SHA-384, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, empty salt, SHA-384, with empty info with non-multiple of 8 length
+PASS long derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS long derivedKey, empty salt, SHA-384, with empty info with missing deriveBits usage
+PASS long derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_2001-3000-expected.txt
new file mode 100644
index 0000000..67960a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_2001-3000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS long derivedKey, empty salt, SHA-512, with normal info
+PASS long derivedKey, empty salt, SHA-512, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-512, with normal info with missing salt
+PASS long derivedKey, empty salt, SHA-512, with normal info with missing info
+FAIL long derivedKey, empty salt, SHA-512, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, empty salt, SHA-512, with normal info with non-multiple of 8 length
+PASS long derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS long derivedKey, empty salt, SHA-512, with normal info with missing deriveBits usage
+PASS long derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-512, with empty info
+PASS long derivedKey, empty salt, SHA-512, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-512, with empty info with missing salt
+PASS long derivedKey, empty salt, SHA-512, with empty info with missing info
+FAIL long derivedKey, empty salt, SHA-512, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, empty salt, SHA-512, with empty info with non-multiple of 8 length
+PASS long derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS long derivedKey, empty salt, SHA-512, with empty info with missing deriveBits usage
+PASS long derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-1, with normal info
+PASS long derivedKey, empty salt, SHA-1, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-1, with normal info with missing salt
+PASS long derivedKey, empty salt, SHA-1, with normal info with missing info
+FAIL long derivedKey, empty salt, SHA-1, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, empty salt, SHA-1, with normal info with non-multiple of 8 length
+PASS long derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS long derivedKey, empty salt, SHA-1, with normal info with missing deriveBits usage
+PASS long derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-1, with empty info
+PASS long derivedKey, empty salt, SHA-1, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-1, with empty info with missing salt
+PASS long derivedKey, empty salt, SHA-1, with empty info with missing info
+FAIL long derivedKey, empty salt, SHA-1, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, empty salt, SHA-1, with empty info with non-multiple of 8 length
+PASS long derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS long derivedKey, empty salt, SHA-1, with empty info with missing deriveBits usage
+PASS long derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-256, with normal info
+PASS long derivedKey, empty salt, SHA-256, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-256, with normal info with missing salt
+PASS long derivedKey, empty salt, SHA-256, with normal info with missing info
+FAIL long derivedKey, empty salt, SHA-256, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, empty salt, SHA-256, with normal info with non-multiple of 8 length
+PASS long derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS long derivedKey, empty salt, SHA-256, with normal info with missing deriveBits usage
+PASS long derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-256, with empty info
+PASS long derivedKey, empty salt, SHA-256, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS long derivedKey, empty salt, SHA-256, with empty info with missing salt
+PASS long derivedKey, empty salt, SHA-256, with empty info with missing info
+FAIL long derivedKey, empty salt, SHA-256, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS long derivedKey, empty salt, SHA-256, with empty info with non-multiple of 8 length
+PASS long derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS long derivedKey, empty salt, SHA-256, with empty info with missing deriveBits usage
+PASS long derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS long derivedKey, empty salt, PBKDF2, with normal info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, PBKDF2, with normal info
+PASS long derivedKey, empty salt, PBKDF2, with empty info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 192  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 192  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 192  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 128  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 192  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 256  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long derivedKey, empty salt, PBKDF2, with empty info
+PASS empty derivedKey, normal salt, SHA-384, with normal info
+PASS empty derivedKey, normal salt, SHA-384, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-384, with normal info with missing salt
+PASS empty derivedKey, normal salt, SHA-384, with normal info with missing info
+FAIL empty derivedKey, normal salt, SHA-384, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, normal salt, SHA-384, with normal info with non-multiple of 8 length
+PASS empty derivedKey, normal salt, SHA-384, with normal info with bad hash name SHA384
+PASS empty derivedKey, normal salt, SHA-384, with normal info with missing deriveBits usage
+PASS empty derivedKey, normal salt, SHA-384, with normal info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-384, with empty info
+PASS empty derivedKey, normal salt, SHA-384, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-384, with empty info with missing salt
+PASS empty derivedKey, normal salt, SHA-384, with empty info with missing info
+FAIL empty derivedKey, normal salt, SHA-384, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, normal salt, SHA-384, with empty info with non-multiple of 8 length
+PASS empty derivedKey, normal salt, SHA-384, with empty info with bad hash name SHA384
+PASS empty derivedKey, normal salt, SHA-384, with empty info with missing deriveBits usage
+PASS empty derivedKey, normal salt, SHA-384, with empty info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-512, with normal info
+PASS empty derivedKey, normal salt, SHA-512, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-512, with normal info with missing salt
+PASS empty derivedKey, normal salt, SHA-512, with normal info with missing info
+FAIL empty derivedKey, normal salt, SHA-512, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, normal salt, SHA-512, with normal info with non-multiple of 8 length
+PASS empty derivedKey, normal salt, SHA-512, with normal info with bad hash name SHA512
+PASS empty derivedKey, normal salt, SHA-512, with normal info with missing deriveBits usage
+PASS empty derivedKey, normal salt, SHA-512, with normal info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-512, with empty info
+PASS empty derivedKey, normal salt, SHA-512, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-512, with empty info with missing salt
+PASS empty derivedKey, normal salt, SHA-512, with empty info with missing info
+FAIL empty derivedKey, normal salt, SHA-512, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, normal salt, SHA-512, with empty info with non-multiple of 8 length
+PASS empty derivedKey, normal salt, SHA-512, with empty info with bad hash name SHA512
+PASS empty derivedKey, normal salt, SHA-512, with empty info with missing deriveBits usage
+PASS empty derivedKey, normal salt, SHA-512, with empty info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-1, with normal info
+PASS empty derivedKey, normal salt, SHA-1, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-1, with normal info with missing salt
+PASS empty derivedKey, normal salt, SHA-1, with normal info with missing info
+FAIL empty derivedKey, normal salt, SHA-1, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, normal salt, SHA-1, with normal info with non-multiple of 8 length
+PASS empty derivedKey, normal salt, SHA-1, with normal info with bad hash name SHA1
+PASS empty derivedKey, normal salt, SHA-1, with normal info with missing deriveBits usage
+PASS empty derivedKey, normal salt, SHA-1, with normal info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-1, with empty info
+PASS empty derivedKey, normal salt, SHA-1, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-1, with empty info with missing salt
+PASS empty derivedKey, normal salt, SHA-1, with empty info with missing info
+FAIL empty derivedKey, normal salt, SHA-1, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, normal salt, SHA-1, with empty info with non-multiple of 8 length
+PASS empty derivedKey, normal salt, SHA-1, with empty info with bad hash name SHA1
+PASS empty derivedKey, normal salt, SHA-1, with empty info with missing deriveBits usage
+PASS empty derivedKey, normal salt, SHA-1, with empty info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-256, with normal info
+PASS empty derivedKey, normal salt, SHA-256, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-256, with normal info with missing salt
+PASS empty derivedKey, normal salt, SHA-256, with normal info with missing info
+FAIL empty derivedKey, normal salt, SHA-256, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, normal salt, SHA-256, with normal info with non-multiple of 8 length
+PASS empty derivedKey, normal salt, SHA-256, with normal info with bad hash name SHA256
+PASS empty derivedKey, normal salt, SHA-256, with normal info with missing deriveBits usage
+PASS empty derivedKey, normal salt, SHA-256, with normal info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-256, with empty info
+PASS empty derivedKey, normal salt, SHA-256, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_3001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_3001-last-expected.txt
new file mode 100644
index 0000000..108a73d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any_3001-last-expected.txt
@@ -0,0 +1,711 @@
+This is a testharness.js-based test.
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, SHA-256, with empty info with missing salt
+PASS empty derivedKey, normal salt, SHA-256, with empty info with missing info
+FAIL empty derivedKey, normal salt, SHA-256, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, normal salt, SHA-256, with empty info with non-multiple of 8 length
+PASS empty derivedKey, normal salt, SHA-256, with empty info with bad hash name SHA256
+PASS empty derivedKey, normal salt, SHA-256, with empty info with missing deriveBits usage
+PASS empty derivedKey, normal salt, SHA-256, with empty info with wrong (ECDH) key
+PASS empty derivedKey, normal salt, PBKDF2, with normal info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, PBKDF2, with normal info
+PASS empty derivedKey, normal salt, PBKDF2, with empty info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, normal salt, PBKDF2, with empty info
+PASS empty derivedKey, empty salt, SHA-384, with normal info
+PASS empty derivedKey, empty salt, SHA-384, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-384, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-384, with normal info with missing salt
+PASS empty derivedKey, empty salt, SHA-384, with normal info with missing info
+FAIL empty derivedKey, empty salt, SHA-384, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, empty salt, SHA-384, with normal info with non-multiple of 8 length
+PASS empty derivedKey, empty salt, SHA-384, with normal info with bad hash name SHA384
+PASS empty derivedKey, empty salt, SHA-384, with normal info with missing deriveBits usage
+PASS empty derivedKey, empty salt, SHA-384, with normal info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-384, with empty info
+PASS empty derivedKey, empty salt, SHA-384, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-384, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-384, with empty info with missing salt
+PASS empty derivedKey, empty salt, SHA-384, with empty info with missing info
+FAIL empty derivedKey, empty salt, SHA-384, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, empty salt, SHA-384, with empty info with non-multiple of 8 length
+PASS empty derivedKey, empty salt, SHA-384, with empty info with bad hash name SHA384
+PASS empty derivedKey, empty salt, SHA-384, with empty info with missing deriveBits usage
+PASS empty derivedKey, empty salt, SHA-384, with empty info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-512, with normal info
+PASS empty derivedKey, empty salt, SHA-512, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-512, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-512, with normal info with missing salt
+PASS empty derivedKey, empty salt, SHA-512, with normal info with missing info
+FAIL empty derivedKey, empty salt, SHA-512, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, empty salt, SHA-512, with normal info with non-multiple of 8 length
+PASS empty derivedKey, empty salt, SHA-512, with normal info with bad hash name SHA512
+PASS empty derivedKey, empty salt, SHA-512, with normal info with missing deriveBits usage
+PASS empty derivedKey, empty salt, SHA-512, with normal info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-512, with empty info
+PASS empty derivedKey, empty salt, SHA-512, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-512, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-512, with empty info with missing salt
+PASS empty derivedKey, empty salt, SHA-512, with empty info with missing info
+FAIL empty derivedKey, empty salt, SHA-512, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, empty salt, SHA-512, with empty info with non-multiple of 8 length
+PASS empty derivedKey, empty salt, SHA-512, with empty info with bad hash name SHA512
+PASS empty derivedKey, empty salt, SHA-512, with empty info with missing deriveBits usage
+PASS empty derivedKey, empty salt, SHA-512, with empty info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-1, with normal info
+PASS empty derivedKey, empty salt, SHA-1, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-1, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-1, with normal info with missing salt
+PASS empty derivedKey, empty salt, SHA-1, with normal info with missing info
+FAIL empty derivedKey, empty salt, SHA-1, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, empty salt, SHA-1, with normal info with non-multiple of 8 length
+PASS empty derivedKey, empty salt, SHA-1, with normal info with bad hash name SHA1
+PASS empty derivedKey, empty salt, SHA-1, with normal info with missing deriveBits usage
+PASS empty derivedKey, empty salt, SHA-1, with normal info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-1, with empty info
+PASS empty derivedKey, empty salt, SHA-1, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-1, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-1, with empty info with missing salt
+PASS empty derivedKey, empty salt, SHA-1, with empty info with missing info
+FAIL empty derivedKey, empty salt, SHA-1, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, empty salt, SHA-1, with empty info with non-multiple of 8 length
+PASS empty derivedKey, empty salt, SHA-1, with empty info with bad hash name SHA1
+PASS empty derivedKey, empty salt, SHA-1, with empty info with missing deriveBits usage
+PASS empty derivedKey, empty salt, SHA-1, with empty info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-256, with normal info
+PASS empty derivedKey, empty salt, SHA-256, with normal info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-256, with normal info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-256, with normal info with missing salt
+PASS empty derivedKey, empty salt, SHA-256, with normal info with missing info
+FAIL empty derivedKey, empty salt, SHA-256, with normal info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, empty salt, SHA-256, with normal info with non-multiple of 8 length
+PASS empty derivedKey, empty salt, SHA-256, with normal info with bad hash name SHA256
+PASS empty derivedKey, empty salt, SHA-256, with normal info with missing deriveBits usage
+PASS empty derivedKey, empty salt, SHA-256, with normal info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-256, with empty info
+PASS empty derivedKey, empty salt, SHA-256, with empty info with 0 length
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-256, with empty info assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, SHA-256, with empty info with missing salt
+PASS empty derivedKey, empty salt, SHA-256, with empty info with missing info
+FAIL empty derivedKey, empty salt, SHA-256, with empty info with null length assert_unreached: null length should have thrown an TypeError Reached unreachable code
+PASS empty derivedKey, empty salt, SHA-256, with empty info with non-multiple of 8 length
+PASS empty derivedKey, empty salt, SHA-256, with empty info with bad hash name SHA256
+PASS empty derivedKey, empty salt, SHA-256, with empty info with missing deriveBits usage
+PASS empty derivedKey, empty salt, SHA-256, with empty info with wrong (ECDH) key
+PASS empty derivedKey, empty salt, PBKDF2, with normal info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, PBKDF2, with normal info
+PASS empty derivedKey, empty salt, PBKDF2, with empty info with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 192  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CBC length: 256  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 128  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 192  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-CTR length: 256  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 128  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 192  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-GCM length: 256  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 128  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 192  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: AES-KW length: 256  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty derivedKey, empty salt, PBKDF2, with empty info
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty derivedKey, empty salt, PBKDF2, with empty info
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.worker.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.worker.js
deleted file mode 100644
index b98b0f3..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.worker.js
+++ /dev/null
@@ -1,5 +0,0 @@
-importScripts("/resources/testharness.js");
-importScripts("hkdf_vectors.js");
-importScripts("hkdf.js");
-
-run_test();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.js
index 016740ab..9588967 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.js
@@ -36,7 +36,7 @@
                         var algorithm = {name: "HKDF", salt: salts[saltSize], info: infos[infoSize], hash: hashName};
 
                         // Check for correct deriveBits result
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], 256)
                             .then(function(derivation) {
                                 assert_true(equalBuffers(derivation, derivations[derivedKeySize][saltSize][hashName][infoSize]), "Derived correct key");
@@ -46,7 +46,7 @@
                         }, testName);
 
                         // 0 length (OperationError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], 0)
                             .then(function(derivation) {
                                 assert_equals(derivation.byteLength, 0, "Derived correctly empty key");
@@ -65,7 +65,7 @@
                             testName += " using " + derivedKeySize + " derivedKey, " + saltSize + " salt, " + hashName + ", with " + infoSize + " info";
 
                             // Test the particular key derivation.
-                            promise_test(function(test) {
+                            subsetTest(promise_test, function(test) {
                                 return subtle.deriveKey(algorithm, baseKeys[derivedKeySize], derivedKeyType.algorithm, true, derivedKeyType.usages)
                                 .then(function(key) {
                                     // Need to export the key to see that the correct bits were set.
@@ -85,7 +85,7 @@
 
                             // - illegal name for hash algorithm (NotSupportedError)
                             var badHash = hashName.substring(0, 3) + hashName.substring(4);
-                            promise_test(function(test) {
+                            subsetTest(promise_test, function(test) {
                                 var badAlgorithm = {name: "HKDF", salt: salts[saltSize], hash: badHash};
                                 return subtle.deriveKey(badAlgorithm, baseKeys[derivedKeySize], derivedKeyType.algorithm, true, derivedKeyType.usages)
                                 .then(function(key) {
@@ -96,7 +96,7 @@
                             }, testName + " with bad hash name " + badHash);
 
                             // - baseKey usages missing "deriveKey" (InvalidAccessError)
-                            promise_test(function(test) {
+                            subsetTest(promise_test, function(test) {
                                 return subtle.deriveKey(algorithm, noKey[derivedKeySize], derivedKeyType.algorithm, true, derivedKeyType.usages)
                                 .then(function(key) {
                                     assert_unreached("missing deriveKey usage should have thrown an InvalidAccessError");
@@ -106,7 +106,7 @@
                             }, testName + " with missing deriveKey usage");
 
                             // - baseKey algorithm does not match HKDF (InvalidAccessError)
-                            promise_test(function(test) {
+                            subsetTest(promise_test, function(test) {
                                 return subtle.deriveKey(algorithm, wrongKey, derivedKeyType.algorithm, true, derivedKeyType.usages)
                                 .then(function(key) {
                                     assert_unreached("wrong (ECDH) key should have thrown an InvalidAccessError");
@@ -120,7 +120,7 @@
                         // Test various error conditions for deriveBits below:
 
                         // missing salt (TypeError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits({name: "HKDF", info: infos[infoSize], hash: hashName}, baseKeys[derivedKeySize], 0)
                             .then(function(derivation) {
                                 assert_equals(derivation.byteLength, 0, "Derived even with missing salt");
@@ -130,7 +130,7 @@
                         }, testName + " with missing salt");
 
                         // missing info (TypeError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits({name: "HKDF", salt: salts[saltSize], hash: hashName}, baseKeys[derivedKeySize], 0)
                             .then(function(derivation) {
                                 assert_equals(derivation.byteLength, 0, "Derived even with missing info");
@@ -140,7 +140,7 @@
                         }, testName + " with missing info");
 
                         // length null (OperationError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], null)
                             .then(function(derivation) {
                                 assert_unreached("null length should have thrown an TypeError");
@@ -150,7 +150,7 @@
                         }, testName + " with null length");
 
                         // length not multiple of 8 (OperationError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], 44)
                             .then(function(derivation) {
                                 assert_unreached("non-multiple of 8 length should have thrown an OperationError");
@@ -161,7 +161,7 @@
 
                         // - illegal name for hash algorithm (NotSupportedError)
                         var badHash = hashName.substring(0, 3) + hashName.substring(4);
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             var badAlgorithm = {name: "HKDF", salt: salts[saltSize], hash: badHash};
                             return subtle.deriveBits(badAlgorithm, baseKeys[derivedKeySize], 256)
                             .then(function(derivation) {
@@ -172,7 +172,7 @@
                         }, testName + " with bad hash name " + badHash);
 
                         // - baseKey usages missing "deriveBits" (InvalidAccessError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits(algorithm, noBits[derivedKeySize], 256)
                             .then(function(derivation) {
                                 assert_unreached("missing deriveBits usage should have thrown an InvalidAccessError");
@@ -182,7 +182,7 @@
                         }, testName + " with missing deriveBits usage");
 
                         // - baseKey algorithm does not match HKDF (InvalidAccessError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits(algorithm, wrongKey, 256)
                             .then(function(derivation) {
                                 assert_unreached("wrong (ECDH) key should have thrown an InvalidAccessError");
@@ -202,7 +202,7 @@
                         algorithm.info = infos[infoSize];
                     }
 
-                    promise_test(function(test) {
+                    subsetTest(promise_test, function(test) {
                         return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], 256)
                         .then(function(derivation) {
                             assert_unreached("non-digest algorithm should have thrown an NotSupportedError");
@@ -218,7 +218,7 @@
                         });
                         testName += " using " + derivedKeySize + " derivedKey, " + saltSize + " salt, " + nonDigestHash + ", with " + infoSize + " info";
 
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveKey(algorithm, baseKeys[derivedKeySize], derivedKeyType.algorithm, true, derivedKeyType.usages)
                             .then(function(derivation) {
                                 assert_unreached("non-digest algorithm should have thrown an NotSupportedError");
@@ -235,7 +235,7 @@
 
         done();
     }, function(err) {
-        test(function(test) {
+        subsetTest(test, function(test) {
             assert_unreached("setUpBaseKeys failed with error '" + err.message + "'");
         }, "setUpBaseKeys");
         done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js
new file mode 100644
index 0000000..539f390
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js
@@ -0,0 +1,15 @@
+// META: title=WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2
+// META: timeout=long
+// META: variant=?1-1000
+// META: variant=?1001-2000
+// META: variant=?2001-3000
+// META: variant=?3001-4000
+// META: variant=?4001-5000
+// META: variant=?5001-6000
+// META: variant=?6001-7000
+// META: variant=?7001-8000
+// META: variant=?8001-last
+// META: script=/common/subset-tests.js
+// META: script=pbkdf2_vectors.js
+// META: script=pbkdf2.js
+run_test();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1-1000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1-1000-expected.txt
new file mode 100644
index 0000000..7263bdd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1-1000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-384, with 1 iterations with null length
+PASS short password, short salt, SHA-384, with 1 iterations with 0 length
+PASS short password, short salt, SHA-384, with 1 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS short password, short salt, SHA-384, with 1 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-384, with 1000 iterations with null length
+PASS short password, short salt, SHA-384, with 1000 iterations with 0 length
+PASS short password, short salt, SHA-384, with 1000 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS short password, short salt, SHA-384, with 1000 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-384, with 100000 iterations with null length
+PASS short password, short salt, SHA-384, with 100000 iterations with 0 length
+PASS short password, short salt, SHA-384, with 100000 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS short password, short salt, SHA-384, with 100000 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-384, with 0 iterations
+PASS short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-512, with 1 iterations with null length
+PASS short password, short salt, SHA-512, with 1 iterations with 0 length
+PASS short password, short salt, SHA-512, with 1 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS short password, short salt, SHA-512, with 1 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-512, with 1000 iterations with null length
+PASS short password, short salt, SHA-512, with 1000 iterations with 0 length
+PASS short password, short salt, SHA-512, with 1000 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS short password, short salt, SHA-512, with 1000 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-512, with 100000 iterations with null length
+PASS short password, short salt, SHA-512, with 100000 iterations with 0 length
+PASS short password, short salt, SHA-512, with 100000 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS short password, short salt, SHA-512, with 100000 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-512, with 0 iterations
+PASS short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-1, with 1 iterations with null length
+PASS short password, short salt, SHA-1, with 1 iterations with 0 length
+PASS short password, short salt, SHA-1, with 1 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS short password, short salt, SHA-1, with 1 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-1, with 1000 iterations with null length
+PASS short password, short salt, SHA-1, with 1000 iterations with 0 length
+PASS short password, short salt, SHA-1, with 1000 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS short password, short salt, SHA-1, with 1000 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-1, with 100000 iterations with null length
+PASS short password, short salt, SHA-1, with 100000 iterations with 0 length
+PASS short password, short salt, SHA-1, with 100000 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS short password, short salt, SHA-1, with 100000 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-1, with 0 iterations
+PASS short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-256, with 1 iterations with null length
+PASS short password, short salt, SHA-256, with 1 iterations with 0 length
+PASS short password, short salt, SHA-256, with 1 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS short password, short salt, SHA-256, with 1 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-256, with 1000 iterations with null length
+PASS short password, short salt, SHA-256, with 1000 iterations with 0 length
+PASS short password, short salt, SHA-256, with 1000 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS short password, short salt, SHA-256, with 1000 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-256, with 100000 iterations with null length
+PASS short password, short salt, SHA-256, with 100000 iterations with 0 length
+PASS short password, short salt, SHA-256, with 100000 iterations with non-multiple of 8 length
+PASS short password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS short password, short salt, SHA-256, with 100000 iterations with missing deriveBits usage
+PASS short password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, SHA-256, with 0 iterations
+PASS short password, short salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, PBKDF2, with 1 iterations
+PASS short password, short salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, PBKDF2, with 1000 iterations
+PASS short password, short salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, short salt, PBKDF2, with 100000 iterations
+PASS short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1001-2000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1001-2000-expected.txt
new file mode 100644
index 0000000..a5fe05c2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_1001-2000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-384, with 1 iterations with null length
+PASS short password, long salt, SHA-384, with 1 iterations with 0 length
+PASS short password, long salt, SHA-384, with 1 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS short password, long salt, SHA-384, with 1 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-384, with 1000 iterations with null length
+PASS short password, long salt, SHA-384, with 1000 iterations with 0 length
+PASS short password, long salt, SHA-384, with 1000 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS short password, long salt, SHA-384, with 1000 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-384, with 100000 iterations with null length
+PASS short password, long salt, SHA-384, with 100000 iterations with 0 length
+PASS short password, long salt, SHA-384, with 100000 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS short password, long salt, SHA-384, with 100000 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-384, with 0 iterations
+PASS short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-512, with 1 iterations with null length
+PASS short password, long salt, SHA-512, with 1 iterations with 0 length
+PASS short password, long salt, SHA-512, with 1 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS short password, long salt, SHA-512, with 1 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-512, with 1000 iterations with null length
+PASS short password, long salt, SHA-512, with 1000 iterations with 0 length
+PASS short password, long salt, SHA-512, with 1000 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS short password, long salt, SHA-512, with 1000 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-512, with 100000 iterations with null length
+PASS short password, long salt, SHA-512, with 100000 iterations with 0 length
+PASS short password, long salt, SHA-512, with 100000 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS short password, long salt, SHA-512, with 100000 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-512, with 0 iterations
+PASS short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-1, with 1 iterations with null length
+PASS short password, long salt, SHA-1, with 1 iterations with 0 length
+PASS short password, long salt, SHA-1, with 1 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS short password, long salt, SHA-1, with 1 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-1, with 1000 iterations with null length
+PASS short password, long salt, SHA-1, with 1000 iterations with 0 length
+PASS short password, long salt, SHA-1, with 1000 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS short password, long salt, SHA-1, with 1000 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-1, with 100000 iterations with null length
+PASS short password, long salt, SHA-1, with 100000 iterations with 0 length
+PASS short password, long salt, SHA-1, with 100000 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS short password, long salt, SHA-1, with 100000 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-1, with 0 iterations
+PASS short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-256, with 1 iterations with null length
+PASS short password, long salt, SHA-256, with 1 iterations with 0 length
+PASS short password, long salt, SHA-256, with 1 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS short password, long salt, SHA-256, with 1 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-256, with 1000 iterations with null length
+PASS short password, long salt, SHA-256, with 1000 iterations with 0 length
+PASS short password, long salt, SHA-256, with 1000 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS short password, long salt, SHA-256, with 1000 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-256, with 100000 iterations with null length
+PASS short password, long salt, SHA-256, with 100000 iterations with 0 length
+PASS short password, long salt, SHA-256, with 100000 iterations with non-multiple of 8 length
+PASS short password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS short password, long salt, SHA-256, with 100000 iterations with missing deriveBits usage
+PASS short password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, SHA-256, with 0 iterations
+PASS short password, long salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, PBKDF2, with 1 iterations
+PASS short password, long salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, PBKDF2, with 1000 iterations
+PASS short password, long salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, long salt, PBKDF2, with 100000 iterations
+PASS short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 1 iterations
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_2001-3000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_2001-3000-expected.txt
new file mode 100644
index 0000000..60beff5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_2001-3000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-384, with 1 iterations with null length
+PASS short password, empty salt, SHA-384, with 1 iterations with 0 length
+PASS short password, empty salt, SHA-384, with 1 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS short password, empty salt, SHA-384, with 1 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-384, with 1000 iterations with null length
+PASS short password, empty salt, SHA-384, with 1000 iterations with 0 length
+PASS short password, empty salt, SHA-384, with 1000 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS short password, empty salt, SHA-384, with 1000 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-384, with 100000 iterations with null length
+PASS short password, empty salt, SHA-384, with 100000 iterations with 0 length
+PASS short password, empty salt, SHA-384, with 100000 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS short password, empty salt, SHA-384, with 100000 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-384, with 0 iterations
+PASS short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-512, with 1 iterations with null length
+PASS short password, empty salt, SHA-512, with 1 iterations with 0 length
+PASS short password, empty salt, SHA-512, with 1 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS short password, empty salt, SHA-512, with 1 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-512, with 1000 iterations with null length
+PASS short password, empty salt, SHA-512, with 1000 iterations with 0 length
+PASS short password, empty salt, SHA-512, with 1000 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS short password, empty salt, SHA-512, with 1000 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-512, with 100000 iterations with null length
+PASS short password, empty salt, SHA-512, with 100000 iterations with 0 length
+PASS short password, empty salt, SHA-512, with 100000 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS short password, empty salt, SHA-512, with 100000 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-512, with 0 iterations
+PASS short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-1, with 1 iterations with null length
+PASS short password, empty salt, SHA-1, with 1 iterations with 0 length
+PASS short password, empty salt, SHA-1, with 1 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS short password, empty salt, SHA-1, with 1 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-1, with 1000 iterations with null length
+PASS short password, empty salt, SHA-1, with 1000 iterations with 0 length
+PASS short password, empty salt, SHA-1, with 1000 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS short password, empty salt, SHA-1, with 1000 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-1, with 100000 iterations with null length
+PASS short password, empty salt, SHA-1, with 100000 iterations with 0 length
+PASS short password, empty salt, SHA-1, with 100000 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS short password, empty salt, SHA-1, with 100000 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-1, with 0 iterations
+PASS short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-256, with 1 iterations with null length
+PASS short password, empty salt, SHA-256, with 1 iterations with 0 length
+PASS short password, empty salt, SHA-256, with 1 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS short password, empty salt, SHA-256, with 1 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-256, with 1000 iterations with null length
+PASS short password, empty salt, SHA-256, with 1000 iterations with 0 length
+PASS short password, empty salt, SHA-256, with 1000 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS short password, empty salt, SHA-256, with 1000 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-256, with 100000 iterations with null length
+PASS short password, empty salt, SHA-256, with 100000 iterations with 0 length
+PASS short password, empty salt, SHA-256, with 100000 iterations with non-multiple of 8 length
+PASS short password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS short password, empty salt, SHA-256, with 100000 iterations with missing deriveBits usage
+PASS short password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, SHA-256, with 0 iterations
+PASS short password, empty salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, PBKDF2, with 1 iterations
+PASS short password, empty salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, PBKDF2, with 1000 iterations
+PASS short password, empty salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 192  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using short password, empty salt, PBKDF2, with 100000 iterations
+PASS long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-384, with 1 iterations with null length
+PASS long password, short salt, SHA-384, with 1 iterations with 0 length
+PASS long password, short salt, SHA-384, with 1 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS long password, short salt, SHA-384, with 1 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_3001-4000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_3001-4000-expected.txt
new file mode 100644
index 0000000..e7681f5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_3001-4000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-384, with 1000 iterations with null length
+PASS long password, short salt, SHA-384, with 1000 iterations with 0 length
+PASS long password, short salt, SHA-384, with 1000 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS long password, short salt, SHA-384, with 1000 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-384, with 100000 iterations with null length
+PASS long password, short salt, SHA-384, with 100000 iterations with 0 length
+PASS long password, short salt, SHA-384, with 100000 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS long password, short salt, SHA-384, with 100000 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-384, with 0 iterations
+PASS long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-512, with 1 iterations with null length
+PASS long password, short salt, SHA-512, with 1 iterations with 0 length
+PASS long password, short salt, SHA-512, with 1 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS long password, short salt, SHA-512, with 1 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-512, with 1000 iterations with null length
+PASS long password, short salt, SHA-512, with 1000 iterations with 0 length
+PASS long password, short salt, SHA-512, with 1000 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS long password, short salt, SHA-512, with 1000 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-512, with 100000 iterations with null length
+PASS long password, short salt, SHA-512, with 100000 iterations with 0 length
+PASS long password, short salt, SHA-512, with 100000 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS long password, short salt, SHA-512, with 100000 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-512, with 0 iterations
+PASS long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-1, with 1 iterations with null length
+PASS long password, short salt, SHA-1, with 1 iterations with 0 length
+PASS long password, short salt, SHA-1, with 1 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS long password, short salt, SHA-1, with 1 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-1, with 1000 iterations with null length
+PASS long password, short salt, SHA-1, with 1000 iterations with 0 length
+PASS long password, short salt, SHA-1, with 1000 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS long password, short salt, SHA-1, with 1000 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-1, with 100000 iterations with null length
+PASS long password, short salt, SHA-1, with 100000 iterations with 0 length
+PASS long password, short salt, SHA-1, with 100000 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS long password, short salt, SHA-1, with 100000 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-1, with 0 iterations
+PASS long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-256, with 1 iterations with null length
+PASS long password, short salt, SHA-256, with 1 iterations with 0 length
+PASS long password, short salt, SHA-256, with 1 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS long password, short salt, SHA-256, with 1 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-256, with 1000 iterations with null length
+PASS long password, short salt, SHA-256, with 1000 iterations with 0 length
+PASS long password, short salt, SHA-256, with 1000 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS long password, short salt, SHA-256, with 1000 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-256, with 100000 iterations with null length
+PASS long password, short salt, SHA-256, with 100000 iterations with 0 length
+PASS long password, short salt, SHA-256, with 100000 iterations with non-multiple of 8 length
+PASS long password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS long password, short salt, SHA-256, with 100000 iterations with missing deriveBits usage
+PASS long password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, SHA-256, with 0 iterations
+PASS long password, short salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, PBKDF2, with 1 iterations
+PASS long password, short salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, PBKDF2, with 1000 iterations
+PASS long password, short salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, short salt, PBKDF2, with 100000 iterations
+PASS long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-384, with 1 iterations with null length
+PASS long password, long salt, SHA-384, with 1 iterations with 0 length
+PASS long password, long salt, SHA-384, with 1 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS long password, long salt, SHA-384, with 1 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_4001-5000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_4001-5000-expected.txt
new file mode 100644
index 0000000..ef840cff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_4001-5000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-384, with 1000 iterations with null length
+PASS long password, long salt, SHA-384, with 1000 iterations with 0 length
+PASS long password, long salt, SHA-384, with 1000 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS long password, long salt, SHA-384, with 1000 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-384, with 100000 iterations with null length
+PASS long password, long salt, SHA-384, with 100000 iterations with 0 length
+PASS long password, long salt, SHA-384, with 100000 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS long password, long salt, SHA-384, with 100000 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-384, with 0 iterations
+PASS long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-512, with 1 iterations with null length
+PASS long password, long salt, SHA-512, with 1 iterations with 0 length
+PASS long password, long salt, SHA-512, with 1 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS long password, long salt, SHA-512, with 1 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-512, with 1000 iterations with null length
+PASS long password, long salt, SHA-512, with 1000 iterations with 0 length
+PASS long password, long salt, SHA-512, with 1000 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS long password, long salt, SHA-512, with 1000 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-512, with 100000 iterations with null length
+PASS long password, long salt, SHA-512, with 100000 iterations with 0 length
+PASS long password, long salt, SHA-512, with 100000 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS long password, long salt, SHA-512, with 100000 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-512, with 0 iterations
+PASS long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-1, with 1 iterations with null length
+PASS long password, long salt, SHA-1, with 1 iterations with 0 length
+PASS long password, long salt, SHA-1, with 1 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS long password, long salt, SHA-1, with 1 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-1, with 1000 iterations with null length
+PASS long password, long salt, SHA-1, with 1000 iterations with 0 length
+PASS long password, long salt, SHA-1, with 1000 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS long password, long salt, SHA-1, with 1000 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-1, with 100000 iterations with null length
+PASS long password, long salt, SHA-1, with 100000 iterations with 0 length
+PASS long password, long salt, SHA-1, with 100000 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS long password, long salt, SHA-1, with 100000 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-1, with 0 iterations
+PASS long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-256, with 1 iterations with null length
+PASS long password, long salt, SHA-256, with 1 iterations with 0 length
+PASS long password, long salt, SHA-256, with 1 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS long password, long salt, SHA-256, with 1 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-256, with 1000 iterations with null length
+PASS long password, long salt, SHA-256, with 1000 iterations with 0 length
+PASS long password, long salt, SHA-256, with 1000 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS long password, long salt, SHA-256, with 1000 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-256, with 100000 iterations with null length
+PASS long password, long salt, SHA-256, with 100000 iterations with 0 length
+PASS long password, long salt, SHA-256, with 100000 iterations with non-multiple of 8 length
+PASS long password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS long password, long salt, SHA-256, with 100000 iterations with missing deriveBits usage
+PASS long password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, SHA-256, with 0 iterations
+PASS long password, long salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, PBKDF2, with 1 iterations
+PASS long password, long salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, PBKDF2, with 1000 iterations
+PASS long password, long salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, long salt, PBKDF2, with 100000 iterations
+PASS long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-384, with 1 iterations with null length
+PASS long password, empty salt, SHA-384, with 1 iterations with 0 length
+PASS long password, empty salt, SHA-384, with 1 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS long password, empty salt, SHA-384, with 1 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-384, with 1000 iterations with null length
+PASS long password, empty salt, SHA-384, with 1000 iterations with 0 length
+PASS long password, empty salt, SHA-384, with 1000 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS long password, empty salt, SHA-384, with 1000 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_5001-6000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_5001-6000-expected.txt
new file mode 100644
index 0000000..16b7e94
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_5001-6000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-384, with 100000 iterations with null length
+PASS long password, empty salt, SHA-384, with 100000 iterations with 0 length
+PASS long password, empty salt, SHA-384, with 100000 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS long password, empty salt, SHA-384, with 100000 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-384, with 0 iterations
+PASS long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-512, with 1 iterations with null length
+PASS long password, empty salt, SHA-512, with 1 iterations with 0 length
+PASS long password, empty salt, SHA-512, with 1 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS long password, empty salt, SHA-512, with 1 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-512, with 1000 iterations with null length
+PASS long password, empty salt, SHA-512, with 1000 iterations with 0 length
+PASS long password, empty salt, SHA-512, with 1000 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS long password, empty salt, SHA-512, with 1000 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-512, with 100000 iterations with null length
+PASS long password, empty salt, SHA-512, with 100000 iterations with 0 length
+PASS long password, empty salt, SHA-512, with 100000 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS long password, empty salt, SHA-512, with 100000 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-512, with 0 iterations
+PASS long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-1, with 1 iterations with null length
+PASS long password, empty salt, SHA-1, with 1 iterations with 0 length
+PASS long password, empty salt, SHA-1, with 1 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS long password, empty salt, SHA-1, with 1 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-1, with 1000 iterations with null length
+PASS long password, empty salt, SHA-1, with 1000 iterations with 0 length
+PASS long password, empty salt, SHA-1, with 1000 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS long password, empty salt, SHA-1, with 1000 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-1, with 100000 iterations with null length
+PASS long password, empty salt, SHA-1, with 100000 iterations with 0 length
+PASS long password, empty salt, SHA-1, with 100000 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS long password, empty salt, SHA-1, with 100000 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-1, with 0 iterations
+PASS long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-256, with 1 iterations with null length
+PASS long password, empty salt, SHA-256, with 1 iterations with 0 length
+PASS long password, empty salt, SHA-256, with 1 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS long password, empty salt, SHA-256, with 1 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-256, with 1000 iterations with null length
+PASS long password, empty salt, SHA-256, with 1000 iterations with 0 length
+PASS long password, empty salt, SHA-256, with 1000 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS long password, empty salt, SHA-256, with 1000 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-256, with 100000 iterations with null length
+PASS long password, empty salt, SHA-256, with 100000 iterations with 0 length
+PASS long password, empty salt, SHA-256, with 100000 iterations with non-multiple of 8 length
+PASS long password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS long password, empty salt, SHA-256, with 100000 iterations with missing deriveBits usage
+PASS long password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, SHA-256, with 0 iterations
+PASS long password, empty salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, PBKDF2, with 1 iterations
+PASS long password, empty salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, PBKDF2, with 1000 iterations
+PASS long password, empty salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 192  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using long password, empty salt, PBKDF2, with 100000 iterations
+PASS empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-384, with 1 iterations with null length
+PASS empty password, short salt, SHA-384, with 1 iterations with 0 length
+PASS empty password, short salt, SHA-384, with 1 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS empty password, short salt, SHA-384, with 1 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-384, with 1000 iterations with null length
+PASS empty password, short salt, SHA-384, with 1000 iterations with 0 length
+PASS empty password, short salt, SHA-384, with 1000 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS empty password, short salt, SHA-384, with 1000 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_6001-7000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_6001-7000-expected.txt
new file mode 100644
index 0000000..d36ea5a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_6001-7000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-384, with 100000 iterations with null length
+PASS empty password, short salt, SHA-384, with 100000 iterations with 0 length
+PASS empty password, short salt, SHA-384, with 100000 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS empty password, short salt, SHA-384, with 100000 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-384, with 0 iterations
+PASS empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-512, with 1 iterations with null length
+PASS empty password, short salt, SHA-512, with 1 iterations with 0 length
+PASS empty password, short salt, SHA-512, with 1 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS empty password, short salt, SHA-512, with 1 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-512, with 1000 iterations with null length
+PASS empty password, short salt, SHA-512, with 1000 iterations with 0 length
+PASS empty password, short salt, SHA-512, with 1000 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS empty password, short salt, SHA-512, with 1000 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-512, with 100000 iterations with null length
+PASS empty password, short salt, SHA-512, with 100000 iterations with 0 length
+PASS empty password, short salt, SHA-512, with 100000 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS empty password, short salt, SHA-512, with 100000 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-512, with 0 iterations
+PASS empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-1, with 1 iterations with null length
+PASS empty password, short salt, SHA-1, with 1 iterations with 0 length
+PASS empty password, short salt, SHA-1, with 1 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS empty password, short salt, SHA-1, with 1 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-1, with 1000 iterations with null length
+PASS empty password, short salt, SHA-1, with 1000 iterations with 0 length
+PASS empty password, short salt, SHA-1, with 1000 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS empty password, short salt, SHA-1, with 1000 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-1, with 100000 iterations with null length
+PASS empty password, short salt, SHA-1, with 100000 iterations with 0 length
+PASS empty password, short salt, SHA-1, with 100000 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS empty password, short salt, SHA-1, with 100000 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-1, with 0 iterations
+PASS empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-256, with 1 iterations with null length
+PASS empty password, short salt, SHA-256, with 1 iterations with 0 length
+PASS empty password, short salt, SHA-256, with 1 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS empty password, short salt, SHA-256, with 1 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-256, with 1000 iterations with null length
+PASS empty password, short salt, SHA-256, with 1000 iterations with 0 length
+PASS empty password, short salt, SHA-256, with 1000 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS empty password, short salt, SHA-256, with 1000 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-256, with 100000 iterations with null length
+PASS empty password, short salt, SHA-256, with 100000 iterations with 0 length
+PASS empty password, short salt, SHA-256, with 100000 iterations with non-multiple of 8 length
+PASS empty password, short salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS empty password, short salt, SHA-256, with 100000 iterations with missing deriveBits usage
+PASS empty password, short salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, SHA-256, with 0 iterations
+PASS empty password, short salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, PBKDF2, with 1 iterations
+PASS empty password, short salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, PBKDF2, with 1000 iterations
+PASS empty password, short salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, short salt, PBKDF2, with 100000 iterations
+PASS empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-384, with 1 iterations with null length
+PASS empty password, long salt, SHA-384, with 1 iterations with 0 length
+PASS empty password, long salt, SHA-384, with 1 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS empty password, long salt, SHA-384, with 1 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-384, with 1000 iterations with null length
+PASS empty password, long salt, SHA-384, with 1000 iterations with 0 length
+PASS empty password, long salt, SHA-384, with 1000 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS empty password, long salt, SHA-384, with 1000 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_7001-8000-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_7001-8000-expected.txt
new file mode 100644
index 0000000..b55d797
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_7001-8000-expected.txt
@@ -0,0 +1,1003 @@
+This is a testharness.js-based test.
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-384, with 100000 iterations with null length
+PASS empty password, long salt, SHA-384, with 100000 iterations with 0 length
+PASS empty password, long salt, SHA-384, with 100000 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS empty password, long salt, SHA-384, with 100000 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-384, with 0 iterations
+PASS empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-512, with 1 iterations with null length
+PASS empty password, long salt, SHA-512, with 1 iterations with 0 length
+PASS empty password, long salt, SHA-512, with 1 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS empty password, long salt, SHA-512, with 1 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-512, with 1000 iterations with null length
+PASS empty password, long salt, SHA-512, with 1000 iterations with 0 length
+PASS empty password, long salt, SHA-512, with 1000 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS empty password, long salt, SHA-512, with 1000 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-512, with 100000 iterations with null length
+PASS empty password, long salt, SHA-512, with 100000 iterations with 0 length
+PASS empty password, long salt, SHA-512, with 100000 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS empty password, long salt, SHA-512, with 100000 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-512, with 0 iterations
+PASS empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-1, with 1 iterations with null length
+PASS empty password, long salt, SHA-1, with 1 iterations with 0 length
+PASS empty password, long salt, SHA-1, with 1 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS empty password, long salt, SHA-1, with 1 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-1, with 1000 iterations with null length
+PASS empty password, long salt, SHA-1, with 1000 iterations with 0 length
+PASS empty password, long salt, SHA-1, with 1000 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS empty password, long salt, SHA-1, with 1000 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-1, with 100000 iterations with null length
+PASS empty password, long salt, SHA-1, with 100000 iterations with 0 length
+PASS empty password, long salt, SHA-1, with 100000 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS empty password, long salt, SHA-1, with 100000 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-1, with 0 iterations
+PASS empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-256, with 1 iterations with null length
+PASS empty password, long salt, SHA-256, with 1 iterations with 0 length
+PASS empty password, long salt, SHA-256, with 1 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS empty password, long salt, SHA-256, with 1 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-256, with 1000 iterations with null length
+PASS empty password, long salt, SHA-256, with 1000 iterations with 0 length
+PASS empty password, long salt, SHA-256, with 1000 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS empty password, long salt, SHA-256, with 1000 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-256, with 100000 iterations with null length
+PASS empty password, long salt, SHA-256, with 100000 iterations with 0 length
+PASS empty password, long salt, SHA-256, with 100000 iterations with non-multiple of 8 length
+PASS empty password, long salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS empty password, long salt, SHA-256, with 100000 iterations with missing deriveBits usage
+PASS empty password, long salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, SHA-256, with 0 iterations
+PASS empty password, long salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, PBKDF2, with 1 iterations
+PASS empty password, long salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, PBKDF2, with 1000 iterations
+PASS empty password, long salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, long salt, PBKDF2, with 100000 iterations
+PASS empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-384, with 1 iterations with null length
+PASS empty password, empty salt, SHA-384, with 1 iterations with 0 length
+PASS empty password, empty salt, SHA-384, with 1 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-384, with 1 iterations with bad hash name SHA384
+PASS empty password, empty salt, SHA-384, with 1 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-384, with 1 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-384, with 1000 iterations with null length
+PASS empty password, empty salt, SHA-384, with 1000 iterations with 0 length
+PASS empty password, empty salt, SHA-384, with 1000 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-384, with 1000 iterations with bad hash name SHA384
+PASS empty password, empty salt, SHA-384, with 1000 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-384, with 1000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-384, with 100000 iterations with null length
+PASS empty password, empty salt, SHA-384, with 100000 iterations with 0 length
+PASS empty password, empty salt, SHA-384, with 100000 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-384, with 100000 iterations with bad hash name SHA384
+PASS empty password, empty salt, SHA-384, with 100000 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-384, with 100000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-384, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-384, with 0 iterations
+PASS empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 1 iterations
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_8001-last-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_8001-last-expected.txt
new file mode 100644
index 0000000..2c2f2d1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any_8001-last-expected.txt
@@ -0,0 +1,742 @@
+This is a testharness.js-based test.
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-512, with 1 iterations with null length
+PASS empty password, empty salt, SHA-512, with 1 iterations with 0 length
+PASS empty password, empty salt, SHA-512, with 1 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-512, with 1 iterations with bad hash name SHA512
+PASS empty password, empty salt, SHA-512, with 1 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-512, with 1 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-512, with 1000 iterations with null length
+PASS empty password, empty salt, SHA-512, with 1000 iterations with 0 length
+PASS empty password, empty salt, SHA-512, with 1000 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-512, with 1000 iterations with bad hash name SHA512
+PASS empty password, empty salt, SHA-512, with 1000 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-512, with 1000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-512, with 100000 iterations with null length
+PASS empty password, empty salt, SHA-512, with 100000 iterations with 0 length
+PASS empty password, empty salt, SHA-512, with 100000 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-512, with 100000 iterations with bad hash name SHA512
+PASS empty password, empty salt, SHA-512, with 100000 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-512, with 100000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-512, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-512, with 0 iterations
+PASS empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-1, with 1 iterations with null length
+PASS empty password, empty salt, SHA-1, with 1 iterations with 0 length
+PASS empty password, empty salt, SHA-1, with 1 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-1, with 1 iterations with bad hash name SHA1
+PASS empty password, empty salt, SHA-1, with 1 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-1, with 1 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-1, with 1000 iterations with null length
+PASS empty password, empty salt, SHA-1, with 1000 iterations with 0 length
+PASS empty password, empty salt, SHA-1, with 1000 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-1, with 1000 iterations with bad hash name SHA1
+PASS empty password, empty salt, SHA-1, with 1000 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-1, with 1000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-1, with 100000 iterations with null length
+PASS empty password, empty salt, SHA-1, with 100000 iterations with 0 length
+PASS empty password, empty salt, SHA-1, with 100000 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-1, with 100000 iterations with bad hash name SHA1
+PASS empty password, empty salt, SHA-1, with 100000 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-1, with 100000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-1, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-1, with 0 iterations
+PASS empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 1 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-256, with 1 iterations with null length
+PASS empty password, empty salt, SHA-256, with 1 iterations with 0 length
+PASS empty password, empty salt, SHA-256, with 1 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-256, with 1 iterations with bad hash name SHA256
+PASS empty password, empty salt, SHA-256, with 1 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-256, with 1 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 1000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-256, with 1000 iterations with null length
+PASS empty password, empty salt, SHA-256, with 1000 iterations with 0 length
+PASS empty password, empty salt, SHA-256, with 1000 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-256, with 1000 iterations with bad hash name SHA256
+PASS empty password, empty salt, SHA-256, with 1000 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-256, with 1000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+FAIL Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 100000 iterations assert_unreached: deriveKey failed with error OperationError: 192-bit AES keys are not supported Reached unreachable code
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with missing deriveKey usage
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-256, with 100000 iterations with null length
+PASS empty password, empty salt, SHA-256, with 100000 iterations with 0 length
+PASS empty password, empty salt, SHA-256, with 100000 iterations with non-multiple of 8 length
+PASS empty password, empty salt, SHA-256, with 100000 iterations with bad hash name SHA256
+PASS empty password, empty salt, SHA-256, with 100000 iterations with missing deriveBits usage
+PASS empty password, empty salt, SHA-256, with 100000 iterations with wrong (ECDH) key
+PASS empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, SHA-256, with 0 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, SHA-256, with 0 iterations
+PASS empty password, empty salt, PBKDF2, with 1 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, PBKDF2, with 1 iterations
+PASS empty password, empty salt, PBKDF2, with 1000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, PBKDF2, with 1000 iterations
+PASS empty password, empty salt, PBKDF2, with 100000 iterations with non-digest algorithm PBKDF2
+PASS Derived key of type name: AES-CBC length: 128  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 192  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CBC length: 256  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 128  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 192  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-CTR length: 256  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 128  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 192  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-GCM length: 256  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 128  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 192  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: AES-KW length: 256  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-1 length: 256  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-256 length: 256  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-384 length: 256  using empty password, empty salt, PBKDF2, with 100000 iterations
+PASS Derived key of type name: HMAC hash: SHA-512 length: 256  using empty password, empty salt, PBKDF2, with 100000 iterations
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.js
deleted file mode 100644
index 1ab68d29..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// META: timeout=long
-importScripts("/resources/testharness.js");
-importScripts("pbkdf2_vectors.js");
-importScripts("pbkdf2.js");
-
-run_test();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.js
index 74f8a6cb..7edc7ea 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.js
@@ -1,4 +1,4 @@
-function run_test(testPasswordSize, testSaltSize) {
+function run_test() {
     // May want to test prefixed implementations.
     var subtle = self.crypto.subtle;
 
@@ -27,15 +27,13 @@
         // and number of iterations. The derivations object is structured in
         // that way, so navigate it to run tests and compare with correct results.
         Object.keys(derivations).forEach(function(passwordSize) {
-            if (typeof testPasswordSize != 'undefined' && testPasswordSize != passwordSize) return;
             Object.keys(derivations[passwordSize]).forEach(function(saltSize) {
-                if (typeof testSaltSize != 'undefined' && testSaltSize != saltSize) return;
                 Object.keys(derivations[passwordSize][saltSize]).forEach(function(hashName) {
                     Object.keys(derivations[passwordSize][saltSize][hashName]).forEach(function(iterations) {
                         var testName = passwordSize + " password, " + saltSize + " salt, " + hashName + ", with " + iterations + " iterations";
 
                         // Check for correct deriveBits result
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], 256)
                             .then(function(derivation) {
                                 assert_true(equalBuffers(derivation, derivations[passwordSize][saltSize][hashName][iterations]), "Derived correct key");
@@ -54,7 +52,7 @@
                             testName += " using " + passwordSize + " password, " + saltSize + " salt, " + hashName + ", with " + iterations + " iterations";
 
                             // Test the particular key derivation.
-                            promise_test(function(test) {
+                            subsetTest(promise_test, function(test) {
                                 return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
                                 .then(function(key) {
                                     // Need to export the key to see that the correct bits were set.
@@ -74,7 +72,7 @@
 
                             // - illegal name for hash algorithm (NotSupportedError)
                             var badHash = hashName.substring(0, 3) + hashName.substring(4);
-                            promise_test(function(test) {
+                            subsetTest(promise_test, function(test) {
                                 return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: badHash, iterations: parseInt(iterations)}, baseKeys[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
                                 .then(function(key) {
                                     assert_unreached("bad hash name should have thrown an NotSupportedError");
@@ -84,7 +82,7 @@
                             }, testName + " with bad hash name " + badHash);
 
                             // - baseKey usages missing "deriveKey" (InvalidAccessError)
-                            promise_test(function(test) {
+                            subsetTest(promise_test, function(test) {
                                 return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, noKey[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
                                 .then(function(key) {
                                     assert_unreached("missing deriveKey usage should have thrown an InvalidAccessError");
@@ -94,7 +92,7 @@
                             }, testName + " with missing deriveKey usage");
 
                             // - baseKey algorithm does not match PBKDF2 (InvalidAccessError)
-                            promise_test(function(test) {
+                            subsetTest(promise_test, function(test) {
                                 return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, wrongKey, derivedKeyType.algorithm, true, derivedKeyType.usages)
                                 .then(function(key) {
                                     assert_unreached("wrong (ECDH) key should have thrown an InvalidAccessError");
@@ -107,7 +105,7 @@
 
                         // Test various error conditions for deriveBits below:
                         // length null (OperationError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], null)
                             .then(function(derivation) {
                                 assert_unreached("null length should have thrown an OperationError");
@@ -117,7 +115,7 @@
                         }, testName + " with null length");
 
                         // 0 length (OperationError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], 0)
                             .then(function(derivation) {
                                 assert_unreached("0 length should have thrown an OperationError");
@@ -127,7 +125,7 @@
                         }, testName + " with 0 length");
 
                         // length not multiple of 8 (OperationError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], 44)
                             .then(function(derivation) {
                                 assert_unreached("non-multiple of 8 length should have thrown an OperationError");
@@ -138,7 +136,7 @@
 
                         // - illegal name for hash algorithm (NotSupportedError)
                         var badHash = hashName.substring(0, 3) + hashName.substring(4);
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: badHash, iterations: parseInt(iterations)}, baseKeys[passwordSize], 256)
                             .then(function(derivation) {
                                 assert_unreached("bad hash name should have thrown an NotSupportedError");
@@ -148,7 +146,7 @@
                         }, testName + " with bad hash name " + badHash);
 
                         // - baseKey usages missing "deriveBits" (InvalidAccessError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, noBits[passwordSize], 256)
                             .then(function(derivation) {
                                 assert_unreached("missing deriveBits usage should have thrown an InvalidAccessError");
@@ -158,7 +156,7 @@
                         }, testName + " with missing deriveBits usage");
 
                         // - baseKey algorithm does not match PBKDF2 (InvalidAccessError)
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, wrongKey, 256)
                             .then(function(derivation) {
                                 assert_unreached("wrong (ECDH) key should have thrown an InvalidAccessError");
@@ -169,7 +167,7 @@
                     });
 
                     // Check that 0 iterations throws proper error
-                    promise_test(function(test) {
+                    subsetTest(promise_test, function(test) {
                         return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: 0}, baseKeys[passwordSize], 256)
                         .then(function(derivation) {
                             assert_unreached("0 iterations should have thrown an error");
@@ -185,7 +183,7 @@
                         });
                         testName += " using " + passwordSize + " password, " + saltSize + " salt, " + hashName + ", with 0 iterations";
 
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: 0}, baseKeys[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
                             .then(function(derivation) {
                                 assert_unreached("0 iterations should have thrown an error");
@@ -201,7 +199,7 @@
                 [1, 1000, 100000].forEach(function(iterations) {
                     var testName = passwordSize + " password, " + saltSize + " salt, " + nonDigestHash + ", with " + iterations + " iterations";
 
-                    promise_test(function(test) {
+                    subsetTest(promise_test, function(test) {
                         return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: nonDigestHash, iterations: parseInt(iterations)}, baseKeys[passwordSize], 256)
                         .then(function(derivation) {
                             assert_unreached("non-digest algorithm should have thrown an NotSupportedError");
@@ -217,7 +215,7 @@
                         });
                         testName += " using " + passwordSize + " password, " + saltSize + " salt, " + nonDigestHash + ", with " + iterations + " iterations";
 
-                        promise_test(function(test) {
+                        subsetTest(promise_test, function(test) {
                             return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: nonDigestHash, iterations: parseInt(iterations)}, baseKeys[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
                             .then(function(derivation) {
                                 assert_unreached("non-digest algorithm should have thrown an NotSupportedError");
@@ -234,7 +232,7 @@
 
         done();
     }, function(err) {
-        test(function(test) {
+        subsetTest(test, function(test) {
             assert_unreached("setUpBaseKeys failed with error '" + err.message + "'");
         }, "setUpBaseKeys");
         done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html
deleted file mode 100644
index a1890382..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() Using ECDH</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="ecdh_bits.js"></script>
-
-<h1>deriveBits Tests for ECDH</h1>
-
-<div id="log"></div>
-<script>
-run_test();
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html
deleted file mode 100644
index b303295f..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI:deriveKey() Using ECDH</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="ecdh_keys.js"></script>
-
-<h1>deriveKey Tests for ECDH</h1>
-
-<div id="log"></div>
-<script>
-run_test();
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_hkdf.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_hkdf.https.html
deleted file mode 100644
index 23143bdbc8..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_hkdf.https.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using HKDF</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="hkdf_vectors.js"></script>
-<script src="hkdf.js"></script>
-
-<h1>deriveBits and deriveKey Tests for HKDF</h1>
-
-<div id="log"></div>
-<script>
-run_test();
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html
deleted file mode 100644
index 15af4f3..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="pbkdf2_vectors.js"></script>
-<script src="pbkdf2.js"></script>
-
-<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
-
-<div id="log"></div>
-<script>
-run_test(
-  "empty", //password size
-  "empty"  //salt size
-);
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html
deleted file mode 100644
index c8a251d..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="pbkdf2_vectors.js"></script>
-<script src="pbkdf2.js"></script>
-
-<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
-
-<div id="log"></div>
-<script>
-run_test(
-  "empty", //password size
-  "long"  //salt size
-);
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html
deleted file mode 100644
index 62da41a..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="pbkdf2_vectors.js"></script>
-<script src="pbkdf2.js"></script>
-
-<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
-
-<div id="log"></div>
-<script>
-run_test(
-  "empty", //password size
-  "short"  //salt size
-);
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html
deleted file mode 100644
index 3b5845fc..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="pbkdf2_vectors.js"></script>
-<script src="pbkdf2.js"></script>
-
-<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
-
-<div id="log"></div>
-<script>
-run_test(
-  "long", //password size
-  "empty"  //salt size
-);
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html
deleted file mode 100644
index d9d0443..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="pbkdf2_vectors.js"></script>
-<script src="pbkdf2.js"></script>
-
-<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
-
-<div id="log"></div>
-<script>
-run_test(
-  "long", //password size
-  "long"  //salt size
-);
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html
deleted file mode 100644
index fa81c7f..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="pbkdf2_vectors.js"></script>
-<script src="pbkdf2.js"></script>
-
-<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
-
-<div id="log"></div>
-<script>
-run_test(
-  "long", //password size
-  "short"  //salt size
-);
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html
deleted file mode 100644
index 2497b52..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="pbkdf2_vectors.js"></script>
-<script src="pbkdf2.js"></script>
-
-<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
-
-<div id="log"></div>
-<script>
-run_test(
-  "short", //password size
-  "empty"  //salt size
-);
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html
deleted file mode 100644
index f56cd2c..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="pbkdf2_vectors.js"></script>
-<script src="pbkdf2.js"></script>
-
-<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
-
-<div id="log"></div>
-<script>
-run_test(
-  "short", //password size
-  "long"  //salt size
-);
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html
deleted file mode 100644
index c5fa427..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<meta name="timeout" content="long">
-<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
-<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<script src="pbkdf2_vectors.js"></script>
-<script src="pbkdf2.js"></script>
-
-<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
-
-<div id="log"></div>
-<script>
-run_test(
-  "short", //password size
-  "short"  //salt size
-);
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js
index 19c9fb2..38bed1c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js
index 2f8a0b3..0e79407 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js
index bb0ab46f..a394c8b6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js
index 54d685f7..40c199b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_ECDH.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_ECDH.https.any.js
index 4c13c5ac..e522254 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_ECDH.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_ECDH.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js
index 74cd480..e19974f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_HMAC.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_HMAC.https.any.js
index 708d33b..43ce1c0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_HMAC.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_HMAC.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js
index 4ec0ec20..1d2bca9 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js
index 557b5785..562f6669 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js
index 45771bf..fb19308 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=failures.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js
index 6feb60e..80f92c2 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=/common/subset-tests.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js
index 7b4f2df..243a104b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=/common/subset-tests.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js
index 8e7bc921..f0f947c8 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=/common/subset-tests.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js
index 5eb02336..dbc040fd 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=/common/subset-tests.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_ECDH.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_ECDH.https.any.js
index 87590d2..e9dee52 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_ECDH.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_ECDH.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=/common/subset-tests.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js
index 734d8697..a022f31 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=/common/subset-tests.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_HMAC.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_HMAC.https.any.js
index bc106f3c..18e0b271 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_HMAC.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_HMAC.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: script=../util/helpers.js
 // META: script=/common/subset-tests.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js
index b041228..d933fd98 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: variant=?1-10
 // META: variant=?11-20
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js
index ea91c8f..cb43e3d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: variant=?1-10
 // META: variant=?11-20
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js
index fc785f9b..b8db5972 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js
@@ -1,3 +1,4 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
 // META: timeout=long
 // META: variant=?1-10
 // META: variant=?11-20
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/attributes-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/attributes-expected.txt
new file mode 100644
index 0000000..f54b13a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/attributes-expected.txt
@@ -0,0 +1,73 @@
+This is a testharness.js-based test.
+Found 67 tests; 58 PASS, 9 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL When qualifiedName does not match the Name production, an INVALID_CHARACTER_ERR exception is to be thrown. (toggleAttribute) assert_throws: function "function() { el.toggleAttribute(invalid_names[i], true) }" threw object "TypeError: el.toggleAttribute is not a function" that is not a DOMException INVALID_CHARACTER_ERR: property "code" is equal to undefined, expected 5
+FAIL When qualifiedName does not match the Name production, an INVALID_CHARACTER_ERR exception is to be thrown, even if the attribute is already present. (toggleAttribute) assert_throws: function "function() {
+      el.children[i].toggleAttribute("~", false)
+    }" threw object "TypeError: el.children[i].toggleAttribute is not a function" that is not a DOMException INVALID_CHARACTER_ERR: property "code" is equal to undefined, expected 5
+FAIL toggleAttribute should lowercase its name argument (upper case attribute) el.toggleAttribute is not a function
+FAIL toggleAttribute should lowercase its name argument (mixed case attribute) el.toggleAttribute is not a function
+FAIL toggleAttribute should not throw even when qualifiedName starts with 'xmlns' el.toggleAttribute is not a function
+FAIL Basic functionality should be intact. (toggleAttribute) el.toggleAttribute is not a function
+FAIL toggleAttribute should not change the order of previously set attributes. el.toggleAttribute is not a function
+FAIL toggleAttribute should set the first attribute with the given name el.toggleAttribute is not a function
+FAIL toggleAttribute should set the attribute with the given qualified name el.toggleAttribute is not a function
+PASS When qualifiedName does not match the Name production, an INVALID_CHARACTER_ERR exception is to be thrown. (setAttribute)
+PASS When qualifiedName does not match the Name production, an INVALID_CHARACTER_ERR exception is to be thrown, even if the attribute is already present. (setAttribute)
+PASS setAttribute should lowercase its name argument (upper case attribute)
+PASS setAttribute should lowercase its name argument (mixed case attribute)
+PASS setAttribute should not throw even when qualifiedName starts with 'xmlns'
+PASS Basic functionality should be intact.
+PASS setAttribute should not change the order of previously set attributes.
+PASS setAttribute should set the first attribute with the given name
+PASS setAttribute should set the attribute with the given qualified name
+PASS When qualifiedName does not match the Name production, an INVALID_CHARACTER_ERR exception is to be thrown. (setAttributeNS)
+PASS When qualifiedName does not match the Name production, an INVALID_CHARACTER_ERR exception is to be thrown, even if the attribute is already present. (setAttributeNS)
+PASS When qualifiedName does not match the QName production, an INVALID_CHARACTER_ERR exception is to be thrown.
+PASS null and the empty string should result in a null namespace.
+PASS A namespace is required to use a prefix.
+PASS The xml prefix should not be allowed for arbitrary namespaces
+PASS XML-namespaced attributes don't need an xml prefix
+PASS The xmlns prefix should not be allowed for arbitrary namespaces
+PASS The xmlns qualified name should not be allowed for arbitrary namespaces
+PASS xmlns should be allowed as local name
+PASS The XMLNS namespace should require xmlns as prefix or qualified name
+PASS xmlns should be allowed as prefix in the XMLNS namespace
+PASS xmlns should be allowed as qualified name in the XMLNS namespace
+PASS Setting the same attribute with another prefix should not change the prefix
+PASS setAttribute should not throw even if a load is not allowed
+PASS Attributes should work in document fragments.
+PASS Attribute values should not be parsed.
+PASS Specified attributes should be accessible.
+PASS Entities in attributes should have been expanded while parsing.
+PASS Unset attributes return null
+PASS First set attribute is returned by getAttribute
+PASS Style attributes are not normalized
+PASS Only lowercase attributes are returned on HTML elements (upper case attribute)
+PASS Only lowercase attributes are returned on HTML elements (mixed case attribute)
+PASS First set attribute is returned with mapped attribute set first
+PASS First set attribute is returned with mapped attribute set later
+PASS Non-HTML element with upper-case attribute
+PASS Attribute with prefix in local name
+PASS Attribute loses its owner when removed
+PASS Basic functionality of getAttributeNode/getAttributeNodeNS
+PASS Basic functionality of setAttributeNode
+PASS setAttributeNode should distinguish attributes with same local name and different namespaces
+PASS setAttributeNode doesn't have case-insensitivity even with an HTMLElement
+PASS Basic functionality of setAttributeNodeNS
+PASS If attr’s element is neither null nor element, throw an InUseAttributeError.
+PASS Replacing an attr by itself
+PASS Basic functionality of removeAttributeNode
+PASS setAttributeNode on bound attribute should throw InUseAttributeError
+PASS setAttributeNode, if it fires mutation events, should fire one with the new node when resetting an existing attribute
+PASS setAttributeNode, if it fires mutation events, should fire one with the new node when resetting an existing attribute (outer shell)
+PASS setAttributeNode called with an Attr that has the same name as an existing one should not change attribute order
+PASS getAttributeNames tests
+PASS Own property correctness with basic attributes
+PASS Own property correctness with non-namespaced attribute before same-name namespaced one
+PASS Own property correctness with namespaced attribute before same-name non-namespaced one
+PASS Own property correctness with two namespaced attributes with the same name-with-prefix
+PASS Own property names should only include all-lowercase qualified names for an HTML element in an HTML document
+PASS Own property names should include all qualified names for a non-HTML element in an HTML document
+PASS Own property names should include all qualified names for an HTML element in a non-HTML document
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/attributes.html b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/attributes.html
index 9746cc6..486cafa 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/attributes.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/attributes.html
@@ -20,6 +20,122 @@
 var XML = "http://www.w3.org/XML/1998/namespace"
 var XMLNS = "http://www.w3.org/2000/xmlns/"
 
+// toggleAttribute exhaustive tests
+// Step 1
+test(function() {
+  var el = document.createElement("foo")
+  for (var i = 0; i < invalid_names.length; i++) {
+    assert_throws("INVALID_CHARACTER_ERR", function() { el.toggleAttribute(invalid_names[i], true) })
+  }
+  for (var i = 0; i < invalid_names.length; i++) {
+    assert_throws("INVALID_CHARACTER_ERR", function() { el.toggleAttribute(invalid_names[i]) })
+  }
+  for (var i = 0; i < invalid_names.length; i++) {
+    assert_throws("INVALID_CHARACTER_ERR", function() { el.toggleAttribute(invalid_names[i], false) })
+  }
+}, "When qualifiedName does not match the Name production, an " +
+   "INVALID_CHARACTER_ERR exception is to be thrown. (toggleAttribute)")
+test(function() {
+  var el = document.getElementById("test2")
+  for (var i = 0; i < el.children.length; i++) {
+    assert_throws("INVALID_CHARACTER_ERR", function() {
+      el.children[i].toggleAttribute("~", false)
+    })
+  }
+  for (var i = 0; i < el.children.length; i++) {
+    assert_throws("INVALID_CHARACTER_ERR", function() {
+      el.children[i].toggleAttribute("~")
+    })
+  }
+  for (var i = 0; i < el.children.length; i++) {
+    assert_throws("INVALID_CHARACTER_ERR", function() {
+      el.children[i].toggleAttribute("~", true)
+    })
+  }
+}, "When qualifiedName does not match the Name production, an " +
+   "INVALID_CHARACTER_ERR exception is to be thrown, even if the attribute " +
+   "is already present. (toggleAttribute)")
+
+// Step 2
+test(function() {
+  var el = document.createElement("div")
+  assert_true(el.toggleAttribute("ALIGN"))
+  assert_true(!el.hasAttributeNS("", "ALIGN"))
+  assert_true(el.hasAttributeNS("", "align"))
+  assert_true(el.hasAttribute("align"))
+  assert_true(!el.toggleAttribute("ALIGN"))
+  assert_true(!el.hasAttributeNS("", "ALIGN"))
+  assert_true(!el.hasAttributeNS("", "align"))
+  assert_true(!el.hasAttribute("align"))
+}, "toggleAttribute should lowercase its name argument (upper case attribute)")
+test(function() {
+  var el = document.createElement("div")
+  assert_true(el.toggleAttribute("CHEEseCaKe"))
+  assert_true(!el.hasAttributeNS("", "CHEEseCaKe"))
+  assert_true(el.hasAttributeNS("", "cheesecake"))
+  assert_true(el.hasAttribute("cheesecake"))
+}, "toggleAttribute should lowercase its name argument (mixed case attribute)")
+
+// Step 3
+test(function() {
+  var el = document.createElement("foo")
+  var tests = ["xmlns", "xmlns:a", "xmlnsx", "xmlns0"]
+  for (var i = 0; i < tests.length; i++) {
+    assert_true(el.toggleAttribute(tests[i]));
+    assert_true(el.hasAttribute(tests[i]));
+  }
+}, "toggleAttribute should not throw even when qualifiedName starts with 'xmlns'")
+
+// Step 4
+test(function() {
+  var el = document.createElement("foo")
+  for (var i = 0; i < valid_names.length; i++) {
+    assert_true(el.toggleAttribute(valid_names[i]))
+    assert_true(el.hasAttribute(valid_names[i]))
+    assert_true(!el.toggleAttribute(valid_names[i]))
+    assert_true(!el.hasAttribute(valid_names[i]))
+    // Check using force attr
+    assert_true(el.toggleAttribute(valid_names[i], true))
+    assert_true(el.hasAttribute(valid_names[i]))
+    assert_true(el.toggleAttribute(valid_names[i], true))
+    assert_true(el.hasAttribute(valid_names[i]))
+    assert_true(!el.toggleAttribute(valid_names[i], false))
+    assert_true(!el.hasAttribute(valid_names[i]))
+  }
+}, "Basic functionality should be intact. (toggleAttribute)")
+
+// Step 5
+test(function() {
+  var el = document.createElement("foo")
+  el.toggleAttribute("a")
+  el.toggleAttribute("b")
+  el.setAttribute("a", "thing")
+  el.toggleAttribute("c")
+  attributes_are(el, [["a", "thing"],
+                      ["b", ""],
+                      ["c", ""]])
+}, "toggleAttribute should not change the order of previously set attributes.")
+test(function() {
+  var el = document.createElement("baz")
+  el.setAttributeNS("ab", "attr", "fail")
+  el.setAttributeNS("kl", "attr", "pass")
+  el.toggleAttribute("attr")
+  attributes_are(el, [["attr", "pass", "kl"]])
+}, "toggleAttribute should set the first attribute with the given name")
+test(function() {
+  // Based on a test by David Flanagan.
+  var el = document.createElement("baz")
+  el.setAttributeNS("foo", "foo:bar", "1");
+  el.setAttributeNS("foo", "foo:bat", "2");
+  assert_equals(el.getAttribute("foo:bar"), "1")
+  assert_equals(el.getAttribute("foo:bat"), "2")
+  attr_is(el.attributes[0], "1", "bar", "foo", "foo", "foo:bar")
+  attr_is(el.attributes[1], "2", "bat", "foo", "foo", "foo:bat")
+  el.toggleAttribute("foo:bar");
+  assert_true(!el.hasAttribute("foo:bar"))
+  attr_is(el.attributes[0], "2", "bat", "foo", "foo", "foo:bat")
+}, "toggleAttribute should set the attribute with the given qualified name")
+
 // setAttribute exhaustive tests
 // Step 1
 test(function() {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/006-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/006-1.html
index 8d26596..bc2e10b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/006-1.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/006-1.html
@@ -4,9 +4,12 @@
 onpagehide = function() {
   onpagehide = null;
   setTimeout(function() {
-               parent.t.done()
+               parent.t.unreached_func('setTimeout survived navigatoin');
              }, 1000);
 }
+if (parent.loaded) {
+  setTimeout(function() { parent.t.done(); }, 2000);
+}
 onload = function() {
   if (!parent.loaded) {
     parent.loaded = true;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/manual-001-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual-1.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/manual-001-1.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual-1.html
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/manual-001.html b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual.html
similarity index 85%
rename from third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/manual-001.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual.html
index 6d817a1..ba34c30 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/manual-001.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual.html
@@ -2,4 +2,4 @@
 <title>Document salvagable state after setting pagehide handler</title>
 <script>onpagehide = function() {setTimeout(function(){document.body.innerHTML = "PASS"}, 100)}</script>
 <p>Click the link below then navigate back to this page. Shortly after returning you should see the text "PASS"</p>
-<p><A href="manual-001-1.html">Click here</a>
+<p><a href="pagehide-manual-1.html">Click here</a>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html
index f0dade8..0548e70 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html
@@ -1,9 +1,23 @@
 <!doctype html>
 <meta charset=utf-8>
-<meta name=timeout content=long>
+<meta name="variant" content="?1-10">
+<meta name="variant" content="?11-20">
+<meta name="variant" content="?21-30">
+<meta name="variant" content="?31-40">
+<meta name="variant" content="?41-50">
+<meta name="variant" content="?51-60">
+<meta name="variant" content="?61-70">
+<meta name="variant" content="?71-80">
+<meta name="variant" content="?81-90">
+<meta name="variant" content="?91-100">
+<meta name="variant" content="?101-110">
+<meta name="variant" content="?111-120">
+<meta name="variant" content="?121-130">
+<meta name="variant" content="?131-last">
 <title>Parsing of meta refresh</title>
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
+<script src=/common/subset-tests.js></script>
 <style>
 iframe { display:none }
 </style>
@@ -95,7 +109,7 @@
       return;
     }
     const filename = type === "<meta>" ? "refresh.sub.html" : "refresh.py";
-    async_test(function(t) {
+    subsetTest(async_test, function(t) {
       var iframe = document.createElement('iframe');
       t.add_cleanup(function() {
         document.body.removeChild(iframe);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-depth.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-depth.idl
new file mode 100644
index 0000000..d39c7e8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-depth.idl
@@ -0,0 +1,76 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "Media Capture Depth Stream Extensions" spec.
+// See: https://w3c.github.io/mediacapture-depth/
+
+partial dictionary MediaTrackSupportedConstraints {
+    // Apply to both depth stream track and color stream track:
+    boolean videoKind = true;
+    boolean focalLengthX = false;
+    boolean focalLengthY = false;
+    boolean principalPointX = false;
+    boolean principalPointY = false;
+    boolean deprojectionDistortionCoefficients = false;
+    boolean projectionDistortionCoefficients = false;
+    // Apply to depth stream track:
+    boolean depthNear = false;
+    boolean depthFar = false;
+    boolean depthToVideoTransform = false;
+};
+partial dictionary MediaTrackCapabilities {
+    // Apply to both depth stream track and color stream track:
+    DOMString               videoKind;
+    (double or DoubleRange) focalLengthX;
+    (double or DoubleRange) focalLengthY;
+    (double or DoubleRange) principalPointX;
+    (double or DoubleRange) principalPointY;
+    boolean                 deprojectionDistortionCoefficients;
+    boolean                 projectionDistortionCoefficients;
+    // Apply to depth stream track:
+    (double or DoubleRange) depthNear;
+    (double or DoubleRange) depthFar;
+    boolean                 depthToVideoTransform;
+};
+partial dictionary MediaTrackConstraintSet {
+    // Apply to both depth stream track and color stream track:
+    ConstrainDOMString videoKind;
+    ConstrainDouble    focalLengthX;
+    ConstrainDouble    focalLengthY;
+    ConstrainDouble    principalPointX;
+    ConstrainDouble    principalPointY;
+    ConstrainBoolean   deprojectionDistortionCoefficients;
+    ConstrainBoolean   projectionDistortionCoefficients;
+    // Apply to depth stream track:
+    ConstrainDouble    depthNear;
+    ConstrainDouble    depthFar;
+    ConstrainBoolean   depthToVideoTransform;
+};
+partial dictionary MediaTrackSettings {
+    // Apply to both depth stream track and color stream track:
+    DOMString              videoKind;
+    double                 focalLengthX;
+    double                 focalLengthY;
+    double                 principalPointX;
+    double                 principalPointY;
+    DistortionCoefficients deprojectionDistortionCoefficients;
+    DistortionCoefficients projectionDistortionCoefficients;
+    // Apply to depth stream track:
+    double                 depthNear;
+    double                 depthFar;
+    Transformation         depthToVideoTransform;
+};
+dictionary DistortionCoefficients {
+    double k1;
+    double k2;
+    double p1;
+    double p2;
+    double k3;
+};
+dictionary Transformation {
+    Float32Array transformationMatrix;
+    DOMString    videoDeviceId;
+};
+enum VideoKindEnum {
+    "color",
+    "depth"
+};
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/presentation-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/presentation-api.idl
new file mode 100644
index 0000000..3f6e631
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/presentation-api.idl
@@ -0,0 +1,111 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "Presentation API" spec.
+// See: https://w3c.github.io/presentation-api/
+
+partial interface Navigator {
+    [SecureContext,
+     SameObject]
+    readonly attribute Presentation presentation;
+};
+
+[SecureContext,
+ Exposed=Window]
+interface Presentation {
+};
+partial interface Presentation {
+    attribute PresentationRequest? defaultRequest;
+};
+partial interface Presentation {
+    readonly attribute PresentationReceiver? receiver;
+};
+[Constructor(USVString url),
+ Constructor(sequence<USVString> urls),
+ SecureContext,
+ Exposed=Window]
+interface PresentationRequest : EventTarget {
+    Promise<PresentationConnection>   start();
+    Promise<PresentationConnection>   reconnect(USVString presentationId);
+    Promise<PresentationAvailability> getAvailability();
+
+    attribute EventHandler onconnectionavailable;
+};
+[SecureContext,
+ Exposed=Window]
+interface PresentationAvailability : EventTarget {
+    readonly attribute boolean      value;
+
+             attribute EventHandler onchange;
+};
+[Constructor(DOMString type, PresentationConnectionAvailableEventInit eventInitDict),
+ SecureContext,
+ Exposed=Window]
+interface PresentationConnectionAvailableEvent : Event {
+    [SameObject]
+    readonly attribute PresentationConnection connection;
+};
+
+dictionary PresentationConnectionAvailableEventInit : EventInit {
+    required PresentationConnection connection;
+};
+enum PresentationConnectionState {
+    "connecting",
+    "connected",
+    "closed",
+    "terminated"
+};
+
+enum BinaryType {
+    "blob",
+    "arraybuffer"
+};
+
+[SecureContext,
+ Exposed=Window]
+interface PresentationConnection : EventTarget {
+    readonly attribute USVString                   id;
+    readonly attribute USVString                   url;
+    readonly attribute PresentationConnectionState state;
+    void close();
+    void terminate();
+             attribute EventHandler                onconnect;
+             attribute EventHandler                onclose;
+             attribute EventHandler                onterminate;
+
+    // Communication
+             attribute BinaryType                  binaryType;
+             attribute EventHandler                onmessage;
+    void send(DOMString message);
+    void send(Blob data);
+    void send(ArrayBuffer data);
+    void send(ArrayBufferView data);
+};
+enum PresentationConnectionCloseReason {
+    "error",
+    "closed",
+    "wentaway"
+};
+
+[Constructor(DOMString type, PresentationConnectionCloseEventInit eventInitDict),
+ SecureContext,
+ Exposed=Window]
+interface PresentationConnectionCloseEvent : Event {
+    readonly attribute PresentationConnectionCloseReason reason;
+    readonly attribute DOMString                         message;
+};
+
+dictionary PresentationConnectionCloseEventInit : EventInit {
+    required PresentationConnectionCloseReason reason;
+             DOMString                         message = "";
+};
+[SecureContext,
+ Exposed=Window]
+interface PresentationReceiver {
+    readonly attribute Promise<PresentationConnectionList> connectionList;
+};
+[SecureContext,
+ Exposed=Window]
+interface PresentationConnectionList : EventTarget {
+    readonly attribute FrozenArray<PresentationConnection> connections;
+             attribute EventHandler                        onconnectionavailable;
+};
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/shape-detection-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/shape-detection-api.idl
new file mode 100644
index 0000000..8f80098
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/shape-detection-api.idl
@@ -0,0 +1,67 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "Accelerated Shape Detection in Images" spec.
+// See: https://wicg.github.io/shape-detection-api/
+
+[Exposed=(Window,Worker),
+ Constructor(optional FaceDetectorOptions faceDetectorOptions)]
+interface FaceDetector {
+  Promise<sequence<DetectedFace>> detect(ImageBitmapSource image);
+};
+
+dictionary FaceDetectorOptions {
+  unsigned short maxDetectedFaces;
+  boolean fastMode;
+};
+
+interface DetectedFace {
+  [SameObject] readonly attribute DOMRectReadOnly boundingBox;
+  [SameObject] readonly attribute FrozenArray<Landmark>? landmarks;
+};
+
+dictionary Landmark {
+  required FrozenArray<Point2D> locations;
+  LandmarkType type;
+};
+
+enum LandmarkType {
+  "mouth",
+  "eye",
+  "nose"
+};
+
+[Exposed=(Window,Worker),
+ Constructor(optional BarcodeDetectorOptions barcodeDetectorOptions)]
+interface BarcodeDetector {
+  readonly attribute FrozenArray<BarcodeFormat> supportedFormats;
+
+  Promise<sequence<DetectedBarcode>> detect(ImageBitmapSource image);
+};
+
+dictionary BarcodeDetectorOptions {
+  sequence<BarcodeFormat> formats;
+};
+
+interface DetectedBarcode {
+  [SameObject] readonly attribute DOMRectReadOnly boundingBox;
+  [SameObject] readonly attribute DOMString rawValue;
+  [SameObject] readonly attribute BarcodeFormat format;
+  [SameObject] readonly attribute FrozenArray<Point2D> cornerPoints;
+};
+
+enum BarcodeFormat {
+  "aztec",
+  "code_128",
+  "code_39",
+  "code_93",
+  "codabar",
+  "data_matrix",
+  "ean_13",
+  "ean_8",
+  "itf",
+  "pdf417",
+  "qr_code",
+  "unknown",
+  "upc_a",
+  "upc_e"
+};
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-depth/META.yml b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-depth/META.yml
new file mode 100644
index 0000000..6799cdf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-depth/META.yml
@@ -0,0 +1,4 @@
+suggested_reviewers:
+  - anssiko
+  - Honry
+  - robman
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-depth/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-depth/idlharness.html
new file mode 100644
index 0000000..29e3aa5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-depth/idlharness.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset=utf-8>
+  <title>Media Capture Depth Stream Extensions IDL test</title>
+  <link rel="help" href="See https://w3c.github.io/mediacapture-depth/">
+  <script src="/resources/testharness.js"></script>
+  <script src="/resources/testharnessreport.js"></script>
+  <script src="/resources/WebIDLParser.js"></script>
+  <script src="/resources/idlharness.js"></script>
+</head>
+
+<body>
+  <script>
+    'use strict';
+
+    promise_test(async () => {
+      const idl = await fetch('/interfaces/mediacapture-depth.idl').then(r => r.text());
+      const main = await fetch('/interfaces/mediacapture-main.idl').then(r => r.text());
+
+      var idl_array = new IdlArray();
+      idl_array.add_idls(idl);
+      idl_array.add_dependency_idls(main);
+      idl_array.test();
+    }, 'mediacapture-depth interfaces');
+  </script>
+  <div id="log"></div>
+</body>
+
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-getSettings.https.html b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-getSettings.https.html
index 4c2feef3..0eb3a26c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-getSettings.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-getSettings.https.html
@@ -75,4 +75,36 @@
       }
     });
   }, 'groupId is correctly reported by getSettings() for all devices');
+
+  promise_test(t => {
+    return navigator.mediaDevices.getUserMedia({audio: true}).then(stream => {
+      let settings = stream.getAudioTracks()[0].getSettings();
+      assert_equals(typeof(settings.deviceId), "string",
+                    "deviceId should exist and it should be a string.");
+      assert_equals(typeof(settings.groupId), "string",
+                    "groupId should exist and it should be a string.");
+      assert_equals(typeof(settings.volume), "number",
+                    "volume should exist and it should be a number.");
+      assert_true(settings.volume >= 0.0 && settings.volume <= 1.0,
+                  "volume should be a number in the range [0.0, 1.0].");
+      assert_equals(typeof(settings.sampleRate), "number",
+                    "sampleRate should exist and it should be a number.");
+      assert_true(settings.sampleRate > 0, "sampleRate should be positive.");
+      assert_equals(typeof(settings.sampleSize), "number",
+                    "sampleSize should exist and it should be a number.");
+      assert_true(settings.sampleSize > 0, "sampleSize should be positive.");
+      assert_equals(typeof(settings.echoCancellation), "boolean",
+                    "echoCancellation should exist and it should be a boolean.");
+      assert_equals(typeof(settings.autoGainControl), "boolean",
+                    "autoGainControl should exist and it should be a boolean.");
+      assert_equals(typeof(settings.noiseSuppression), "boolean",
+                    "noiseSuppression should exist and it should be a boolean.");
+      assert_equals(typeof(settings.latency), "number",
+                    "latency should exist and it should be a number.");
+      assert_true(settings.latency >= 0, "latency should not be negative.");
+      assert_equals(typeof(settings.channelCount), "number",
+                    "channelCount should exist and it should be a number.");
+      assert_true(settings.channelCount > 0, "channelCount should be positive.");
+    });
+  }, 'audio properties are reported by getSettings()');
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method-manual.https.html b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method-manual.https.html
index f2883b8..5ea639b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method-manual.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-canmakepayment-method-manual.https.html
@@ -126,9 +126,12 @@
 
 function manualTest1(elem){
   elem.disabled = true;
+
+  // NB: request.show has to be called outside of promise_test to ensure the
+  // user's click is still visible to PaymentRequest.show.
+  const request = new PaymentRequest(defaultMethods, defaultDetails);
+  const acceptPromise = request.show(); // Sets state to "interactive"
   promise_test(async t => {
-    const request = new PaymentRequest(defaultMethods, defaultDetails);
-    const acceptPromise = request.show(); // Sets state to "interactive"
     const canMakePaymentPromise = request.canMakePayment();
     try {
       const result = await canMakePaymentPromise;
@@ -148,11 +151,14 @@
 }
 
 function manualTest2(elem){
- elem.disabled = true;
+  elem.disabled = true;
+
+  // See above for why it's important for these lines to be outside of
+  // promise_test.
+  const request = new PaymentRequest(defaultMethods, defaultDetails);
+  const acceptPromise = request.show(); // The state is now "interactive"
+  acceptPromise.catch(() => {}); // no-op, just to silence unhandled rejection in devtools.
   promise_test(async t => {
-    const request = new PaymentRequest(defaultMethods, defaultDetails);
-    const acceptPromise = request.show(); // The state is now "interactive"
-    acceptPromise.catch(() => {}); // no-op, just to silence unhandled rejection in devtools.
     await request.abort(); // The state is now "closed"
     await promise_rejects(t, "InvalidStateError", request.canMakePayment());
     try {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/presentation-api/controlling-ua/idlharness.https.html b/third_party/WebKit/LayoutTests/external/wpt/presentation-api/controlling-ua/idlharness.https.html
index 1077ddfd..04d1741 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/presentation-api/controlling-ua/idlharness.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/presentation-api/controlling-ua/idlharness.https.html
@@ -8,134 +8,35 @@
 <script src="/resources/WebIDLParser.js"></script>
 <script src="/resources/idlharness.js"></script>
 
-<script id="untested_idl" type="text/plain">
-interface Navigator {
-};
-interface EventTarget {
-};
-interface EventHandler {
-};
-interface Event {
-};
-dictionary EventInit {
-};
-</script>
-
-<script id='idl' type="text/plain">
-partial interface Navigator {
-    [SecureContext,
-     SameObject]
-    readonly attribute Presentation presentation;
-};
-
-[SecureContext,
- Exposed=Window]
-interface Presentation {
-};
-
-partial interface Presentation {
-    attribute PresentationRequest? defaultRequest;
-};
-
-[Constructor(USVString url),
- Constructor(sequence<USVString> urls),
- SecureContext,
- Exposed=Window]
-interface PresentationRequest : EventTarget {
-    Promise<PresentationConnection>   start();
-    Promise<PresentationConnection>   reconnect(USVString presentationId);
-    Promise<PresentationAvailability> getAvailability();
-
-    attribute EventHandler onconnectionavailable;
-};
-
-[SecureContext,
- Exposed=Window]
-interface PresentationAvailability : EventTarget {
-    readonly attribute boolean      value;
-             attribute EventHandler onchange;
-};
-
-[Constructor(DOMString type, PresentationConnectionAvailableEventInit eventInitDict),
- SecureContext,
- Exposed=Window]
-interface PresentationConnectionAvailableEvent : Event {
-    [SameObject]
-    readonly attribute PresentationConnection connection;
-};
-
-dictionary PresentationConnectionAvailableEventInit : EventInit {
-    required PresentationConnection connection;
-};
-
-enum PresentationConnectionState {
-    "connecting",
-    "connected",
-    "closed",
-    "terminated"
-};
-
-enum BinaryType {
-    "blob",
-    "arraybuffer"
-};
-
-[SecureContext,
- Exposed=Window]
-interface PresentationConnection : EventTarget {
-    readonly attribute USVString                   id;
-    readonly attribute USVString                   url;
-    readonly attribute PresentationConnectionState state;
-    void close();
-    void terminate();
-             attribute EventHandler                onconnect;
-             attribute EventHandler                onclose;
-             attribute EventHandler                onterminate;
-
-    // Communication
-             attribute BinaryType                  binaryType;
-             attribute EventHandler                onmessage;
-    void send(DOMString message);
-    void send(Blob data);
-    void send(ArrayBuffer data);
-    void send(ArrayBufferView data);
-};
-
-enum PresentationConnectionCloseReason {
-    "error",
-    "closed",
-    "wentaway"
-};
-
-[Constructor(DOMString type, PresentationConnectionCloseEventInit eventInitDict),
- SecureContext,
- Exposed=Window]
-interface PresentationConnectionCloseEvent : Event {
-    readonly attribute PresentationConnectionCloseReason reason;
-    readonly attribute DOMString                         message;
-};
-
-dictionary PresentationConnectionCloseEventInit : EventInit {
-    required PresentationConnectionCloseReason reason;
-             DOMString                         message = "";
-};
-</script>
-
 <script>
-    (function() {
-        "use strict";
-        var idl_array = new IdlArray();
-        var idls = document.getElementById('idl').textContent;
-        idl_array.add_untested_idls(document.getElementById('untested_idl').textContent);
-        idl_array.add_idls(idls);
-        window.presentation_request = new PresentationRequest("/presentation-api/receiving-ua/idlharness.html");
-        window.presentation_request_urls = new PresentationRequest(["/presentation-api/receiving-ua/idlharness.html",
-            "https://www.example.com/presentation.html"]);
-        navigator.presentation.defaultRequest = presentation_request;
-        idl_array.add_objects({
-            Presentation: ['navigator.presentation'],
-            PresentationRequest: ['navigator.presentation.defaultRequest', 'presentation_request', 'presentation_request_urls']
-        });
-        idl_array.test();
-    })();
+  "use strict";
+
+  promise_test(async () => {
+    const srcs = ['presentation-api', 'dom', 'html'];
+    const [idl, dom, html] = await Promise.all(
+      srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
+
+    const idl_array = new IdlArray();
+    idl_array.add_idls(idl, {
+      except: [
+        'PresentationReceiver',
+        'PresentationConnectionList'
+      ]
+    });
+    idl_array.add_dependency_idls(dom);
+    idl_array.add_dependency_idls(html);
+
+    window.presentation_request = new PresentationRequest("/presentation-api/receiving-ua/idlharness.html");
+    window.presentation_request_urls = new PresentationRequest([
+      "/presentation-api/receiving-ua/idlharness.html",
+      "https://www.example.com/presentation.html"
+    ]);
+    navigator.presentation.defaultRequest = presentation_request;
+
+    idl_array.add_objects({
+        Presentation: ['navigator.presentation'],
+        PresentationRequest: ['navigator.presentation.defaultRequest', 'presentation_request', 'presentation_request_urls']
+    });
+    idl_array.test();
+  }, "Test IDL implementation of Presentation API");
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/presentation-api/receiving-ua/support/idlharness_receiving-ua.html b/third_party/WebKit/LayoutTests/external/wpt/presentation-api/receiving-ua/support/idlharness_receiving-ua.html
index 32deeb4..2d5a5b1 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/presentation-api/receiving-ua/support/idlharness_receiving-ua.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/presentation-api/receiving-ua/support/idlharness_receiving-ua.html
@@ -11,120 +11,22 @@
 <script src="../common.js"></script>
 <script src="stash.js"></script>
 
-<script id="untested_idl" type="text/plain">
-interface Navigator {
-};
-interface EventTarget {
-};
-interface EventHandler {
-};
-interface Event {
-};
-dictionary EventInit {
-};
-</script>
-
-<script id='idl' type="text/plain">
-partial interface Navigator {
-    [SecureContext,
-     SameObject]
-    readonly attribute Presentation presentation;
-};
-
-[SecureContext,
- Exposed=Window]
-interface Presentation {
-};
-
-partial interface Presentation {
-    readonly attribute PresentationReceiver? receiver;
-};
-
-[Constructor(DOMString type, PresentationConnectionAvailableEventInit eventInitDict),
- SecureContext,
- Exposed=Window]
-interface PresentationConnectionAvailableEvent : Event {
-    [SameObject]
-    readonly attribute PresentationConnection connection;
-};
-
-dictionary PresentationConnectionAvailableEventInit : EventInit {
-    required PresentationConnection connection;
-};
-
-enum PresentationConnectionState {
-    "connecting",
-    "connected",
-    "closed",
-    "terminated"
-};
-
-enum BinaryType {
-    "blob",
-    "arraybuffer"
-};
-
-[SecureContext,
- Exposed=Window]
-interface PresentationConnection : EventTarget {
-    readonly attribute USVString                   id;
-    readonly attribute USVString                   url;
-    readonly attribute PresentationConnectionState state;
-    void close();
-    void terminate();
-             attribute EventHandler                onconnect;
-             attribute EventHandler                onclose;
-             attribute EventHandler                onterminate;
-
-    // Communication
-             attribute BinaryType                  binaryType;
-             attribute EventHandler                onmessage;
-    void send(DOMString message);
-    void send(Blob data);
-    void send(ArrayBuffer data);
-    void send(ArrayBufferView data);
-};
-
-enum PresentationConnectionCloseReason {
-    "error",
-    "closed",
-    "wentaway"
-};
-
-[Constructor(DOMString type, PresentationConnectionCloseEventInit eventInitDict),
- SecureContext,
- Exposed=Window]
-interface PresentationConnectionCloseEvent : Event {
-    readonly attribute PresentationConnectionCloseReason reason;
-    readonly attribute DOMString                         message;
-};
-
-dictionary PresentationConnectionCloseEventInit : EventInit {
-    required PresentationConnectionCloseReason reason;
-             DOMString                         message = "";
-};
-
-[SecureContext,
- Exposed=Window]
-interface PresentationReceiver {
-    readonly attribute Promise<PresentationConnectionList> connectionList;
-};
-
-[SecureContext,
- Exposed=Window]
-interface PresentationConnectionList : EventTarget {
-    readonly attribute FrozenArray<PresentationConnection> connections;
-             attribute EventHandler                        onconnectionavailable;
-};
-</script>
-
 <script>
-    (() => {
-        'use strict';
+    'use strict';
+    (async () => {
+        const srcs = ['presentation-api', 'dom', 'html'];
+        const [idl, dom, html] = await Promise.all(
+            srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
+
         const idl_array = new IdlArray();
-        const idls = document.getElementById('idl').textContent;
-        idl_array.add_untested_idls(document.getElementById('untested_idl').textContent);
-        idl_array.add_idls(idls);
+        idl_array.add_idls(idl, {
+            except: [
+                'PresentationRequest',
+                'PresentationAvailability',
+            ]
+        });
+        idl_array.add_dependency_idls(dom);
+        idl_array.add_dependency_idls(html);
         idl_array.add_objects({
             Presentation: ['navigator.presentation'],
             PresentationReceiver: ['navigator.presentation.receiver']
diff --git a/third_party/WebKit/LayoutTests/external/wpt/shape-detection/META.yml b/third_party/WebKit/LayoutTests/external/wpt/shape-detection/META.yml
new file mode 100644
index 0000000..95fdd2b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/shape-detection/META.yml
@@ -0,0 +1,2 @@
+suggested_reviewers:
+  - yellowdoge
diff --git a/third_party/WebKit/LayoutTests/external/wpt/shape-detection/idlharness.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/shape-detection/idlharness.any-expected.txt
new file mode 100644
index 0000000..fbd79eb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/shape-detection/idlharness.any-expected.txt
@@ -0,0 +1,46 @@
+This is a testharness.js-based test.
+PASS Test shape-detection IDL interface
+PASS FaceDetector interface: existence and properties of interface object
+PASS FaceDetector interface object length
+PASS FaceDetector interface object name
+PASS FaceDetector interface: existence and properties of interface prototype object
+PASS FaceDetector interface: existence and properties of interface prototype object's "constructor" property
+PASS FaceDetector interface: existence and properties of interface prototype object's @@unscopables property
+PASS FaceDetector interface: operation detect(ImageBitmapSource)
+PASS Unscopable handled correctly for detect(ImageBitmapSource) on FaceDetector
+FAIL DetectedFace interface: existence and properties of interface object assert_throws: interface object didn't throw TypeError when called as a constructor function "function () { [native code] }" did not throw
+PASS DetectedFace interface object length
+PASS DetectedFace interface object name
+PASS DetectedFace interface: existence and properties of interface prototype object
+PASS DetectedFace interface: existence and properties of interface prototype object's "constructor" property
+PASS DetectedFace interface: existence and properties of interface prototype object's @@unscopables property
+PASS DetectedFace interface: attribute boundingBox
+PASS Unscopable handled correctly for boundingBox property on DetectedFace
+PASS DetectedFace interface: attribute landmarks
+PASS Unscopable handled correctly for landmarks property on DetectedFace
+PASS BarcodeDetector interface: existence and properties of interface object
+PASS BarcodeDetector interface object length
+PASS BarcodeDetector interface object name
+PASS BarcodeDetector interface: existence and properties of interface prototype object
+PASS BarcodeDetector interface: existence and properties of interface prototype object's "constructor" property
+PASS BarcodeDetector interface: existence and properties of interface prototype object's @@unscopables property
+FAIL BarcodeDetector interface: attribute supportedFormats assert_true: The prototype object must have a property "supportedFormats" expected true got false
+PASS Unscopable handled correctly for supportedFormats property on BarcodeDetector
+PASS BarcodeDetector interface: operation detect(ImageBitmapSource)
+PASS Unscopable handled correctly for detect(ImageBitmapSource) on BarcodeDetector
+FAIL DetectedBarcode interface: existence and properties of interface object assert_throws: interface object didn't throw TypeError when called as a constructor function "function () { [native code] }" did not throw
+PASS DetectedBarcode interface object length
+PASS DetectedBarcode interface object name
+PASS DetectedBarcode interface: existence and properties of interface prototype object
+PASS DetectedBarcode interface: existence and properties of interface prototype object's "constructor" property
+PASS DetectedBarcode interface: existence and properties of interface prototype object's @@unscopables property
+PASS DetectedBarcode interface: attribute boundingBox
+PASS Unscopable handled correctly for boundingBox property on DetectedBarcode
+PASS DetectedBarcode interface: attribute rawValue
+PASS Unscopable handled correctly for rawValue property on DetectedBarcode
+FAIL DetectedBarcode interface: attribute format assert_true: The prototype object must have a property "format" expected true got false
+PASS Unscopable handled correctly for format property on DetectedBarcode
+PASS DetectedBarcode interface: attribute cornerPoints
+PASS Unscopable handled correctly for cornerPoints property on DetectedBarcode
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/shape-detection/idlharness.any.js b/third_party/WebKit/LayoutTests/external/wpt/shape-detection/idlharness.any.js
new file mode 100644
index 0000000..ea772689
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/shape-detection/idlharness.any.js
@@ -0,0 +1,12 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// See: https://wicg.github.io/shape-detection-api/
+
+promise_test(async () => {
+  const idl = await fetch('/interfaces/shape-detection-api.idl').then(r => r.text());
+
+  const idl_array = new IdlArray();
+  idl_array.add_idls(idl);
+  idl_array.test();
+}, 'Test shape-detection IDL interface');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/shape-detection/idlharness.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/shape-detection/idlharness.any.worker-expected.txt
new file mode 100644
index 0000000..22e87b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/shape-detection/idlharness.any.worker-expected.txt
@@ -0,0 +1,24 @@
+This is a testharness.js-based test.
+PASS Test shape-detection IDL interface
+PASS FaceDetector interface: existence and properties of interface object
+PASS FaceDetector interface object length
+PASS FaceDetector interface object name
+PASS FaceDetector interface: existence and properties of interface prototype object
+PASS FaceDetector interface: existence and properties of interface prototype object's "constructor" property
+PASS FaceDetector interface: existence and properties of interface prototype object's @@unscopables property
+PASS FaceDetector interface: operation detect(ImageBitmapSource)
+PASS Unscopable handled correctly for detect(ImageBitmapSource) on FaceDetector
+PASS DetectedFace interface: existence and properties of interface object
+PASS BarcodeDetector interface: existence and properties of interface object
+PASS BarcodeDetector interface object length
+PASS BarcodeDetector interface object name
+PASS BarcodeDetector interface: existence and properties of interface prototype object
+PASS BarcodeDetector interface: existence and properties of interface prototype object's "constructor" property
+PASS BarcodeDetector interface: existence and properties of interface prototype object's @@unscopables property
+FAIL BarcodeDetector interface: attribute supportedFormats assert_true: The prototype object must have a property "supportedFormats" expected true got false
+PASS Unscopable handled correctly for supportedFormats property on BarcodeDetector
+PASS BarcodeDetector interface: operation detect(ImageBitmapSource)
+PASS Unscopable handled correctly for detect(ImageBitmapSource) on BarcodeDetector
+PASS DetectedBarcode interface: existence and properties of interface object
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html b/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html
deleted file mode 100644
index 9f5e2de..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE html>
-<html class="a">
-<head>
-<title>AudioBuffer IDL Test</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/webaudio/js/helpers.js"></script>
-<style type="text/css">
-    #event-target-idl,
-    #base-audio-context-idl
-    { visibility:hidden; height: 0px;}
-  </style>
-</head>
-<body class="a">
-
-   <pre id="event-target-idl">interface EventTarget {
-  void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
-  void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
-  boolean dispatchEvent(Event event);
-};
-
-/*
-callback interface EventListener {
-  void handleEvent(Event event);
-};
-*/
-// Callback interfaces are not supported yet, but that's ok
-interface EventListener {};
-</pre>
-
-   <pre id="base-audio-context-idl">callback DecodeErrorCallback = void (DOMException error);
-callback DecodeSuccessCallback = void (AudioBuffer decodedData);
-
-interface BaseAudioContext : EventTarget {
-    readonly        attribute AudioDestinationNode destination;
-    readonly        attribute float                sampleRate;
-    readonly        attribute double               currentTime;
-    readonly        attribute AudioListener        listener;
-    readonly        attribute AudioContextState    state;
-    readonly        attribute double               baseLatency;
-    Promise&lt;void&gt;          resume ();
-                    attribute EventHandler         onstatechange;
-    AudioBuffer            createBuffer (unsigned long numberOfChannels, unsigned long length, float sampleRate);
-    Promise&lt;AudioBuffer&gt;   decodeAudioData (ArrayBuffer audioData, optional DecodeSuccessCallback successCallback, optional DecodeErrorCallback errorCallback);
-    AudioBufferSourceNode  createBufferSource ();
-    ConstantSourceNode     createConstantSource ();
-    ScriptProcessorNode    createScriptProcessor (optional unsigned long bufferSize = 0
-              , optional unsigned long numberOfInputChannels = 2
-              , optional unsigned long numberOfOutputChannels = 2
-              );
-    AnalyserNode           createAnalyser ();
-    GainNode               createGain ();
-    DelayNode              createDelay (optional double maxDelayTime);
-    BiquadFilterNode       createBiquadFilter ();
-    IIRFilterNode          createIIRFilter (sequence&lt;double&gt; feedforward, sequence&lt;double&gt; feedback);
-    WaveShaperNode         createWaveShaper ();
-    PannerNode             createPanner ();
-    StereoPannerNode       createStereoPanner ();
-    ConvolverNode          createConvolver ();
-    ChannelSplitterNode    createChannelSplitter (optional unsigned long numberOfOutputs = 6
-              );
-    ChannelMergerNode      createChannelMerger (optional unsigned long numberOfInputs = 6
-              );
-    DynamicsCompressorNode createDynamicsCompressor ();
-    OscillatorNode         createOscillator ();
-    PeriodicWave           createPeriodicWave (Float32Array real, Float32Array imag, optional PeriodicWaveConstraints constraints);
-};</pre>
-
-   <pre id="audio-buffer-idl">dictionary AudioBufferOptions {
-             unsigned long numberOfChannels = 1;
-    required unsigned long length;
-    required float         sampleRate;
-};
-
-[Constructor(AudioBufferOptions options)]
-interface AudioBuffer {
-    readonly        attribute float         sampleRate;
-    readonly        attribute unsigned long length;
-    readonly        attribute double        duration;
-    readonly        attribute unsigned long numberOfChannels;
-    Float32Array getChannelData (unsigned long channel);
-    void         copyFromChannel (Float32Array destination, unsigned long channelNumber, optional unsigned long startInChannel = 0
-              );
-    void         copyToChannel (Float32Array source, unsigned long channelNumber, optional unsigned long startInChannel = 0
-              );
-};</pre>
-
-  <div id="log"></div>
-
-  <script>
-(function() {
-  var idl_array = new IdlArray();
-  idl_array.add_untested_idls(document.getElementById("event-target-idl").textContent);
-  idl_array.add_untested_idls(document.getElementById("base-audio-context-idl").textContent);
-  idl_array.add_idls(document.getElementById("audio-buffer-idl").textContent);
-
-  // For these tests the value of the arguments is unimportant.
-  audio_buffer = (new AudioContext).createBuffer(numberOfChannels = 1, length = 256, sampleRate = 44100);
-
-  idl_array.add_objects({AudioBuffer: ["audio_buffer"]});
-  idl_array.test();
-})();
-  </script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html b/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html
deleted file mode 100644
index 2769611..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html>
-<html class="a">
-<head>
-<title>AudioDestinationNode IDL Test</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/webaudio/js/helpers.js"></script>
-<style type="text/css">
-    #event-target-idl,
-    #base-audio-context-idl,
-    #audio-node-idl
-    { visibility:hidden; height: 0px;}
-  </style>
-</head>
-<body class="a">
-
-   <pre id="event-target-idl">interface EventTarget {
-  void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
-  void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
-  boolean dispatchEvent(Event event);
-};
-
-/*
-callback interface EventListener {
-  void handleEvent(Event event);
-};
-*/
-// Callback interfaces are not supported yet, but that's ok
-interface EventListener {};
-</pre>
-
-   <pre id="base-audio-context-idl">callback DecodeErrorCallback = void (DOMException error);
-
-callback DecodeSuccessCallback = void (AudioBuffer decodedData);
-
-interface BaseAudioContext : EventTarget {
-    readonly        attribute AudioDestinationNode destination;
-    readonly        attribute float                sampleRate;
-    readonly        attribute double               currentTime;
-    readonly        attribute AudioListener        listener;
-    readonly        attribute AudioContextState    state;
-    readonly        attribute double               baseLatency;
-    Promise&lt;void&gt;          resume ();
-                    attribute EventHandler         onstatechange;
-    AudioBuffer            createBuffer (unsigned long numberOfChannels, unsigned long length, float sampleRate);
-    Promise&lt;AudioBuffer&gt;   decodeAudioData (ArrayBuffer audioData, optional DecodeSuccessCallback successCallback, optional DecodeErrorCallback errorCallback);
-    AudioBufferSourceNode  createBufferSource ();
-    ConstantSourceNode     createConstantSource ();
-    ScriptProcessorNode    createScriptProcessor (optional unsigned long bufferSize = 0
-              , optional unsigned long numberOfInputChannels = 2
-              , optional unsigned long numberOfOutputChannels = 2
-              );
-    AnalyserNode           createAnalyser ();
-    GainNode               createGain ();
-    DelayNode              createDelay (optional double maxDelayTime);
-    BiquadFilterNode       createBiquadFilter ();
-    IIRFilterNode          createIIRFilter (sequence&lt;double&gt; feedforward, sequence&lt;double&gt; feedback);
-    WaveShaperNode         createWaveShaper ();
-    PannerNode             createPanner ();
-    StereoPannerNode       createStereoPanner ();
-    ConvolverNode          createConvolver ();
-    ChannelSplitterNode    createChannelSplitter (optional unsigned long numberOfOutputs = 6
-              );
-    ChannelMergerNode      createChannelMerger (optional unsigned long numberOfInputs = 6
-              );
-    DynamicsCompressorNode createDynamicsCompressor ();
-    OscillatorNode         createOscillator ();
-    PeriodicWave           createPeriodicWave (Float32Array real, Float32Array imag, optional PeriodicWaveConstraints constraints);
-};</pre>
-
-   <pre id="audio-node-idl">enum ChannelCountMode {
-    "max",
-    "clamped-max",
-    "explicit"
-};
-
-enum ChannelInterpretation {
-    "speakers",
-    "discrete"
-};
-
-interface AudioNode : EventTarget {
-
-    void connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0);
-    void connect(AudioParam destination, optional unsigned long output = 0);
-    void disconnect(optional unsigned long output = 0);
-
-    readonly attribute BaseAudioContext context;
-    readonly attribute unsigned long numberOfInputs;
-    readonly attribute unsigned long numberOfOutputs;
-
-    // Channel up-mixing and down-mixing rules for all inputs.
-    attribute unsigned long channelCount;
-    attribute ChannelCountMode channelCountMode;
-    attribute ChannelInterpretation channelInterpretation;
-
-};</pre>
-
-   <pre id="audio-destination-node-idl">interface AudioDestinationNode : AudioNode {
-
-    readonly attribute unsigned long maxChannelCount;
-
-};</pre>
-
-  <div id="log"></div>
-
-  <script>
-(function() {
-  var idl_array = new IdlArray();
-  idl_array.add_untested_idls(document.getElementById("event-target-idl").textContent);
-  idl_array.add_untested_idls(document.getElementById("base-audio-context-idl").textContent);
-  idl_array.add_untested_idls(document.getElementById("audio-node-idl").textContent);
-  idl_array.add_idls(document.getElementById("audio-destination-node-idl").textContent);
-
-  audio_destination_node = (new AudioContext).destination;
-
-  idl_array.add_objects({AudioDestinationNode: ["audio_destination_node"]});
-  idl_array.test();
-})();
-  </script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/idl-test.html b/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/idl-test.html
deleted file mode 100644
index 45ddad5c..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/webaudio/the-audio-api/the-audioparam-interface/idl-test.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html>
-<html class="a">
-<head>
-<title>AudioParam IDL Test</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<style type="text/css">
-    #audio-param-idl
-    { visibility:hidden; height: 0px;}
-  </style>
-</head>
-<body class="a">
-
-   <pre id="audio-param-idl">interface AudioParam {
-
-                    attribute float value;
-    readonly        attribute float defaultValue;
-    readonly        attribute float minValue;
-    readonly        attribute float maxValue;
-
-    // Parameter automation.
-    void setValueAtTime(float value, double startTime);
-    void linearRampToValueAtTime(float value, double endTime);
-    void exponentialRampToValueAtTime(float value, double endTime);
-
-    // Exponentially approach the target value with a rate having the given time constant.
-    void setTargetAtTime(float target, double startTime, double timeConstant);
-
-    // Sets an array of arbitrary parameter values starting at time for the given duration.
-    // The number of values will be scaled to fit into the desired duration.
-    void setValueCurveAtTime(Float32Array values, double startTime, double duration);
-
-    // Cancels all scheduled parameter changes with times greater than or equal to startTime.
-    void cancelScheduledValues(double startTime);
-
-};</pre>
-
-  <div id="log"></div>
-
-  <script>
-(function() {
-  var idl_array = new IdlArray();
-  idl_array.add_idls(document.getElementById("audio-param-idl").textContent);
-
-  delay_time = (new AudioContext).createDelay().delayTime;
-
-  idl_array.add_objects({AudioParam: ["delay_time"]});
-  idl_array.test();
-})();
-  </script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/websockets/constructor/014.html b/third_party/WebKit/LayoutTests/external/wpt/websockets/constructor/014.html
index 579a5d3..b0fdf36 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/websockets/constructor/014.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/websockets/constructor/014.html
@@ -1,6 +1,5 @@
 <!doctype html>
 <title>WebSockets: serialize establish a connection</title>
-<meta name=timeout content=long>
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=../constants.js?pipe=sub></script>
@@ -14,7 +13,7 @@
   var events = 0;
   var prevDate;
   var date;
-  for (var i = 0; i < 4; ++i) {
+  for (var i = 0; i < 2; ++i) {
     ws[i] = new WebSocket(SCHEME_DOMAIN_PORT+'/handshake_sleep_2');
     ws[i].id = i;
     ws[i].onopen = t.step_func(function(e) {
@@ -28,7 +27,7 @@
     }.bind(ws[i]))
     ws[i].onclose = t.step_func(function() {
       events++;
-      if (events == 8) {
+      if (events == 4) {
         t.done();
       }
       this.onclose = t.step_func(function() {assert_unreached()});
diff --git a/third_party/WebKit/LayoutTests/fast/events/mouse-wheel-main-frame-scroll-expected.txt b/third_party/WebKit/LayoutTests/fast/events/mouse-wheel-main-frame-scroll-expected.txt
deleted file mode 100644
index 43e5eeed..0000000
--- a/third_party/WebKit/LayoutTests/fast/events/mouse-wheel-main-frame-scroll-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/WebKit/LayoutTests/fast/events/mouse-wheel-main-frame-scroll.html b/third_party/WebKit/LayoutTests/fast/events/mouse-wheel-main-frame-scroll.html
index e146e97..34f60069 100644
--- a/third_party/WebKit/LayoutTests/fast/events/mouse-wheel-main-frame-scroll.html
+++ b/third_party/WebKit/LayoutTests/fast/events/mouse-wheel-main-frame-scroll.html
@@ -1,27 +1,20 @@
 <!DOCTYPE HTML>
 <html style="height:100%; overflow:scroll;">
 <head>
-<script src="../../resources/js-test.js"></script>
-<script>
-jsTestIsAsync = true;
-
-function finishTest() {
-  if (window.scrollY == 100 && window.scrollX == 0)
-    finishJSTest();
-  else
-    requestAnimationFrame(finishTest);
-}
-
-function test() {
-    if (window.eventSender) {
-        eventSender.mouseMoveTo(50, 50);
-        eventSender.continuousMouseScrollBy(0, -100);
-        finishTest();
-    }
-}
-</script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../../resources/gesture-util.js"></script>
 </head>
-<body onload="test()">
+<script>
+promise_test (async () => {
+	await mouseMoveTo(50, 50);
+	await smoothScroll(100, 50, 50, GestureSourceType.MOUSE_INPUT, 'down', SPEED_INSTANT);
+	await waitFor( () => {
+		return window.scrollY == 100;
+	});
+},"Mouse wheel scrolls properly on main frame.");
+</script>
+<body>
 <div style="height:1000px;">
 </div>
 </body>
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/touch-latched-scroll-node-removed.html b/third_party/WebKit/LayoutTests/fast/events/touch/touch-latched-scroll-node-removed.html
new file mode 100644
index 0000000..44c9754c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/events/touch/touch-latched-scroll-node-removed.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
+<style>
+
+  ::-webkit-scrollbar {
+    display: none;
+  }
+  body {
+    margin: 0px;
+    height: 1000px;
+    width: 1000px;
+  }
+  #parentDiv {
+    background-color: #FF7F7F;
+    height: 600px;
+    width: 600px;
+    overflow: scroll;
+  }
+  #content1 {
+    height: 700px;
+    width: 700px;
+  }
+  #childDiv {
+    background-color: #84BE6A;
+    height: 500px;
+    width: 500px;
+    overflow: scroll;
+  }
+  #content2 {
+    height: 600px;
+    width: 600px;
+  }
+</style>
+
+<div id="parentDiv">
+  <div id="content1">
+    <div id="childDiv">
+      <div id="content2">
+      </div>
+    </div>
+  </div>
+</div>
+
+<script>
+var parentDiv = document.getElementById('parentDiv');
+var childDiv = document.getElementById('childDiv');
+var rect = childDiv.getBoundingClientRect();
+
+function setUpForTest() {
+  if (window.internals)
+    internals.settings.setScrollAnimatorEnabled(false);
+  parentDiv.scrollTo(0, 0);
+  childDiv.scrollTo(0, 0);
+}
+
+childDiv.addEventListener('scroll', () => {
+  if(childDiv.scrollTop > 0)
+    childDiv.remove();
+});
+
+promise_test( async () => {
+  setUpForTest();
+  // Start scrolling on the child div and remove the div in the middle of
+  // scrolling, then check that parentDiv starts scrolling.
+  var x = (rect.left + rect.right) / 2;
+  var y = (rect.top + rect.bottom) / 2;
+  await smoothScroll(70, x, y, GestureSourceType.TOUCH_INPUT, 'down');
+  await waitFor( () => {return parentDiv.scrollTop > 0});
+}, "New node must start wheel scrolling when the latched node is removed.");
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/latched-scroll-node-removed.html b/third_party/WebKit/LayoutTests/fast/events/wheel/latched-scroll-node-removed.html
deleted file mode 100644
index 77fecacc..0000000
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/latched-scroll-node-removed.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE HTML>
-<script src="../../../resources/testharness.js"></script>
-<script src="../../../resources/testharnessreport.js"></script>
-<style>
-
-  ::-webkit-scrollbar {
-    display: none;
-  }
-  body {
-    margin: 0px;
-    height: 1000px;
-    width: 1000px;
-  }
-  #parentDiv {
-    background-color: #FF7F7F;
-    height: 600px;
-    width: 600px;
-    overflow: scroll;
-  }
-  #content1 {
-    height: 700px;
-    width: 700px;
-  }
-  #childDiv {
-    background-color: #84BE6A;
-    height: 500px;
-    width: 500px;
-    overflow: scroll;
-  }
-  #content2 {
-    height: 600px;
-    width: 600px;
-  }
-</style>
-
-<div id="parentDiv">
-  <div id="content1">
-    <div id="childDiv">
-      <div id="content2">
-      </div>
-    </div>
-  </div>
-</div>
-
-<script>
-var parentDiv = document.getElementById('parentDiv');
-var childDiv = document.getElementById('childDiv');
-var rect = childDiv.getBoundingClientRect();
-var source = "touchpad";
-
-function setUpForTest() {
-  if (window.internals)
-    internals.settings.setScrollAnimatorEnabled(false);
-  if (!document.getElementById('childDiv'))
-     document.getElementById('content1').appendChild(childDiv);
-  parentDiv.scrollTo(0, 0);
-  childDiv.scrollTo(0, 0);
-}
-
-function sendScrollEventsAndCheck() {
-  // Start scrolling on the child div.
-  eventSender.gestureScrollBegin(source,
-                                 (rect.left + rect.right) / 2,
-                                 (rect.top + rect.bottom) / 2);
-  eventSender.gestureScrollUpdate(source, 0, -70);
-
-  // Check that childDiv fully consumes scroll delta, then remove the div.
-  assert_equals(parentDiv.scrollTop, 0,
-        "The parent div should not scroll.");
-  assert_equals(childDiv.scrollTop, 70,
-        "The child div should fully comsume scroll delta.");
-  childDiv.remove();
-
-  // Send the next GSU event and check that parentDiv scrolls.
-  eventSender.gestureScrollUpdate(source, 0, -30);
-  assert_greater_than(parentDiv.scrollTop, 0,
-        "The parent div should start scrolling.");
-
-  // Finish scrolling.
-  eventSender.gestureScrollEnd(source,
-                               (rect.left + rect.right) / 2,
-                               (rect.top + rect.bottom) / 2);
-}
-
-test(() => {
-  setUpForTest();
-  sendScrollEventsAndCheck();
-}, "New node must start wheel scrolling when the latched node is removed.");
-test(() => {
-  source = "touchscreen";
-  setUpForTest();
-  sendScrollEventsAndCheck();
-}, "New node must start touch scrolling when the latched node is removed.");
-</script>
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-in-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-in-scrollbar-expected.txt
deleted file mode 100644
index 97ee933..0000000
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-in-scrollbar-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Test that wheel scrolling over the page scrollbar scrolls the page. We also placed an overflow div below the scrollbar to make sure we target the page and not the div in that case.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS window.scrollY is 30
-PASS overflowDiv.scrollTop is 0
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-in-scrollbar.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-in-scrollbar.html
index 9689f4e..f15210d2 100644
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-in-scrollbar.html
+++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-in-scrollbar.html
@@ -1,38 +1,31 @@
 <!DOCTYPE html>
-<script src="../../../resources/js-test.js"></script>
-<script>
-    window.jsTestIsAsync = true;
-
-    description("Test that wheel scrolling over the page scrollbar scrolls " +
-                "the page. We also placed an overflow div below the " +
-                "scrollbar to make sure we target the page and not the div " +
-                "in that case.");
-
-    var overflowDiv;
-
-    window.onload = function() {
-        if (!window.testRunner || !window.eventSender)
-            return;
-
-        internals.settings.setScrollAnimatorEnabled(false);
-
-        overflowDiv = document.getElementById('overflowDiv');
-
-        // Move the mouse over the vertical scrollbar.
-        eventSender.mouseMoveTo(790, 300);
-
-        // Scroll down precisely by 30 px.
-        eventSender.continuousMouseScrollBy(0, -30, false, true);
-
-        shouldBe('window.scrollY', '30');
-        shouldBe('overflowDiv.scrollTop', '0');
-        finishJSTest();
-    }
-</script>
-
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
 <body style="margin:0">
-    <div id="overflowDiv" style="width:1000px; height:500px; overflow:scroll">
-      <div style="height: 1000px"></div>
-    </div>
+  <div id="overflowDiv" style="width:1000px; height:500px; overflow:scroll">
     <div style="height: 1000px"></div>
+  </div>
+  <div style="height: 1000px"></div>
 </body>
+<script>
+  internals.settings.setScrollAnimatorEnabled(false);
+  var overflowDiv = document.getElementById('overflowDiv');
+
+  promise_test (async () => {
+    overflowDiv.addEventListener("scroll", () => {
+      Promise.reject('overflowDiv should not scroll.');
+    });
+
+    // Move the mouse over the vertical scrollbar.
+    await mouseMoveTo(790, 300);
+
+    // Scroll down precisely by 30 px.
+    await smoothScroll(30, 790, 300, GestureSourceType.MOUSE_INPUT, 'down', SPEED_INSTANT);
+
+    await waitFor( () => {return window.scrollY == 30});
+  }, "Test that wheel scrolling over the page scrollbar scrolls " +
+      "the page. We also placed an overflow div below the " +
+      "scrollbar to make sure we target the page and not the div " +
+      "in that case.");
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-latched-scroll-node-removed.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-latched-scroll-node-removed.html
new file mode 100644
index 0000000..02e93810
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheel-latched-scroll-node-removed.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
+<style>
+
+  ::-webkit-scrollbar {
+    display: none;
+  }
+  body {
+    margin: 0px;
+    height: 1000px;
+    width: 1000px;
+  }
+  #parentDiv {
+    background-color: #FF7F7F;
+    height: 600px;
+    width: 600px;
+    overflow: scroll;
+  }
+  #content1 {
+    height: 700px;
+    width: 700px;
+  }
+  #childDiv {
+    background-color: #84BE6A;
+    height: 500px;
+    width: 500px;
+    overflow: scroll;
+  }
+  #content2 {
+    height: 600px;
+    width: 600px;
+  }
+</style>
+
+<div id="parentDiv">
+  <div id="content1">
+    <div id="childDiv">
+      <div id="content2">
+      </div>
+    </div>
+  </div>
+</div>
+
+<script>
+var parentDiv = document.getElementById('parentDiv');
+var childDiv = document.getElementById('childDiv');
+var rect = childDiv.getBoundingClientRect();
+
+function setUpForTest() {
+  if (window.internals)
+    internals.settings.setScrollAnimatorEnabled(false);
+  parentDiv.scrollTo(0, 0);
+  childDiv.scrollTo(0, 0);
+}
+
+childDiv.addEventListener('scroll', () => {
+  if(childDiv.scrollTop > 0)
+    childDiv.remove();
+});
+
+promise_test( async () => {
+  setUpForTest();
+  // Start scrolling on the child div and remove the div in the middle of
+  // scrolling, then check that parentDiv starts scrolling.
+  var x = (rect.left + rect.right) / 2;
+  var y = (rect.top + rect.bottom) / 2;
+  await smoothScroll(70, x, y, GestureSourceType.MOUSE_INPUT, 'down');
+  await waitFor( () => {return parentDiv.scrollTop > 0});
+}, "New node must start wheel scrolling when the latched node is removed.");
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic-expected.txt b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic-expected.txt
deleted file mode 100644
index d189f863..0000000
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic-expected.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP
-Scroll mouse wheel over here
-Scroll mouse wheel over here
-Scroll mouse wheel over here
-Scroll mouse wheel over here
-Scroll mouse wheel over here
-Scroll mouse wheel over here
-END END END END END END END END END END END END END END
-Tests the basic functionality of the standard wheel event
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS WheelEvent.__proto__ is MouseEvent
-PASS WheelEvent.prototype.__proto__ is MouseEvent.prototype
-PASS WheelEvent.DOM_DELTA_PIXEL is 0x00
-PASS WheelEvent.DOM_DELTA_LINE is 0x01
-PASS WheelEvent.DOM_DELTA_PAGE is 0x02
-PASS window.onwheel is null
-PASS document.onwheel is null
-PASS testDiv.onwheel is null
-PASS testEvent.__proto__ is WheelEvent.prototype
-PASS testEvent.__proto__.__proto__ is MouseEvent.prototype
-PASS testEvent.deltaZ is 0
-PASS testEvent.deltaMode is WheelEvent.DOM_DELTA_PIXEL
-PASS deltaX > 0 && deltaY > 0 && deltaX == testDiv.scrollLeft && deltaY == testDiv.scrollTop became true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic.html
index e4fbfce9..aac7303 100644
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic.html
+++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-basic.html
@@ -2,71 +2,63 @@
 <html>
 <head>
 <link rel="help" href="http://www.w3.org/TR/DOM-Level-3-Events/#events-WheelEvent">
-<script src="../../../resources/js-test.js"></script>
-<script>
-window.jsTestIsAsync = true;
-
-var deltaX = 0;
-var deltaY = 0;
-
-var testDiv;
-function runTest() {
-    // Basic checks.
-    shouldBe('WheelEvent.__proto__', 'MouseEvent');
-    shouldBe('WheelEvent.prototype.__proto__', 'MouseEvent.prototype');
-    shouldBe('WheelEvent.DOM_DELTA_PIXEL', '0x00');
-    shouldBe('WheelEvent.DOM_DELTA_LINE', '0x01');
-    shouldBe('WheelEvent.DOM_DELTA_PAGE', '0x02');
-
-    testDiv = document.getElementById('target');
-    shouldBeNull('window.onwheel');
-    shouldBeNull('document.onwheel');
-    shouldBeNull('testDiv.onwheel');
-    testDiv.addEventListener('wheel', wheelHandler);
-    if (window.eventSender) {
-        eventSender.mouseMoveTo(testDiv.offsetLeft + 5, testDiv.offsetTop + 5);
-        eventSender.mouseScrollBy(-1, -2, false, false, 0, true, 'phaseBegan');
-        var positive = "deltaX > 0 && deltaY > 0";
-        var correct = "deltaX == testDiv.scrollLeft && deltaY == testDiv.scrollTop";
-        shouldBecomeEqual(positive + " && " + correct , "true", finishJSTest);
-    } else {
-        debug("FAIL: This test requires window.eventSender.");
-    }
-}
-
-var testEvent;
-function wheelHandler(e) {
-    testEvent = e;
-    shouldBe("testEvent.__proto__", "WheelEvent.prototype");
-    shouldBe("testEvent.__proto__.__proto__", "MouseEvent.prototype");
-    if (e.deltaX)
-      deltaX = e.deltaX;
-    if (e.deltaY)
-      deltaY = e.deltaY;
-    shouldBe("testEvent.deltaZ", "0");
-    shouldBe("testEvent.deltaMode", "WheelEvent.DOM_DELTA_PIXEL")
-}
-
-</script>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
 </head>
 <body>
 <span id="parent">
-    <div id="target" style="border:solid 1px green; width:220px; height:70px; overflow:scroll; white-space:nowrap;">
-        TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP<br/>
-        Scroll mouse wheel over here<br/>
-        Scroll mouse wheel over here<br/>
-        Scroll mouse wheel over here<br/>
-        Scroll mouse wheel over here<br/>
-        Scroll mouse wheel over here<br/>
-        Scroll mouse wheel over here<br/>
-        END END END END END END END END END END END END END END<br/>
-    </div>
+  <div id="target" style="border:solid 1px green; width:220px; height:70px; overflow:scroll; white-space:nowrap;">
+    TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP<br/>
+    Scroll mouse wheel over here<br/>
+    Scroll mouse wheel over here<br/>
+    Scroll mouse wheel over here<br/>
+    Scroll mouse wheel over here<br/>
+    Scroll mouse wheel over here<br/>
+    Scroll mouse wheel over here<br/>
+    END END END END END END END END END END END END END END<br/>
+  </div>
 </span>
 <div id="console"></div>
-<script>
-description("Tests the basic functionality of the standard wheel event");
-
-runTest();
-</script>
 </body>
+<script>
+var deltaX = 0;
+var deltaY = 0;
+
+promise_test(async () => {
+  // Basic checks.
+  assert_equals(WheelEvent.__proto__, MouseEvent);
+  assert_equals(WheelEvent.prototype.__proto__, MouseEvent.prototype);
+  assert_equals(WheelEvent.DOM_DELTA_PIXEL, 0x00);
+  assert_equals(WheelEvent.DOM_DELTA_LINE, 0x01);
+  assert_equals(WheelEvent.DOM_DELTA_PAGE, 0x02);
+
+  var testDiv = document.getElementById('target');
+  assert_equals(window.onwheel, null);
+  assert_equals(document.onwheel, null);
+  assert_equals(testDiv.onwheel, null);
+  testDiv.addEventListener('wheel', wheelHandler);
+  var x = testDiv.offsetLeft + 5;
+  var y = testDiv.offsetTop + 5;
+  await mouseMoveTo(x, y);
+  await smoothScroll(40, x, y, GestureSourceType.MOUSE_INPUT, 'downright', SPEED_INSTANT);
+  await waitFor( () => {
+    return deltaX > 0 && deltaY > 0 && deltaX == testDiv.scrollLeft &&
+        deltaY == testDiv.scrollTop;
+  });
+}, "Tests the basic functionality of the standard wheel event");
+
+var testEvent;
+function wheelHandler(e) {
+  testEvent = e;
+  assert_equals(testEvent.__proto__, WheelEvent.prototype);
+  assert_equals(testEvent.__proto__.__proto__, MouseEvent.prototype);
+  if (e.deltaX)
+    deltaX = e.deltaX;
+  if (e.deltaY)
+    deltaY = e.deltaY;
+  assert_equals(testEvent.deltaZ, 0);
+  assert_equals(testEvent.deltaMode, WheelEvent.DOM_DELTA_PIXEL);
+}
+</script>
 </html>
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl-expected.txt b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl-expected.txt
deleted file mode 100644
index 2e56675..0000000
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl-expected.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
-PASS window.scrollX == -90 && window.scrollY == 100 became true
-PASS window.scrollX == -120 && window.scrollY == 100 became true
-PASS window.scrollX == -120 && window.scrollY == 110 became true
-PASS window.scrollX == -120 && window.scrollY == 80 became true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl.html
index 9d4b09e..9ca8c10 100644
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl.html
+++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl.html
@@ -1,40 +1,43 @@
 <html dir=rtl>
-
-<script src="../../../resources/js-test.js"></script>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
 <script>
-    var testScrolls = [
-        {x: -10, y: 0, expectedX: -90, expectedY: 100},
-        {x: 30, y: 0, expectedX: -120, expectedY: 100},
-        {x: 0, y: -10, expectedX: -120, expectedY: 110},
-        {x: 0, y: 30, expectedX: -120, expectedY: 80},
-    ];
-    var currentTest = -1;
-    window.jsTestIsAsync = true;
+  var testScrolls = [
+    {distance: 10, expectedX: -90, expectedY: 100, direction: 'right'},
+    {distance: 30, expectedX: -120, expectedY: 100, direction: 'left'},
+    {distance: 10, expectedX: -120, expectedY: 110, direction: 'down'},
+    {distance: 30, expectedX: -120, expectedY: 80, direction: 'up'},
+  ];
+  var currentTest = -1;
 
-    function startNextTestCase() {
-        currentTest++;
-        if (currentTest >= testScrolls.length) {
-            finishJSTest();
-            return;
-        }
-        var testCase = testScrolls[currentTest];
-        eventSender.mouseMoveTo(100, 100);
-        eventSender.continuousMouseScrollBy(testCase.x, testCase.y);
-        shouldBecomeEqual("window.scrollX == " + testCase.expectedX + " && " +
-            "window.scrollY == " + testCase.expectedY, "true", startNextTestCase);
-    }
+  function startNextTestCase() {
+    currentTest++;
+    if (currentTest >= testScrolls.length)
+      return;
 
-    window.onload = function() {
-        if (!window.testRunner)
-            return;
-        window.addEventListener("mousewheel", function (e){}, false);
-        window.scrollTo(-100, 100);
-        startNextTestCase();
-    }
+    var testCase = testScrolls[currentTest];
+    promise_test(async () => {
+      await mouseMoveTo(100, 100);
+      await smoothScroll(testCase.distance, 100, 100,
+          GestureSourceType.MOUSE_INPUT, testCase.direction, SPEED_INSTANT);
+      await waitFor( () => {
+        return window.scrollX == testCase.expectedX &&
+            window.scrollY == testCase.expectedY;
+      });
+      startNextTestCase();
+    }, 'scroll ' + testCase.direction);
+  }
+
+  window.onload = function() {
+    window.addEventListener("mousewheel", function (e){}, false);
+    window.scrollTo(-100, 100);
+    startNextTestCase();
+  }
 </script>
 
 <body style="margin:0">
-    <div id="div" style="whitespace:nowrap; width: 4000px; height: 1000px; border: 1px solid red;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
-    <div id="console"></div>
+  <div id="div" style="whitespace:nowrap; width: 4000px; height: 1000px; border: 1px solid red;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
+  <div id="console"></div>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node-expected.txt b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node-expected.txt
deleted file mode 100644
index 3dfc6fd2..0000000
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-'Real' MouseWheel events should not be dispatched on the text node, but instead on its parent.
-PASS theEvent.target.nodeName is "DIV"
-PASS successfullyParsed is true
-
-TEST COMPLETE
-This is a div containing text. Wheel events originating on the text node should target the div.
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node.html
index a54f5f9..4094deb0 100644
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node.html
+++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-text-node.html
@@ -1,36 +1,32 @@
 <!DOCTYPE html>
 <html>
 <head>
-    <script src="../../../resources/js-test.js"></script>
-    <script>
-        window.jsTestIsAsync = true;
-
-        function test() {
-            var div = document.querySelector('div');
-            if (window.eventSender) {
-                eventSender.mouseMoveTo(div.offsetLeft + 5, div.offsetTop + 5);
-                eventSender.mouseScrollBy(0, 120, false, true, 0, true, "phaseBegan");
-            } else {
-                debug("FAIL: This test requires window.eventSender.");
-                finishJSTest();
-            }
-        }
-
-        function wheelHandler(e) {
-            window.theEvent = e;
-
-            debug("'Real' MouseWheel events should not be dispatched on the text node, but instead on its parent.");
-            shouldBeEqualToString('theEvent.target.nodeName', 'DIV');
-            finishJSTest();
-        }
-
-        window.onload = function () {
-            var div = document.querySelector('div');
-            div.addEventListener('mousewheel', wheelHandler);
-            test();
-        };
-    </script>
+  <script src="../../../resources/testharness.js"></script>
+  <script src="../../../resources/testharnessreport.js"></script>
+  <script src="../../../resources/gesture-util.js"></script>
 </head>
+<script>
+  setup({ explicit_done: true });
+  function test() {
+    var div = document.querySelector('div');
+    var x = div.offsetLeft + 5;
+    var y = div.offsetTop + 5;
+    mouseMoveTo(x, y)
+    .then(smoothScroll(120, x, y, GestureSourceType.MOUSE_INPUT, 'down'));
+  }
+
+  function wheelHandler(e) {
+    window.theEvent = e;
+    assert_equals(theEvent.target.nodeName, 'DIV');
+    done();
+  }
+
+  window.onload = function () {
+    var div = document.querySelector('div');
+    div.addEventListener('mousewheel', wheelHandler);
+    test();
+  };
+</script>
 <body>
     <div>This is a div containing text. Wheel events originating on the text
     node should target the div.</div>
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl-expected.txt b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl-expected.txt
deleted file mode 100644
index 1c7c5523..0000000
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl-expected.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
-PASS window.scrollX == 110 && window.scrollY == -100 became true
-PASS window.scrollX == 80 && window.scrollY == -100 became true
-PASS window.scrollX == 80 && window.scrollY == -90 became true
-PASS window.scrollX == 80 && window.scrollY == -120 became true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl.html b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl.html
index 8d1eb8f..6b322eb 100644
--- a/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl.html
+++ b/third_party/WebKit/LayoutTests/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl.html
@@ -1,41 +1,43 @@
 <html dir=rtl style="-webkit-writing-mode:vertical-lr">
-
-<script src="../../../resources/js-test.js"></script>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
 <script>
-    var testScrolls = [
-        {x: -10, y: 0, expectedX: 110, expectedY: -100},
-        {x: 30, y: 0, expectedX: 80, expectedY: -100},
-        {x: 0, y: -10, expectedX: 80, expectedY: -90},
-        {x: 0, y: 30, expectedX: 80, expectedY: -120},
-    ];
-    var currentTest = -1;
-    window.jsTestIsAsync = true;
+  var testScrolls = [
+    {distance: 10, expectedX: 110, expectedY: -100, direction: 'right'},
+    {distance: 30, expectedX: 80, expectedY: -100, direction: 'left'},
+    {distance: 10, expectedX: 80, expectedY: -90, direction: 'down'},
+    {distance: 30, expectedX: 80, expectedY: -120, direction: 'up'},
+  ];
+  var currentTest = -1;
 
-    function startNextTestCase() {
-        currentTest++;
-        if (currentTest >= testScrolls.length) {
-            finishJSTest();
-            return;
-        }
-        var testCase = testScrolls[currentTest];
-        eventSender.mouseMoveTo(100, 100);
-        eventSender.continuousMouseScrollBy(testCase.x, testCase.y);
-        shouldBecomeEqual("window.scrollX == " + testCase.expectedX + " && " +
-            "window.scrollY == " + testCase.expectedY, "true", startNextTestCase);
-    }
+  function startNextTestCase() {
+    currentTest++;
+    if (currentTest >= testScrolls.length)
+      return;
 
-    window.onload = function() {
-        if (!window.testRunner)
-            return;
-        window.addEventListener("mousewheel", function (e){}, false);
-        window.scrollTo(100, -100);
+    var testCase = testScrolls[currentTest];
+    promise_test(async () => {
+      await mouseMoveTo(100, 100);
+      await smoothScroll(testCase.distance, 100, 100,
+          GestureSourceType.MOUSE_INPUT, testCase.direction, SPEED_INSTANT);
+      await waitFor( () => {
+        return window.scrollX == testCase.expectedX &&
+            window.scrollY == testCase.expectedY;
+      });
         startNextTestCase();
-    }
+      }, 'scroll ' + testCase.direction);
+  }
+
+  window.onload = function() {
+    window.addEventListener("mousewheel", function (e){}, false);
+    window.scrollTo(100, -100);
+    startNextTestCase();
+  }
 </script>
 
 <body style="margin:0">
-
-    <div id="div" style="whitespace:nowrap; width: 4000px; height: 1000px; border: 1px solid red;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
-    <div id="console"></div>
+  <div id="div" style="whitespace:nowrap; width: 4000px; height: 1000px; border: 1px solid red;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
+  <div id="console"></div>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png
index 8747b0d..a45cc26 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png
index 4a19caa..b52c54f5 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png
index 483dd3ac..df60238 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png
index 23682d54..b67181a 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png
index 3a1cb75..9fbba1c 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png
index be2414f..e8d68c6d 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png
index ad776e4..62b05aee 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png
index 6b2410f..5c80e16 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png
index 0c8ec79..b964366 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png
index 6ea40528..85ae8c0 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png
index a357719d..b7a79da 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png
index 0aa2b1d..6011cf6 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/jpeg-yuv-progressive-canvas-expected.png b/third_party/WebKit/LayoutTests/images/jpeg-yuv-progressive-canvas-expected.png
index 23438b0..3bbf755 100644
--- a/third_party/WebKit/LayoutTests/images/jpeg-yuv-progressive-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/images/jpeg-yuv-progressive-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/images/jpeg-yuv-progressive-image-expected.png
index fc85a45..136bf11 100644
--- a/third_party/WebKit/LayoutTests/images/jpeg-yuv-progressive-image-expected.png
+++ b/third_party/WebKit/LayoutTests/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png b/third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png
index 2bb210e..625ff75 100644
--- a/third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png
+++ b/third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/image-sizing-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/image-sizing-expected.png
index ac55d2a..7b91020c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/image-sizing-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/replaced/image-sizing-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-filter-all-expected.png
index 671bc605..9cbc496 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-shape-expected.png
index f3e2629..1791e9e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-shape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-shape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/jpeg-with-color-profile-expected.png
index e5de1e8..384c16ab 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/images/jpeg-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/images/jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png
index a0a9ef4..ea3d4171 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png
index dc78de88..6f76cd9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/image-rescale-clip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/image-rescale-clip-expected.png
index 71983dd..b4e57b2d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/image-rescale-clip-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/image-rescale-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/image-rescale-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/image-rescale-scroll-expected.png
index ba7f258e..28b9bc8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/image-rescale-scroll-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/image-rescale-scroll-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug4284-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug4284-expected.png
index bc83055..8e11e44b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug4284-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug4284-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug625-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug625-expected.png
index 55489f55..23430e7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug625-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug625-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png
index cdff62f4..de857d0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
index 910158d..6d3de144 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
index 4bb79ed..85e6c976 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
index 72a5fee..5dae8179 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/orientation-sensor/AbsoluteOrientationSensor-iframe-access.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/orientation-sensor/AbsoluteOrientationSensor-iframe-access.https-expected.txt
new file mode 100644
index 0000000..329d0a4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/orientation-sensor/AbsoluteOrientationSensor-iframe-access.https-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+PASS AbsoluteOrientationSensor: sensor is suspended and resumed when focus traverses from to cross-origin frame
+PASS AbsoluteOrientationSensor: sensor is not suspended when focus traverses from to same-origin frame
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla/core/bloomberg-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla/core/bloomberg-expected.png
index b21bb94..ef7e15e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla/core/bloomberg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/tables/mozilla/core/bloomberg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/image-sizing-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/image-sizing-expected.png
index e0f9486..ad852d4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/image-sizing-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/image-sizing-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-radius-expected.png
index 75efc00..2bb7a53 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-radius-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-radius-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-filter-expected.png
index ff8faa0e..eb2bc1a8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-svg-expected.png
index d1f27ae..89deec4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-expected.png
index c614d15..3952b51 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-filter-all-expected.png
index ea076a6..c53b744 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-shape-expected.png
index 7900d448..c4ed1ae 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-shape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-shape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/jpeg-with-color-profile-expected.png
index d9db4ee..41df6fe 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/images/jpeg-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/images/jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png
index ddae108..c6704e4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png
index e174cf6..2dec00e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/image-rescale-clip-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/image-rescale-clip-expected.png
index 25f75b0..de9687d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/image-rescale-clip-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/image-rescale-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/image-rescale-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/image-rescale-scroll-expected.png
index 2009544..f8a10e88 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/image-rescale-scroll-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/image-rescale-scroll-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug4284-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug4284-expected.png
index 8a86a2b5..64a5b14 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug4284-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug4284-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug625-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug625-expected.png
index 2723623..484765a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug625-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/bugs/bug625-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/core/bloomberg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/core/bloomberg-expected.png
index 2527f92..1d01d90 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/core/bloomberg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/tables/mozilla/core/bloomberg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-radius-expected.png
index b5bacec..b591ccd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-radius-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-radius-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-filter-expected.png
index 24ad8f7..2f91b80f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
index 4ae5c75..c0a1c73e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-expected.png
index 21ff0ea6..553c720 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
index ed136ae..b3442df9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
index 733a3ff..43258ba 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
index 7076b41..5ec8194 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
index fe8965a..800f492 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
index a377a59b..8421dd1 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/replaced/image-sizing-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/replaced/image-sizing-expected.png
index 375a0c5..2a33606 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/replaced/image-sizing-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/replaced/image-sizing-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png
index 1008f5fd..de65284 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png
index b78164d..33ffd96 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png
index 6a77866..da252b6 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png
index c6a570f..47e5735 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png
index dd27b7f..eb0fbd7 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png
index 904817e..8408e6d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png
index 7a4ccc123..5c17835 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png
index d78d28c..30547917 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/animate-elem-39-t-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png
index 3d78dc78..a2cf71ec 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/image-rescale-clip-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/custom/image-rescale-clip-expected.png
index a69cb76..39c667e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/image-rescale-clip-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/image-rescale-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/image-rescale-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/custom/image-rescale-scroll-expected.png
index e7d91f46..51633f1e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/image-rescale-scroll-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/image-rescale-scroll-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug4284-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug4284-expected.png
index aef9ca7b..e62d9ea 100644
--- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug4284-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/bugs/bug4284-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/core/bloomberg-expected.png b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/core/bloomberg-expected.png
index 5c18539..a6a91a3 100644
--- a/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/core/bloomberg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/tables/mozilla/core/bloomberg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-radius-expected.png
index 2a9ceef..ec46c17 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-radius-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-radius-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-filter-expected.png
index 2814ce4..9873a9c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
index 25f2dadb..ffaab03 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-expected.png
index faf3552..4f00973 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
index ad7d6e31..1d5a810f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
index 470f9c1..4b434ddf 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
index 2dd89c4..0b54b20a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
index ed9107b..84a9bac 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
index 254957f..a53e7088 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-expected.png
index 47d3c179..c27ac87 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png
index 26bd73d..11f794b 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png
index 39e68bc..0d0de5c 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png
index 0a0a043..81b1c67 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png
index 8e91b854..c413f710 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png
index 35607453..28bbd5d 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png
index da492152..bdcfbd9 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png
index f5335851..977e8bca1 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png
index b84c4e2f..a6e1828 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png
index fe8277d..0e8cd58 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas-expected.png
index 7359db9..41d0fa2 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png
index c89827e..04c9909 100644
--- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
index 0986d47..aa7dbea5 100644
--- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
index ae3b23bd..aec1516 100644
--- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/jpeg-yuv-progressive-canvas-expected.png b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/jpeg-yuv-progressive-canvas-expected.png
index 643ae21..6a22968 100644
--- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/jpeg-yuv-progressive-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/jpeg-yuv-progressive-canvas-expected.png
Binary files differ
diff --git a/third_party/abseil-cpp/BUILD.gn b/third_party/abseil-cpp/BUILD.gn
index d626385..6005148 100644
--- a/third_party/abseil-cpp/BUILD.gn
+++ b/third_party/abseil-cpp/BUILD.gn
@@ -2,8 +2,6 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-# absl specific compiler flags.
-#
 # Flags specified here must not impact ABI. Code compiled with and without these
 # opts will be linked together, and in some cases headers compiled with and
 # without these options will be part of the same program.
@@ -50,53 +48,10 @@
 }
 
 config("absl_default_cflags_cc") {
+  cflags_cc = []
   if (is_clang) {
-    cflags_cc = [
-      # Abseil does not support C++98
-      "-Wno-c++98-compat-pedantic",
-      # Turns off all implicit conversion warnings. Most are re-enabled below.
-      "-Wno-conversion",
-      "-Wno-covered-switch-default",
-      "-Wno-deprecated",
-      "-Wno-disabled-macro-expansion",
-      "-Wno-double-promotion",
-      ###
-      # Turned off as they include valid C++ code.
-      "-Wno-comma",
-      "-Wno-extra-semi",
-      "-Wno-packed",
-      "-Wno-padded",
-      ###
-      "-Wno-float-conversion",
-      "-Wno-float-equal",
-      "-Wno-format-nonliteral",
-      # Too aggressive: warns on Clang extensions enclosed in Clang-only
-      # compilation paths.
-      "-Wno-gcc-compat",
-      ###
-      # Some internal globals are necessary. Don't do this at home.
-      "-Wno-global-constructors",
-      "-Wno-exit-time-destructors",
-      ###
-      "-Wno-nested-anon-types",
-      "-Wno-non-modular-include-in-module",
-      "-Wno-old-style-cast",
-      # Warns on preferred usage of non-POD types such as string_view
-      "-Wno-range-loop-analysis",
-      "-Wno-reserved-id-macro",
-      "-Wno-shorten-64-to-32",
-      "-Wno-switch-enum",
-      "-Wno-thread-safety-negative",
-      "-Wno-undef",
-      "-Wno-unknown-warning-option",
-      "-Wno-unreachable-code",
-      # Causes warnings on include guards
-      "-Wno-unused-macros",
-      "-Wno-weak-vtables",
-      ###
-      # Implicit conversion warnings turned off by -Wno-conversion
-      # which are re-enabled below.
-      "-Wbitfield-enum-conversion",
+    cflags_cc += [
+      # TODO(crbug.com/588506): Explicitly enable conversion warnings.
       "-Wbool-conversion",
       "-Wconstant-conversion",
       "-Wenum-conversion",
@@ -107,69 +62,36 @@
       "-Wobjc-literal-conversion",
       "-Wno-sign-conversion",
       "-Wstring-conversion",
-      ###
     ]
-  } else {
-    if (is_linux) {
-      # GCC flags:
-      cflags_cc = [
-        # Google style does not use unsigned integers, though STL containers
-        # have unsigned types.
-        "-Wno-sign-compare",
-      ]
+    if (!is_nacl && !use_xcode_clang) {
+      cflags_cc += [ "-Wbitfield-enum-conversion" ]
     }
-    if (is_win) {
-      # MSVC flags:
-      cflags_cc = [
-        "/wd4005",  # macro-redefinition
-        "/wd4068",  # unknown pragma
-        "/wd4702",  # unreachable code
-      ]
-    }
+  }
+  if (is_win) {
+    cflags_cc += [
+      "/wd4005",  # macro-redefinition
+      "/wd4068",  # unknown pragma
+      "/wd4702",  # unreachable code
+    ]
   }
 }
 
 config("absl_test_cflags_cc") {
-  if (is_clang) {
-    cflags_cc = [
-      "-Wno-c99-extensions",
-      "-Wno-missing-noreturn",
-      "-Wno-missing-prototypes",
-      "-Wno-null-conversion",
-      "-Wno-shadow",
-      "-Wno-shift-sign-overflow",
+  cflags_cc = []
+  if (is_clang || !is_win) {
+    cflags_cc += [
+      "-Wno-conversion-null",
+      "-Wno-missing-declarations",
       "-Wno-sign-compare",
       "-Wno-unused-function",
-      "-Wno-unused-member-function",
       "-Wno-unused-parameter",
       "-Wno-unused-private-field",
-      "-Wno-used-but-marked-unused",
     ]
-    if (!use_xcode_clang) {
-      # xcode clang does not recognize the following flags.
-      cflags_cc += [
-        "-Wno-unused-template",
-        "-Wno-zero-as-null-pointer-constant",
-      ]
-    }
-  } else {
-    if (is_linux) {
-      # GCC flags:
-      cflags_cc = [
-        "-Wno-conversion-null",
-        "-Wno-missing-declarations",
-        "-Wno-sign-compare",
-        "-Wno-unused-function",
-        "-Wno-unused-parameter",
-        "-Wno-unused-private-field",
-      ]
-    }
-    if (is_win) {
-      # MSVC flags:
-      cflags_cc = [
-        "/wd4018",  # signed/unsigned mismatch
-        "/wd4101",  # unreferenced local variable
-      ]
-    }
+  }
+  if (is_win) {
+    cflags_cc += [
+      "/wd4018",  # signed/unsigned mismatch
+      "/wd4101",  # unreferenced local variable
+    ]
   }
 }
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index beb304e..d3d02043 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -584,7 +584,6 @@
     "//skia",
     "//third_party/blink/public/common",
     "//third_party/webrtc/api:libjingle_peerconnection_api",
-    "//third_party/webrtc/api:optional",
     "//third_party/webrtc/rtc_base:rtc_base",
     "//url",
   ]
diff --git a/third_party/blink/public/platform/web_feature.mojom b/third_party/blink/public/platform/web_feature.mojom
index 21595cf..38ac464 100644
--- a/third_party/blink/public/platform/web_feature.mojom
+++ b/third_party/blink/public/platform/web_feature.mojom
@@ -1947,6 +1947,9 @@
   kV8SpeechRecognitionEvent_Interpretation_AttributeGetter = 2481,
   kV8SpeechRecognitionEvent_Emma_AttributeGetter = 2482,
   kV8SpeechSynthesis_Speak_Method = 2483,
+  kLegacySymantecCertMainFrameResource = 2484,
+  kLegacySymantecCertInSubresource = 2485,
+  kLegacySymantecCertInSubframeMainResource = 2486,
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/platform/web_media_stream_center.h b/third_party/blink/public/platform/web_media_stream_center.h
index a3462ae6..a8cb5d1 100644
--- a/third_party/blink/public/platform/web_media_stream_center.h
+++ b/third_party/blink/public/platform/web_media_stream_center.h
@@ -31,6 +31,8 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_MEDIA_STREAM_CENTER_H_
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_MEDIA_STREAM_CENTER_H_
 
+#include "third_party/blink/public/platform/web_media_stream_track.h"
+
 namespace blink {
 
 class WebAudioSourceProvider;
@@ -51,6 +53,8 @@
 
   // Source functionality.
   virtual void DidStopMediaStreamSource(const WebMediaStreamSource&) {}
+  virtual void GetSourceSettings(const WebMediaStreamSource&,
+                                 WebMediaStreamTrack::Settings&) {}
 
   // Caller must take the ownership of the returned |WebAudioSourceProvider|
   // object.
diff --git a/third_party/blink/public/platform/web_media_stream_track.h b/third_party/blink/public/platform/web_media_stream_track.h
index edc262b..ef73b8a 100644
--- a/third_party/blink/public/platform/web_media_stream_track.h
+++ b/third_party/blink/public/platform/web_media_stream_track.h
@@ -50,6 +50,11 @@
     bool HasHeight() const { return height >= 0; }
     bool HasAspectRatio() const { return aspect_ratio >= 0.0; }
     bool HasFacingMode() const { return facing_mode != FacingMode::kNone; }
+    bool HasSampleRate() const { return sample_rate >= 0; }
+    bool HasSampleSize() const { return sample_size >= 0; }
+    bool HasChannelCount() const { return channel_count >= 0; }
+    bool HasLatency() const { return latency >= 0; }
+    bool HasVolume() const { return volume >= 0; }
     bool HasVideoKind() const { return !video_kind.IsNull(); }
     bool HasFocalLengthX() const { return focal_length_x >= 0.0; }
     bool HasFocalLengthY() const { return focal_length_y >= 0.0; }
@@ -68,6 +73,12 @@
     base::Optional<bool> auto_gain_control;
     base::Optional<bool> noise_supression;
     WebString echo_cancellation_type;
+    long sample_rate = -1;
+    long sample_size = -1;
+    long channel_count = -1;
+    double latency = -1.0;
+    double volume = -1.0;
+
     // Media Capture Depth Stream Extensions.
     WebString video_kind;
     double focal_length_x = -1.0;
diff --git a/third_party/blink/public/platform/web_url_request.h b/third_party/blink/public/platform/web_url_request.h
index 8dd63af..a9fc9af 100644
--- a/third_party/blink/public/platform/web_url_request.h
+++ b/third_party/blink/public/platform/web_url_request.h
@@ -133,7 +133,9 @@
                             // the resource. Server transformations may
                             // still happen if the page is heavy.
     kNoScriptOn = 1 << 6,   // Request that script be disabled for page load.
-    kPreviewsStateLast = kNoScriptOn
+    kResourceLoadingHintsOn = 1 << 7,  // Request that resource loading hints be
+                                       // used during pageload.
+    kPreviewsStateLast = kResourceLoadingHintsOn
   };
 
   class ExtraData {
diff --git a/third_party/blink/public/web/web_shared_worker_repository_client.h b/third_party/blink/public/web/web_shared_worker_repository_client.h
index 604ea82..00002bb9 100644
--- a/third_party/blink/public/web/web_shared_worker_repository_client.h
+++ b/third_party/blink/public/web/web_shared_worker_repository_client.h
@@ -58,6 +58,7 @@
       mojom::IPAddressSpace,
       mojom::SharedWorkerCreationContextType,
       MessagePortChannel,
+      mojo::ScopedMessagePipeHandle blob_url_token,
       std::unique_ptr<blink::WebSharedWorkerConnectListener>) = 0;
 
   // Invoked when a document has been detached. DocumentID can be re-used after
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 74f36f3..db0f7fd 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -3932,8 +3932,9 @@
   return nullptr;
 }
 
-ComputedStyle* Element::PseudoStyle(const PseudoStyleRequest& request,
-                                    const ComputedStyle* parent_style) {
+ComputedStyle* Element::CachedStyleForPseudoElement(
+    const PseudoStyleRequest& request,
+    const ComputedStyle* parent_style) {
   ComputedStyle* style = MutableComputedStyle();
 
   if (!style || (request.pseudo_id < kFirstInternalPseudoId &&
@@ -3945,13 +3946,13 @@
     return cached;
 
   scoped_refptr<ComputedStyle> result =
-      GetUncachedPseudoStyle(request, parent_style);
+      StyleForPseudoElement(request, parent_style);
   if (result)
     return style->AddCachedPseudoStyle(std::move(result));
   return nullptr;
 }
 
-scoped_refptr<ComputedStyle> Element::GetUncachedPseudoStyle(
+scoped_refptr<ComputedStyle> Element::StyleForPseudoElement(
     const PseudoStyleRequest& request,
     const ComputedStyle* parent_style) {
   const ComputedStyle* style = GetComputedStyle();
@@ -3962,15 +3963,14 @@
   DCHECK(!parent_style || !is_before_or_after);
 
   if (is_before_or_after) {
-    LayoutObject* parent_layout_object = GetLayoutObject();
-    if (!parent_layout_object && HasDisplayContentsStyle()) {
-      parent_layout_object =
-          LayoutTreeBuilderTraversal::ParentLayoutObject(*this);
+    const ComputedStyle* layout_parent_style = style;
+    if (style->Display() == EDisplay::kContents) {
+      Node* layout_parent = LayoutTreeBuilderTraversal::LayoutParent(*this);
+      DCHECK(layout_parent);
+      layout_parent_style = layout_parent->GetComputedStyle();
     }
-    if (!parent_layout_object)
-      return nullptr;
     return GetDocument().EnsureStyleResolver().PseudoStyleForElement(
-        this, request, style, parent_layout_object->Style());
+        this, request, style, layout_parent_style);
   }
 
   if (!GetLayoutObject())
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h
index 1a97d817..f72a97d 100644
--- a/third_party/blink/renderer/core/dom/element.h
+++ b/third_party/blink/renderer/core/dom/element.h
@@ -710,9 +710,10 @@
   PseudoElement* GetPseudoElement(PseudoId) const;
   LayoutObject* PseudoElementLayoutObject(PseudoId) const;
 
-  ComputedStyle* PseudoStyle(const PseudoStyleRequest&,
-                             const ComputedStyle* parent_style = nullptr);
-  scoped_refptr<ComputedStyle> GetUncachedPseudoStyle(
+  ComputedStyle* CachedStyleForPseudoElement(
+      const PseudoStyleRequest&,
+      const ComputedStyle* parent_style = nullptr);
+  scoped_refptr<ComputedStyle> StyleForPseudoElement(
       const PseudoStyleRequest&,
       const ComputedStyle* parent_style = nullptr);
   bool CanGeneratePseudoElement(PseudoId) const;
diff --git a/third_party/blink/renderer/core/dom/pseudo_element.cc b/third_party/blink/renderer/core/dom/pseudo_element.cc
index 8a1d557..46bc3a8 100644
--- a/third_party/blink/renderer/core/dom/pseudo_element.cc
+++ b/third_party/blink/renderer/core/dom/pseudo_element.cc
@@ -105,10 +105,16 @@
 
 scoped_refptr<ComputedStyle> PseudoElement::CustomStyleForLayoutObject() {
   scoped_refptr<ComputedStyle> original_style =
-      ParentOrShadowHostElement()->PseudoStyle(PseudoStyleRequest(pseudo_id_));
+      ParentOrShadowHostElement()->CachedStyleForPseudoElement(
+          PseudoStyleRequest(pseudo_id_));
   if (!original_style || original_style->Display() != EDisplay::kContents)
     return original_style;
 
+  return StoreOriginalAndReturnLayoutStyle(std::move(original_style));
+}
+
+scoped_refptr<ComputedStyle> PseudoElement::StoreOriginalAndReturnLayoutStyle(
+    scoped_refptr<ComputedStyle> original_style) {
   // For display:contents we should not generate a box, but we generate a non-
   // observable inline box for pseudo elements to be able to locate the
   // anonymous layout objects for generated content during DetachLayoutTree().
@@ -120,7 +126,7 @@
 
   // Store the actual ComputedStyle to be able to return the correct values from
   // getComputedStyle().
-  StoreNonLayoutObjectComputedStyle(original_style);
+  StoreNonLayoutObjectComputedStyle(std::move(original_style));
   return layout_style;
 }
 
diff --git a/third_party/blink/renderer/core/dom/pseudo_element.h b/third_party/blink/renderer/core/dom/pseudo_element.h
index 67bdb1e..6cdcf693 100644
--- a/third_party/blink/renderer/core/dom/pseudo_element.h
+++ b/third_party/blink/renderer/core/dom/pseudo_element.h
@@ -47,6 +47,8 @@
   PseudoId GetPseudoId() const override { return pseudo_id_; }
   const ComputedStyle* VirtualEnsureComputedStyle(
       PseudoId pseudo_element_specifier = kPseudoIdNone) final;
+  scoped_refptr<ComputedStyle> StoreOriginalAndReturnLayoutStyle(
+      scoped_refptr<ComputedStyle>);
 
   static String PseudoElementNameForEvents(PseudoId);
 
diff --git a/third_party/blink/renderer/core/exported/shared_worker_repository_client_impl.cc b/third_party/blink/renderer/core/exported/shared_worker_repository_client_impl.cc
index 4404763e..c72e0d15 100644
--- a/third_party/blink/renderer/core/exported/shared_worker_repository_client_impl.cc
+++ b/third_party/blink/renderer/core/exported/shared_worker_repository_client_impl.cc
@@ -106,10 +106,12 @@
       document);
 }
 
-void SharedWorkerRepositoryClientImpl::Connect(SharedWorker* worker,
-                                               MessagePortChannel port,
-                                               const KURL& url,
-                                               const String& name) {
+void SharedWorkerRepositoryClientImpl::Connect(
+    SharedWorker* worker,
+    MessagePortChannel port,
+    const KURL& url,
+    mojom::blink::BlobURLTokenPtr blob_url_token,
+    const String& name) {
   DCHECK(client_);
 
   // No nested workers (for now) - connect() should only be called from document
@@ -138,8 +140,8 @@
   client_->Connect(
       url, name, GetId(document), header, header_type,
       worker->GetExecutionContext()->GetSecurityContext().AddressSpace(),
-      ToCreationContextType(is_secure_context),
-      std::move(port), std::move(listener));
+      ToCreationContextType(is_secure_context), std::move(port),
+      blob_url_token.PassInterface().PassHandle(), std::move(listener));
 }
 
 void SharedWorkerRepositoryClientImpl::DocumentDetached(Document* document) {
diff --git a/third_party/blink/renderer/core/exported/shared_worker_repository_client_impl.h b/third_party/blink/renderer/core/exported/shared_worker_repository_client_impl.h
index 2cec65bd..3b0b0461 100644
--- a/third_party/blink/renderer/core/exported/shared_worker_repository_client_impl.h
+++ b/third_party/blink/renderer/core/exported/shared_worker_repository_client_impl.h
@@ -58,6 +58,7 @@
   void Connect(SharedWorker*,
                MessagePortChannel,
                const KURL&,
+               mojom::blink::BlobURLTokenPtr,
                const String& name) override;
   void DocumentDetached(Document*) override;
 
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc
index 406049ce2..5cf17848 100644
--- a/third_party/blink/renderer/core/layout/layout_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -3508,7 +3508,8 @@
   if (!element)
     return nullptr;
 
-  return element->PseudoStyle(PseudoStyleRequest(pseudo), parent_style);
+  return element->CachedStyleForPseudoElement(PseudoStyleRequest(pseudo),
+                                              parent_style);
 }
 
 scoped_refptr<ComputedStyle> LayoutObject::GetUncachedPseudoStyle(
@@ -3525,7 +3526,7 @@
   if (element->IsPseudoElement())
     return nullptr;
 
-  return element->GetUncachedPseudoStyle(request, parent_style);
+  return element->StyleForPseudoElement(request, parent_style);
 }
 
 void LayoutObject::AddAnnotatedRegions(Vector<AnnotatedRegionValue>& regions) {
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc
index 65cddf1..cc0d16e 100644
--- a/third_party/blink/renderer/core/loader/document_loader.cc
+++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -1002,6 +1002,10 @@
   // Report legacy Symantec certificates after Page::DidCommitLoad, because the
   // latter clears the console.
   if (response_.IsLegacySymantecCert()) {
+    UseCounter::Count(
+        frame_, frame_->Tree().Parent()
+                    ? WebFeature::kLegacySymantecCertInSubframeMainResource
+                    : WebFeature::kLegacySymantecCertMainFrameResource);
     GetLocalFrameClient().ReportLegacySymantecCert(response_.Url(),
                                                    false /* did_fail */);
   }
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
index 0943e10..4f43b8ded 100644
--- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
@@ -138,6 +138,15 @@
                 kCertificateTransparencyNonCompliantSubresourceInMainFrame);
 }
 
+void RecordLegacySymantecCertUseCounter(LocalFrame* frame,
+                                        Resource::Type resource_type) {
+  // Main resources are counted in DocumentLoader.
+  if (resource_type == Resource::kMainResource) {
+    return;
+  }
+  UseCounter::Count(frame, WebFeature::kLegacySymantecCertInSubresource);
+}
+
 // Determines FetchCacheMode for a main resource, or FetchCacheMode that is
 // corresponding to WebFrameLoadType.
 // TODO(toyoshim): Probably, we should split WebFrameLoadType to FetchCacheMode
@@ -596,6 +605,7 @@
   }
 
   if (response.IsLegacySymantecCert()) {
+    RecordLegacySymantecCertUseCounter(GetFrame(), resource->GetType());
     GetLocalFrameClient()->ReportLegacySymantecCert(response.Url(),
                                                     false /* did_fail */);
   }
@@ -1349,8 +1359,20 @@
   // actually creating the URL loader here. Other subresource loading will
   // immediately create the URL loader so resolving those blob URLs here is
   // simplest.
+  // Don't resolve the URL again if this is a shared worker request though, as
+  // in that case the browser process will have already done so and the code
+  // here should just go through the normal non-blob specific code path (note
+  // that this is only strictly true if NetworkService/S13nSW is enabled, but if
+  // that isn't the case we're going to run into race conditions resolving the
+  // blob URL anyway so it doesn't matter if the blob URL gets resolved here or
+  // later in the browser process, so skipping blob URL resolution here for all
+  // shared worker loads is okay even with NetworkService/S13nSW disabled).
+  // TODO(mek): Move the RequestContext check to the worker side's relevant
+  // callsite when we make Shared Worker loading off-main-thread.
   if (document_ && request.Url().ProtocolIs("blob") &&
-      RuntimeEnabledFeatures::MojoBlobURLsEnabled() && !url_loader_factory) {
+      RuntimeEnabledFeatures::MojoBlobURLsEnabled() && !url_loader_factory &&
+      request.GetRequestContext() !=
+          WebURLRequest::kRequestContextSharedWorker) {
     document_->GetPublicURLManager().Resolve(request.Url(),
                                              MakeRequest(&url_loader_factory));
   }
diff --git a/third_party/blink/renderer/core/paint/selection_painting_utils.cc b/third_party/blink/renderer/core/paint/selection_painting_utils.cc
index 1c70e26..5426d6fb 100644
--- a/third_party/blink/renderer/core/paint/selection_painting_utils.cc
+++ b/third_party/blink/renderer/core/paint/selection_painting_utils.cc
@@ -38,7 +38,7 @@
   if (ShadowRoot* root = node->ContainingShadowRoot()) {
     if (root->IsUserAgent()) {
       if (Element* shadow_host = node->OwnerShadowHost()) {
-        return shadow_host->GetUncachedPseudoStyle(
+        return shadow_host->StyleForPseudoElement(
             PseudoStyleRequest(kPseudoIdSelection));
       }
     }
@@ -51,8 +51,7 @@
   if (!element || element->IsPseudoElement())
     return nullptr;
 
-  return element->GetUncachedPseudoStyle(
-      PseudoStyleRequest(kPseudoIdSelection));
+  return element->StyleForPseudoElement(PseudoStyleRequest(kPseudoIdSelection));
 }
 
 Color SelectionColor(const Document& document,
@@ -80,8 +79,10 @@
   if (!node)
     return nullptr;
   Element* element = Traversal<Element>::FirstAncestorOrSelf(*node);
-  return element ? element->PseudoStyle(PseudoStyleRequest(kPseudoIdSelection))
-                 : nullptr;
+  if (!element)
+    return nullptr;
+  return element->CachedStyleForPseudoElement(
+      PseudoStyleRequest(kPseudoIdSelection));
 }
 
 }  // anonymous namespace
diff --git a/third_party/blink/renderer/core/workers/shared_worker.cc b/third_party/blink/renderer/core/workers/shared_worker.cc
index 17b7f1b..eb6f148 100644
--- a/third_party/blink/renderer/core/workers/shared_worker.cc
+++ b/third_party/blink/renderer/core/workers/shared_worker.cc
@@ -32,6 +32,7 @@
 #include "third_party/blink/renderer/core/workers/shared_worker.h"
 
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
+#include "third_party/blink/renderer/core/fileapi/public_url_manager.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/local_frame_client.h"
 #include "third_party/blink/renderer/core/frame/use_counter.h"
@@ -80,9 +81,17 @@
   if (script_url.IsEmpty())
     return nullptr;
 
+  mojom::blink::BlobURLTokenPtr blob_url_token;
+  if (script_url.ProtocolIs("blob") &&
+      RuntimeEnabledFeatures::MojoBlobURLsEnabled()) {
+    document->GetPublicURLManager().Resolve(script_url,
+                                            MakeRequest(&blob_url_token));
+  }
+
   if (document->GetFrame()->Client()->GetSharedWorkerRepositoryClient()) {
     document->GetFrame()->Client()->GetSharedWorkerRepositoryClient()->Connect(
-        worker, std::move(remote_port), script_url, name);
+        worker, std::move(remote_port), script_url, std::move(blob_url_token),
+        name);
   }
 
   return worker;
diff --git a/third_party/blink/renderer/core/workers/shared_worker_repository_client.h b/third_party/blink/renderer/core/workers/shared_worker_repository_client.h
index 9219d27..16f7c62d 100644
--- a/third_party/blink/renderer/core/workers/shared_worker_repository_client.h
+++ b/third_party/blink/renderer/core/workers/shared_worker_repository_client.h
@@ -32,6 +32,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_WORKERS_SHARED_WORKER_REPOSITORY_CLIENT_H_
 
 #include "base/macros.h"
+#include "third_party/blink/public/mojom/blob/blob_url_store.mojom-blink.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/wtf/forward.h"
@@ -53,6 +54,7 @@
   virtual void Connect(SharedWorker*,
                        MessagePortChannel,
                        const KURL&,
+                       mojom::blink::BlobURLTokenPtr,
                        const String& name) = 0;
 
   virtual void DocumentDetached(Document*) = 0;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
index 0f46369..1f3962a 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
@@ -322,6 +322,16 @@
   return role == kUnknownRole ? kGenericContainerRole : role;
 }
 
+Node* AXLayoutObject::GetNodeOrContainingBlockNode() const {
+  if (IsDetached())
+    return nullptr;
+  if (GetLayoutObject()->IsAnonymousBlock() &&
+      GetLayoutObject()->ContainingBlock()) {
+    return GetLayoutObject()->ContainingBlock()->GetNode();
+  }
+  return GetNode();
+}
+
 void AXLayoutObject::Init() {
   AXNodeObject::Init();
 }
@@ -1932,16 +1942,6 @@
   return GetLayoutObject() ? GetLayoutObject()->GetNode() : nullptr;
 }
 
-Node* AXLayoutObject::GetNodeOrContainingBlockNode() const {
-  if (IsDetached())
-    return nullptr;
-  if (GetLayoutObject()->IsAnonymousBlock() &&
-      GetLayoutObject()->ContainingBlock()) {
-    return GetLayoutObject()->ContainingBlock()->GetNode();
-  }
-  return GetNode();
-}
-
 Document* AXLayoutObject::GetDocument() const {
   if (!GetLayoutObject())
     return nullptr;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.h b/third_party/blink/renderer/modules/accessibility/ax_layout_object.h
index c2616d54..ec52265a 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.h
@@ -59,6 +59,10 @@
   AccessibilityRole DetermineAccessibilityRole() override;
   AccessibilityRole NativeAccessibilityRoleIgnoringAria() const override;
 
+  // If this is an anonymous block, returns the node of its containing layout
+  // block, otherwise returns the node of this layout object.
+  Node* GetNodeOrContainingBlockNode() const;
+
  protected:
   LayoutObject* layout_object_;
 
@@ -171,9 +175,6 @@
 
   // DOM and layout tree access.
   Node* GetNode() const override;
-  // If this is an anonymous block, returns the node of its containing layout
-  // block, otherwise returns the node of this layout object.
-  Node* GetNodeOrContainingBlockNode() const;
   Document* GetDocument() const override;
   LocalFrameView* DocumentFrameView() const override;
   Element* AnchorElement() const override;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_mock_object.h b/third_party/blink/renderer/modules/accessibility/ax_mock_object.h
index a06594e0..4282643 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_mock_object.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_mock_object.h
@@ -44,10 +44,9 @@
   // AXObject overrides.
   AXObject* ComputeParent() const override { return parent_; }
   AXRestriction Restriction() const override { return kNone; }
-
- private:
   bool IsMockObject() const final { return true; }
 
+ private:
   bool ComputeAccessibilityIsIgnored(IgnoredReasons* = nullptr) const override;
 
   DISALLOW_COPY_AND_ASSIGN(AXMockObject);
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc
index 759ff2f..76ad8cc 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -1255,6 +1255,10 @@
   return parent->AncestorExposesActiveDescendant();
 }
 
+bool AXObject::HasIndirectChildren() const {
+  return IsTableCol() || RoleValue() == kTableHeaderContainerRole;
+}
+
 bool AXObject::CanSetSelectedAttribute() const {
   // Sub-widget elements can be selected if not disabled (native or ARIA)
   return IsSubWidget() && Restriction() != kDisabled;
@@ -1994,7 +1998,7 @@
 }
 
 int AXObject::ChildCount() const {
-  return static_cast<int>(Children().size());
+  return HasIndirectChildren() ? 0 : static_cast<int>(Children().size());
 }
 
 const AXObject::AXObjectVector& AXObject::Children() const {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h
index 1d43fd9a..65be70d7 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_object.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -563,6 +563,9 @@
   bool HasInheritedPresentationalRole() const;
   bool IsPresentationalChild() const;
   bool CanBeActiveDescendant() const;
+  // Some objects, such as table cells, could be the children of more than one
+  // object but have only one primary parent.
+  bool HasIndirectChildren() const;
 
   //
   // Accessible name calculation
diff --git a/third_party/blink/renderer/modules/accessibility/ax_position.cc b/third_party/blink/renderer/modules/accessibility/ax_position.cc
index fc37bfb..a3684b6 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_position.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_position.cc
@@ -12,6 +12,7 @@
 #include "third_party/blink/renderer/core/editing/iterators/text_iterator.h"
 #include "third_party/blink/renderer/core/editing/position.h"
 #include "third_party/blink/renderer/core/editing/position_with_affinity.h"
+#include "third_party/blink/renderer/modules/accessibility/ax_layout_object.h"
 #include "third_party/blink/renderer/modules/accessibility/ax_object.h"
 #include "third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h"
 
@@ -29,7 +30,7 @@
   AXPosition position(*parent);
   position.text_offset_or_child_index_ = child.IndexInParent();
   DCHECK(position.IsValid());
-  return position;
+  return position.AsUnignoredPosition();
 }
 
 // static
@@ -44,7 +45,7 @@
   AXPosition position(*parent);
   position.text_offset_or_child_index_ = child.IndexInParent() + 1;
   DCHECK(position.IsValid());
-  return position;
+  return position.AsUnignoredPosition();
 }
 
 // static
@@ -54,12 +55,17 @@
     AXPosition position(container);
     position.text_offset_or_child_index_ = 0;
     DCHECK(position.IsValid());
-    return position;
+    return position.AsUnignoredPosition();
   }
-  AXPosition position(container);
+
+  const AXObject* unignored_container = container.AccessibilityIsIgnored()
+                                            ? container.ParentObjectUnignored()
+                                            : &container;
+  DCHECK(unignored_container);
+  AXPosition position(*unignored_container);
   position.text_offset_or_child_index_ = 0;
   DCHECK(position.IsValid());
-  return position;
+  return position.AsUnignoredPosition();
 }
 
 // static
@@ -67,19 +73,19 @@
     const AXObject& container) {
   if (container.GetNode() && container.GetNode()->IsTextNode()) {
     AXPosition position(container);
-    const auto first_position =
-        Position::FirstPositionInNode(*container.GetNode());
-    const auto last_position =
-        Position::LastPositionInNode(*container.GetNode());
-    position.text_offset_or_child_index_ =
-        TextIterator::RangeLength(first_position, last_position);
+    position.text_offset_or_child_index_ = position.MaxTextOffset();
     DCHECK(position.IsValid());
-    return position;
+    return position.AsUnignoredPosition();
   }
-  AXPosition position(container);
-  position.text_offset_or_child_index_ = container.ChildCount();
+
+  const AXObject* unignored_container = container.AccessibilityIsIgnored()
+                                            ? container.ParentObjectUnignored()
+                                            : &container;
+  DCHECK(unignored_container);
+  AXPosition position(*unignored_container);
+  position.text_offset_or_child_index_ = unignored_container->ChildCount();
   DCHECK(position.IsValid());
-  return position;
+  return position.AsUnignoredPosition();
 }
 
 // static
@@ -93,7 +99,7 @@
   position.text_offset_or_child_index_ = offset;
   position.affinity_ = affinity;
   DCHECK(position.IsValid());
-  return position;
+  return position.AsUnignoredPosition();
 }
 
 // static
@@ -116,16 +122,20 @@
   DCHECK(anchor_node);
   const AXObject* container = ax_object_cache_impl->GetOrCreate(anchor_node);
   DCHECK(container);
+
   AXPosition ax_position(*container);
   if (anchor_node->IsTextNode()) {
     // Convert from a DOM offset that may have uncompressed white space to a
     // character offset.
-    // TODO(ax-dev): Use LayoutNG offset mapping instead of |TextIterator|.
+    // TODO(nektar): Use LayoutNG offset mapping instead of
+    // |TextIterator|.
     const auto first_position = Position::FirstPositionInNode(*anchor_node);
     int offset =
         TextIterator::RangeLength(first_position, parent_anchored_position);
     ax_position.text_offset_or_child_index_ = offset;
   } else {
+    // |ComputeNodeAfterPosition| returns nullptr for "after children"
+    // positions.
     const Node* node_after_position = position.ComputeNodeAfterPosition();
     if (!node_after_position) {
       ax_position.text_offset_or_child_index_ = container->ChildCount();
@@ -143,7 +153,7 @@
 
   ax_position.affinity_ = affinity;
   DCHECK(ax_position.IsValid());
-  return ax_position;
+  return ax_position.AsUnignoredPosition();
 }
 
 // static
@@ -156,7 +166,7 @@
 // Only for use by |AXSelection| to represent empty selection ranges.
 AXPosition::AXPosition()
     : container_object_(nullptr),
-      text_offset_or_child_index_(),
+      text_offset_or_child_index_(0),
       affinity_(TextAffinity::kDownstream) {
 #if DCHECK_IS_ON()
   dom_tree_version_ = 0;
@@ -166,7 +176,7 @@
 
 AXPosition::AXPosition(const AXObject& container)
     : container_object_(&container),
-      text_offset_or_child_index_(),
+      text_offset_or_child_index_(0),
       affinity_(TextAffinity::kDownstream) {
   const Document* document = container_object_->GetDocument();
   DCHECK(document);
@@ -176,42 +186,51 @@
 #endif
 }
 
-const AXObject* AXPosition::ObjectAfterPosition() const {
+const AXObject* AXPosition::ChildAfterTreePosition() const {
   if (!IsValid() || IsTextPosition())
     return nullptr;
-  if (!container_object_->ChildCount())
-    return container_object_->NextInTreeObject();
-  if (container_object_->ChildCount() == ChildIndex())
-    return container_object_->LastChild()->NextInTreeObject();
+  if (container_object_->ChildCount() <= ChildIndex())
+    return nullptr;
   return *(container_object_->Children().begin() + ChildIndex());
 }
 
 int AXPosition::ChildIndex() const {
   if (!IsTextPosition())
-    return *text_offset_or_child_index_;
-  NOTREACHED() << *this << " should not be a text position.";
+    return text_offset_or_child_index_;
+  NOTREACHED() << *this << " should be a tree position.";
   return 0;
 }
 
 int AXPosition::TextOffset() const {
   if (IsTextPosition())
-    return *text_offset_or_child_index_;
+    return text_offset_or_child_index_;
   NOTREACHED() << *this << " should be a text position.";
   return 0;
 }
 
+int AXPosition::MaxTextOffset() const {
+  if (!IsTextPosition()) {
+    NOTREACHED() << *this << " should be a text position.";
+    return 0;
+  }
+
+  // TODO(nektar): Use LayoutNG offset mapping instead of |TextIterator|.
+  const auto first_position =
+      Position::FirstPositionInNode(*container_object_->GetNode());
+  const auto last_position =
+      Position::LastPositionInNode(*container_object_->GetNode());
+  return TextIterator::RangeLength(first_position, last_position);
+}
+
 bool AXPosition::IsValid() const {
   if (!container_object_ || container_object_->IsDetached())
     return false;
   if (!container_object_->GetNode() ||
-      !container_object_->GetNode()->isConnected())
+      !container_object_->GetNode()->isConnected()) {
     return false;
+  }
 
-  // We can't have both an object and a text anchored position, but we must have
-  // at least one of them.
-  DCHECK(text_offset_or_child_index_);
-  if (text_offset_or_child_index_ &&
-      !container_object_->GetNode()->IsTextNode()) {
+  if (!container_object_->GetNode()->IsTextNode()) {
     if (text_offset_or_child_index_ > container_object_->ChildCount())
       return false;
   }
@@ -228,61 +247,223 @@
 }
 
 bool AXPosition::IsTextPosition() const {
-  return IsValid() && container_object_->GetNode()->IsTextNode();
+  return container_object_ && container_object_->GetNode()->IsTextNode();
 }
 
 const AXPosition AXPosition::CreateNextPosition() const {
-  if (IsTextPosition()) {
-    if (!ContainerObject()->NextInTreeObject())
+  if (!IsValid())
+    return {};
+
+  if (IsTextPosition() && TextOffset() < MaxTextOffset())
+    return CreatePositionInTextObject(*container_object_, TextOffset() + 1);
+
+  const AXObject* child = ChildAfterTreePosition();
+  // Handles both an "after children" position, or a text position that is after
+  // the last character.
+  if (!child) {
+    const AXObject* next_in_order = container_object_->NextInTreeObject();
+    if (!next_in_order || !next_in_order->ParentObjectUnignored())
       return {};
-    return CreatePositionBeforeObject(*ContainerObject()->NextInTreeObject());
+    return CreatePositionBeforeObject(*next_in_order);
   }
 
-  if (!ObjectAfterPosition())
+  if (!child->ParentObjectUnignored())
     return {};
-  return CreatePositionBeforeObject(*ObjectAfterPosition());
+  return CreatePositionAfterObject(*child);
 }
 
 const AXPosition AXPosition::CreatePreviousPosition() const {
-  if (!ContainerObject()->PreviousInTreeObject())
+  if (!IsValid())
     return {};
-  return CreatePositionAfterObject(*ContainerObject()->PreviousInTreeObject());
+
+  if (IsTextPosition() && TextOffset() > 0)
+    return CreatePositionInTextObject(*container_object_, TextOffset() - 1);
+
+  const AXObject* child = ChildAfterTreePosition();
+  // Handles both an "after children" position, or a text position that is
+  // before the first character.
+  if (!child) {
+    if (container_object_->ChildCount()) {
+      const AXObject* last_child = container_object_->LastChild();
+      // Dont skip over any intervening text.
+      if (last_child->GetNode() && last_child->GetNode()->IsTextNode())
+        return CreatePositionAfterObject(*last_child);
+
+      return CreatePositionBeforeObject(*last_child);
+    }
+
+    const AXObject* previous_in_order =
+        container_object_->PreviousInTreeObject();
+    if (!previous_in_order || !previous_in_order->ParentObjectUnignored())
+      return {};
+    return CreatePositionAfterObject(*previous_in_order);
+  }
+
+  const AXObject* object_before_position = child->PreviousInTreeObject();
+  if (!object_before_position ||
+      !object_before_position->ParentObjectUnignored()) {
+    return {};
+  }
+
+  // Dont skip over any intervening text.
+  if (object_before_position->GetNode() &&
+      object_before_position->GetNode()->IsTextNode()) {
+    return CreatePositionAfterObject(*object_before_position);
+  }
+
+  return CreatePositionBeforeObject(*object_before_position);
 }
 
-const PositionWithAffinity AXPosition::ToPositionWithAffinity(
+const AXPosition AXPosition::AsUnignoredPosition(
     const AXPositionAdjustmentBehavior adjustment_behavior) const {
   if (!IsValid())
     return {};
 
-  const Node* container_node = container_object_->GetNode();
-  if (!container_node) {
+  // There are four possibilities:
+  // 1. The container object is ignored and this is not a text position or an
+  // "after children" position. Try to find the equivalent position in the
+  // unignored parent.
+  // 2. The container object is ignored and this is a text
+  // position. Adjust to the position immediately to the left or to the right,
+  // based on the adjustment behavior, possibly changing to a non-text position
+  // and recurse. 3. The position is an "after children" position, but the last
+  // child is ignored. Do the same as 2. 4. The object after the position is
+  // ignored, but the container object is not. Do the same as 2.
+
+  const AXObject* container = container_object_;
+  const AXObject* child = ChildAfterTreePosition();
+  const AXObject* last_child = container->LastChild();
+
+  // Case 1.
+  if (container->AccessibilityIsIgnored() && child) {
+    return CreatePositionBeforeObject(*child).AsUnignoredPosition(
+        adjustment_behavior);
+  }
+
+  // Cases 2, 3 and 4.
+  if (container->AccessibilityIsIgnored() ||
+      (!child && last_child && last_child->AccessibilityIsIgnored()) ||
+      (child && child->AccessibilityIsIgnored())) {
     switch (adjustment_behavior) {
       case AXPositionAdjustmentBehavior::kMoveRight:
-        CreateNextPosition().ToPositionWithAffinity(adjustment_behavior);
-        break;
+        return CreateNextPosition().AsUnignoredPosition(adjustment_behavior);
       case AXPositionAdjustmentBehavior::kMoveLeft:
-        CreatePreviousPosition().ToPositionWithAffinity(adjustment_behavior);
-        break;
+        return CreatePreviousPosition().AsUnignoredPosition(
+            adjustment_behavior);
     }
   }
 
-  if (!IsTextPosition()) {
-    if (ChildIndex() == container_object_->ChildCount()) {
+  return *this;
+}
+
+const AXPosition AXPosition::AsValidDOMPosition(
+    const AXPositionAdjustmentBehavior adjustment_behavior) const {
+  if (!IsValid())
+    return {};
+
+  // We adjust to the next or previous position if the container or the child
+  // object after a tree position are mock or virtual objects, since mock or
+  // virtual objects will not be present in the DOM tree. Alternatively, in the
+  // case of an "after children" position, we need to check if the last child of
+  // the container object is mock or virtual and adjust accordingly.
+
+  // More Explaination:
+  // If the child after a tree position doesn't have an associated node in the
+  // DOM tree, we adjust to the next or previous position because a
+  // corresponding child node will not be found in the DOM tree. We need a
+  // corresponding child node in the DOM tree so that we can anchor the DOM
+  // position before it. We can't ask the layout tree for the child's container
+  // block node, because this might change the placement of the AX position
+  // drastically. However, if the container doesn't have a corresponding DOM
+  // node, we need to use the layout tree to find its corresponding container
+  // block node, because no AX positions inside an anonymous layout block could
+  // be represented in the DOM tree anyway.
+
+  const AXObject* container = container_object_;
+  DCHECK(container);
+  const AXObject* child = ChildAfterTreePosition();
+  const AXObject* last_child = container->LastChild();
+  if (container->IsMockObject() || container->IsVirtualObject() ||
+      (!child && last_child &&
+       (!last_child->GetNode() || last_child->IsMockObject() ||
+        last_child->IsVirtualObject())) ||
+      (child && (!child->GetNode() || child->IsMockObject() ||
+                 child->IsVirtualObject()))) {
+    switch (adjustment_behavior) {
+      case AXPositionAdjustmentBehavior::kMoveRight:
+        return CreateNextPosition().AsValidDOMPosition(adjustment_behavior);
+      case AXPositionAdjustmentBehavior::kMoveLeft:
+        return CreatePreviousPosition().AsValidDOMPosition(adjustment_behavior);
+    }
+  }
+
+  if (container->GetNode())
+    return this->AsUnignoredPosition(adjustment_behavior);
+
+  DCHECK(container->IsAXLayoutObject())
+      << "Non virtual and non mock AX objects that are not associated to a DOM "
+         "node should have an associated layout object.";
+  const Node* anchor_node =
+      ToAXLayoutObject(container)->GetNodeOrContainingBlockNode();
+  DCHECK(anchor_node)
+      << "All anonymous layout objects should have a containing block element.";
+  DCHECK(!container->IsDetached());
+  auto& ax_object_cache_impl = container->AXObjectCache();
+  const AXObject* new_container = ax_object_cache_impl.GetOrCreate(anchor_node);
+  DCHECK(new_container);
+  AXPosition position(*new_container);
+  if (new_container == container->ParentObjectUnignored()) {
+    position.text_offset_or_child_index_ = container->IndexInParent();
+  } else {
+    position.text_offset_or_child_index_ = 0;
+  }
+  DCHECK(position.IsValid());
+  return position.AsValidDOMPosition(adjustment_behavior);
+}
+
+const PositionWithAffinity AXPosition::ToPositionWithAffinity(
+    const AXPositionAdjustmentBehavior adjustment_behavior) const {
+  const AXPosition adjusted_position = AsValidDOMPosition();
+  if (!adjusted_position.IsValid())
+    return {};
+
+  const Node* container_node = adjusted_position.container_object_->GetNode();
+  DCHECK(container_node);
+  if (!adjusted_position.IsTextPosition()) {
+    // AX positions that are unumbiguously at the start or end of a container,
+    // should convert to the corresponding DOM positions at the start or end of
+    // the same container. Other child positions in the accessibility tree
+    // should recompute their parent in the DOM tree, because they might be ARIA
+    // owned by a different object in the accessibility tree than in the DOM
+    // tree, or their parent in the accessibility tree might be ignored.
+
+    if (adjusted_position.ChildIndex() == 0) {
+      // Creates a |PositionAnchorType::kBeforeChildren| position.
+      return PositionWithAffinity(
+          Position::FirstPositionInNode(*container_node), affinity_);
+    }
+
+    if (adjusted_position.ChildIndex() == container_object_->ChildCount()) {
+      // Creates a |PositionAnchorType::kAfterChildren| position.
       return PositionWithAffinity(Position::LastPositionInNode(*container_node),
                                   affinity_);
     }
+
+    // Creates a |PositionAnchorType::kOffsetInAnchor| position.
     const AXObject* ax_child =
-        *(container_object_->Children().begin() + ChildIndex());
+        *(adjusted_position.container_object_->Children().begin() +
+          adjusted_position.ChildIndex());
+    DCHECK(ax_child);
     return PositionWithAffinity(
         Position::InParentBeforeNode(*(ax_child->GetNode())), affinity_);
   }
 
-  // TODO(ax-dev): Use LayoutNG offset mapping instead of |TextIterator|.
+  // TODO(nektar): Use LayoutNG offset mapping instead of |TextIterator|.
   const auto first_position = Position::FirstPositionInNode(*container_node);
   const auto last_position = Position::LastPositionInNode(*container_node);
   CharacterIterator character_iterator(first_position, last_position);
   const EphemeralRange range = character_iterator.CalculateCharacterSubrange(
-      0, *text_offset_or_child_index_);
+      0, adjusted_position.text_offset_or_child_index_);
   return PositionWithAffinity(range.EndPosition(), affinity_);
 }
 
@@ -381,11 +562,12 @@
   if (!position.IsValid())
     return ostream << "Invalid AXPosition";
   if (position.IsTextPosition()) {
-    return ostream << "AX text position in " << position.ContainerObject()
+    return ostream << "AX text position in " << *position.ContainerObject()
                    << ", " << position.TextOffset();
   }
   return ostream << "AX object anchored position in "
-                 << position.ContainerObject() << ", " << position.ChildIndex();
+                 << *position.ContainerObject() << ", "
+                 << position.ChildIndex();
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/accessibility/ax_position.h b/third_party/blink/renderer/modules/accessibility/ax_position.h
index becf9d9..22778d0e0 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_position.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_position.h
@@ -6,7 +6,6 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_ACCESSIBILITY_AX_POSITION_H_
 
 #include <base/logging.h>
-#include <base/optional.h>
 #include <stdint.h>
 #include <ostream>
 
@@ -20,14 +19,22 @@
 
 class AXObject;
 
-// When converting to a DOM position from an |AXPosition| and the corresponding
-// DOM position is invalid or doesn't exist, determines how to adjust the
-// |AXPosition| in order to make it valid.
+// When converting to a DOM position from an |AXPosition| or vice versa, and the
+// corresponding position is invalid, doesn't exist, or is inside an ignored
+// object or a range of ignored objects, determines how to adjust the new
+// position in order to make it valid.
 enum class AXPositionAdjustmentBehavior { kMoveLeft, kMoveRight };
 
 // Describes a position in the Blink accessibility tree.
 // A position is either anchored to before or after a child object inside a
 // container object, or is anchored to a character inside a text object.
+// The former are called tree positions, and the latter text positions.
+// Tree positions are never located on a specific |AXObject|. Rather, they are
+// always between two objects, or an object and the start / end of their
+// container's children, known as "before children" and "after children"
+// positions respectively. They should be thought of like a caret that is always
+// between two characters. Another way of calling these types of positions is
+// object anchored and text anchored.
 class MODULES_EXPORT AXPosition final {
   DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
 
@@ -50,16 +57,33 @@
   AXPosition& operator=(const AXPosition&) = default;
   ~AXPosition() = default;
 
+  // The |AXObject| in which the tree position is located, or in whose text the
+  // text position is found.
   const AXObject* ContainerObject() const { return container_object_; }
-  const AXObject* ObjectAfterPosition() const;
+
+  // Returns |nullptr| for text, and "after children" or equivalent positions.
+  const AXObject* ChildAfterTreePosition() const;
+
+  // Only valid for tree positions.
   int ChildIndex() const;
+
+  // Only valid for text positions.
   int TextOffset() const;
+
+  // If this is a text position, the length of the text in its container object.
+  int MaxTextOffset() const;
+
+  // When the same character offset could correspond to two possible caret
+  // positions, upstream means it's on the previous line rather than the next
+  // line.
   TextAffinity Affinity() const { return affinity_; }
 
   // Verifies if the anchor is present and if it's set to a live object with a
   // connected node.
   bool IsValid() const;
 
+  operator bool() const { return IsValid(); }
+
   // Returns whether this is a position anchored to a character inside a text
   // object.
   bool IsTextPosition() const;
@@ -67,12 +91,32 @@
   const AXPosition CreateNextPosition() const;
   const AXPosition CreatePreviousPosition() const;
 
+  // Returns an adjusted position by skipping over any ignored objects in the
+  // case of a "before object" or "after object" position, or skipping over any
+  // ignored children in the case of a "before children" or "after children"
+  // position. If a text object is ignored, returns a position anchored at the
+  // nearest object, which might not be a text object. If the container object
+  // is ignored, tries to find if an equivalent position exists in its unignored
+  // parent, since all the children of an ignored object in the accessibility
+  // tree appear as children of its immediate unignored parent.
+  const AXPosition AsUnignoredPosition(
+      const AXPositionAdjustmentBehavior =
+          AXPositionAdjustmentBehavior::kMoveLeft) const;
+
+  // Adjusts the position by skipping over any objects that don't have a
+  // corresponding |node| in the DOM tree, e.g. list bullets.
+  const AXPosition AsValidDOMPosition(
+      const AXPositionAdjustmentBehavior =
+          AXPositionAdjustmentBehavior::kMoveLeft) const;
+
+  // Converts to a DOM position.
   const PositionWithAffinity ToPositionWithAffinity(
       const AXPositionAdjustmentBehavior =
           AXPositionAdjustmentBehavior::kMoveLeft) const;
 
  private:
   AXPosition();
+  // Only used by static Create... methods.
   explicit AXPosition(const AXObject& container);
 
   // The |AXObject| in which the position is present.
@@ -86,15 +130,14 @@
   // of |container_object_| before the position. The canonical text is the DOM
   // node's text but with, e.g., whitespace collapsed and any transformations
   // applied.
-  base::Optional<int> text_offset_or_child_index_;
+  int text_offset_or_child_index_;
 
   // When the same character offset could correspond to two possible caret
-  // positions, upstream means it's on the previous line rather than the next
-  // line.
+  // positions.
   TextAffinity affinity_;
 
 #if DCHECK_IS_ON()
-  // TODO(ax-dev): Use layout tree version in place of DOM and style versions.
+  // TODO(nektar): Use layout tree version in place of DOM and style versions.
   uint64_t dom_tree_version_;
   uint64_t style_version_;
 #endif
diff --git a/third_party/blink/renderer/modules/accessibility/ax_position_test.cc b/third_party/blink/renderer/modules/accessibility/ax_position_test.cc
index 4038d63..26bafc03 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_position_test.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_position_test.cc
@@ -11,9 +11,58 @@
 #include "third_party/blink/renderer/core/html/html_element.h"
 #include "third_party/blink/renderer/modules/accessibility/ax_object.h"
 #include "third_party/blink/renderer/modules/accessibility/testing/accessibility_test.h"
+#include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 
 namespace blink {
 
+namespace {
+
+constexpr char kHTMLTable[] = R"HTML(
+    <p id="before">Before table.</p>
+    <table id="table" border="1">
+      <thead>
+        <tr id="headerRow">
+          <th id="firstHeaderCell">Number</th>
+          <th>Month</th>
+          <th id="lastHeaderCell">Expenses</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr id="firstRow">
+          <th id="firstCell">1</th>
+          <td>Jan</td>
+          <td>100</td>
+        </tr>
+        <tr>
+          <th>2</th>
+          <td>Feb</td>
+          <td>150</td>
+        </tr>
+        <tr id="lastRow">
+          <th>3</th>
+          <td>Mar</td>
+          <td id="lastCell">200</td>
+        </tr>
+      </tbody>
+    </table>
+    <p id="after">After table.</p>
+    )HTML";
+
+constexpr char kAOM[] = R"HTML(
+    <p id="before">Before virtual AOM node.</p>
+    <div id="aomParent"></div>
+    <p id="after">After virtual AOM node.</p>
+    <script>
+      let parent = document.getElementById("aomParent");
+      let node = new AccessibleNode();
+      node.role = "button";
+      node.label = "Button";
+      parent.accessibleNode.appendChild(node);
+    </script>
+    )HTML";
+
+}  // namespace
+
 //
 // Basic tests.
 //
@@ -22,6 +71,7 @@
   SetBodyInnerHTML(R"HTML(<p id="paragraph">Hello</p>)HTML");
   const Node* text = GetElementById("paragraph")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text =
       GetAXObjectByElementId("paragraph")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
@@ -35,7 +85,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 // To prevent surprises when comparing equality of two |AXPosition|s, position
@@ -44,6 +94,7 @@
   SetBodyInnerHTML(R"HTML(<p id="paragraph">Hello</p>)HTML");
   const Node* text = GetElementById("paragraph")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text =
       GetAXObjectByElementId("paragraph")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
@@ -57,7 +108,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, PositionBeforeTextWithFirstLetterCSSRule) {
@@ -66,6 +117,7 @@
       <p id="paragraph">Hello</p>)HTML");
   const Node* text = GetElementById("paragraph")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text =
       GetAXObjectByElementId("paragraph")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
@@ -79,7 +131,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 // To prevent surprises when comparing equality of two |AXPosition|s, position
@@ -89,6 +141,7 @@
   SetBodyInnerHTML(R"HTML(<p id="paragraph">Hello</p>)HTML");
   const Node* text = GetElementById("paragraph")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text =
       GetAXObjectByElementId("paragraph")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
@@ -102,7 +155,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, PositionBeforeLineBreak) {
@@ -118,7 +171,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(ax_br, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(ax_br, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, PositionAfterLineBreak) {
@@ -137,7 +190,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(ax_static_text, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(ax_static_text, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, FirstPositionInDivContainer) {
@@ -154,24 +207,21 @@
   const auto ax_position = AXPosition::CreateFirstPositionInObject(*ax_div);
   const auto position = ax_position.ToPositionWithAffinity();
   EXPECT_EQ(div, position.AnchorNode());
-  EXPECT_EQ(0, position.GetPosition().OffsetInContainerNode());
+  EXPECT_TRUE(position.GetPosition().IsBeforeChildren());
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(ax_static_text, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(ax_static_text, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, LastPositionInDivContainer) {
   SetBodyInnerHTML(R"HTML(<div id="div">Hello<br>there</div>
-                   <div id="divNext">Next div</div>)HTML");
+                   <div>Next div</div>)HTML");
   const Element* div = GetElementById("div");
   ASSERT_NE(nullptr, div);
   const AXObject* ax_div = GetAXObjectByElementId("div");
   ASSERT_NE(nullptr, ax_div);
   ASSERT_EQ(AccessibilityRole::kGenericContainerRole, ax_div->RoleValue());
-  const AXObject* ax_div_next = GetAXObjectByElementId("divNext");
-  ASSERT_NE(nullptr, ax_div_next);
-  ASSERT_EQ(AccessibilityRole::kGenericContainerRole, ax_div_next->RoleValue());
 
   const auto ax_position = AXPosition::CreateLastPositionInObject(*ax_div);
   const auto position = ax_position.ToPositionWithAffinity();
@@ -180,13 +230,14 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(ax_div_next, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, FirstPositionInTextContainer) {
   SetBodyInnerHTML(R"HTML(<div id="div">Hello</div>)HTML");
   const Node* text = GetElementById("div")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text = GetAXObjectByElementId("div")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
   ASSERT_EQ(AccessibilityRole::kStaticTextRole, ax_static_text->RoleValue());
@@ -199,13 +250,14 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, LastPositionInTextContainer) {
   SetBodyInnerHTML(R"HTML(<div id="div">Hello</div>)HTML");
   const Node* text = GetElementById("div")->lastChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text = GetAXObjectByElementId("div")->LastChild();
   ASSERT_NE(nullptr, ax_static_text);
   ASSERT_EQ(AccessibilityRole::kStaticTextRole, ax_static_text->RoleValue());
@@ -218,7 +270,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 //
@@ -278,6 +330,18 @@
   EXPECT_TRUE(paragraph_start < paragraph_end);
 }
 
+TEST_F(AccessibilityTest, AXPositionOperatorBool) {
+  SetBodyInnerHTML(R"HTML(Hello)HTML");
+  const AXObject* root = GetAXRootObject();
+  ASSERT_NE(nullptr, root);
+  const auto root_first = AXPosition::CreateFirstPositionInObject(*root);
+  EXPECT_TRUE(static_cast<bool>(root_first));
+  // The following should create an after children position on the root so it
+  // should be valid.
+  EXPECT_TRUE(static_cast<bool>(root_first.CreateNextPosition()));
+  EXPECT_FALSE(static_cast<bool>(root_first.CreatePreviousPosition()));
+}
+
 //
 // Test converting to and from visible text with white space.
 // The accessibility tree is based on visible text with white space compressed,
@@ -288,6 +352,7 @@
   SetBodyInnerHTML(R"HTML(<p id="paragraph">     Hello     </p>)HTML");
   const Node* text = GetElementById("paragraph")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text =
       GetAXObjectByElementId("paragraph")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
@@ -301,13 +366,14 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, PositionBeforeTextWithWhiteSpace) {
   SetBodyInnerHTML(R"HTML(<p id="paragraph">     Hello     </p>)HTML");
   const Node* text = GetElementById("paragraph")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text =
       GetAXObjectByElementId("paragraph")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
@@ -321,13 +387,14 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, PositionAfterTextWithWhiteSpace) {
   SetBodyInnerHTML(R"HTML(<p id="paragraph">     Hello     </p>)HTML");
   const Node* text = GetElementById("paragraph")->lastChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text =
       GetAXObjectByElementId("paragraph")->LastChild();
   ASSERT_NE(nullptr, ax_static_text);
@@ -341,7 +408,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, PositionBeforeLineBreakWithWhiteSpace) {
@@ -357,7 +424,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(ax_br, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(ax_br, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, PositionAfterLineBreakWithWhiteSpace) {
@@ -376,7 +443,7 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(ax_static_text, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(ax_static_text, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, FirstPositionInDivContainerWithWhiteSpace) {
@@ -393,24 +460,21 @@
   const auto ax_position = AXPosition::CreateFirstPositionInObject(*ax_div);
   const auto position = ax_position.ToPositionWithAffinity();
   EXPECT_EQ(div, position.AnchorNode());
-  EXPECT_EQ(0, position.GetPosition().OffsetInContainerNode());
+  EXPECT_TRUE(position.GetPosition().IsBeforeChildren());
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(ax_static_text, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(ax_static_text, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, LastPositionInDivContainerWithWhiteSpace) {
   SetBodyInnerHTML(R"HTML(<div id="div">     Hello<br>there     </div>
-                   <div id="divNext">Next div</div>)HTML");
+                   <div>Next div</div>)HTML");
   const Element* div = GetElementById("div");
   ASSERT_NE(nullptr, div);
   const AXObject* ax_div = GetAXObjectByElementId("div");
   ASSERT_NE(nullptr, ax_div);
   ASSERT_EQ(AccessibilityRole::kGenericContainerRole, ax_div->RoleValue());
-  const AXObject* ax_div_next = GetAXObjectByElementId("divNext");
-  ASSERT_NE(nullptr, ax_div_next);
-  ASSERT_EQ(AccessibilityRole::kGenericContainerRole, ax_div_next->RoleValue());
 
   const auto ax_position = AXPosition::CreateLastPositionInObject(*ax_div);
   const auto position = ax_position.ToPositionWithAffinity();
@@ -419,13 +483,14 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(ax_div_next, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, FirstPositionInTextContainerWithWhiteSpace) {
   SetBodyInnerHTML(R"HTML(<div id="div">     Hello     </div>)HTML");
   const Node* text = GetElementById("div")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text = GetAXObjectByElementId("div")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
   ASSERT_EQ(AccessibilityRole::kStaticTextRole, ax_static_text->RoleValue());
@@ -438,13 +503,14 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
 }
 
 TEST_F(AccessibilityTest, LastPositionInTextContainerWithWhiteSpace) {
   SetBodyInnerHTML(R"HTML(<div id="div">     Hello     </div>)HTML");
   const Node* text = GetElementById("div")->lastChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text = GetAXObjectByElementId("div")->LastChild();
   ASSERT_NE(nullptr, ax_static_text);
   ASSERT_EQ(AccessibilityRole::kStaticTextRole, ax_static_text->RoleValue());
@@ -457,7 +523,50 @@
 
   const auto ax_position_from_dom = AXPosition::FromPosition(position);
   EXPECT_EQ(ax_position, ax_position_from_dom);
-  EXPECT_EQ(nullptr, ax_position_from_dom.ObjectAfterPosition());
+  EXPECT_EQ(nullptr, ax_position_from_dom.ChildAfterTreePosition());
+}
+
+// Test that DOM positions in white space will be collapsed to the first or last
+// valid offset in an |AXPosition|.
+TEST_F(AccessibilityTest, AXPositionFromDOMPositionWithWhiteSpace) {
+  SetBodyInnerHTML(R"HTML(<div id="div">     Hello     </div>)HTML");
+  const Node* text = GetElementById("div")->firstChild();
+  ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
+  ASSERT_EQ(15U, text->textContent().length());
+  const AXObject* ax_static_text = GetAXObjectByElementId("div")->FirstChild();
+  ASSERT_NE(nullptr, ax_static_text);
+  ASSERT_EQ(AccessibilityRole::kStaticTextRole, ax_static_text->RoleValue());
+
+  const Position position_at_start(*text, 0);
+  const auto ax_position_at_start = AXPosition::FromPosition(position_at_start);
+  EXPECT_TRUE(ax_position_at_start.IsTextPosition());
+  EXPECT_EQ(ax_static_text, ax_position_at_start.ContainerObject());
+  EXPECT_EQ(0, ax_position_at_start.TextOffset());
+  EXPECT_EQ(nullptr, ax_position_at_start.ChildAfterTreePosition());
+
+  const Position position_after_white_space(*text, 5);
+  const auto ax_position_after_white_space =
+      AXPosition::FromPosition(position_after_white_space);
+  EXPECT_TRUE(ax_position_after_white_space.IsTextPosition());
+  EXPECT_EQ(ax_static_text, ax_position_after_white_space.ContainerObject());
+  EXPECT_EQ(0, ax_position_after_white_space.TextOffset());
+  EXPECT_EQ(nullptr, ax_position_after_white_space.ChildAfterTreePosition());
+
+  const Position position_at_end(*text, 15);
+  const auto ax_position_at_end = AXPosition::FromPosition(position_at_end);
+  EXPECT_TRUE(ax_position_at_end.IsTextPosition());
+  EXPECT_EQ(ax_static_text, ax_position_at_end.ContainerObject());
+  EXPECT_EQ(5, ax_position_at_end.TextOffset());
+  EXPECT_EQ(nullptr, ax_position_at_end.ChildAfterTreePosition());
+
+  const Position position_before_white_space(*text, 10);
+  const auto ax_position_before_white_space =
+      AXPosition::FromPosition(position_before_white_space);
+  EXPECT_TRUE(ax_position_before_white_space.IsTextPosition());
+  EXPECT_EQ(ax_static_text, ax_position_before_white_space.ContainerObject());
+  EXPECT_EQ(5, ax_position_before_white_space.TextOffset());
+  EXPECT_EQ(nullptr, ax_position_before_white_space.ChildAfterTreePosition());
 }
 
 //
@@ -502,11 +611,120 @@
 // Aria-hidden can cause things in the DOM to be hidden from accessibility.
 //
 
-TEST_F(AccessibilityTest, BeforePositionInARIAHidden) {}
+TEST_F(AccessibilityTest, BeforePositionInARIAHiddenShouldSkipARIAHidden) {
+  SetBodyInnerHTML(R"HTML(
+      <p id="before">Before aria-hidden.</p>
+      <p id="ariaHidden" aria-hidden="true">Aria-hidden.</p>
+      <p id="after">After aria-hidden.</p>
+      )HTML");
+  const Node* after = GetElementById("after");
+  ASSERT_NE(nullptr, after);
+  const AXObject* ax_before = GetAXObjectByElementId("before");
+  ASSERT_NE(nullptr, ax_before);
+  ASSERT_EQ(AccessibilityRole::kParagraphRole, ax_before->RoleValue());
+  const AXObject* ax_after = GetAXObjectByElementId("after");
+  ASSERT_NE(nullptr, ax_after);
+  ASSERT_EQ(AccessibilityRole::kParagraphRole, ax_after->RoleValue());
+  ASSERT_NE(nullptr, GetAXObjectByElementId("ariaHidden"));
+  ASSERT_TRUE(GetAXObjectByElementId("ariaHidden")->AccessibilityIsIgnored());
 
-TEST_F(AccessibilityTest, AfterPositionInARIAHidden) {}
+  const auto ax_position = AXPosition::CreatePositionAfterObject(*ax_before);
+  const auto position = ax_position.ToPositionWithAffinity();
+  EXPECT_EQ(GetDocument().body(), position.AnchorNode());
+  EXPECT_EQ(5, position.GetPosition().OffsetInContainerNode());
+  EXPECT_EQ(after, position.GetPosition().ComputeNodeAfterPosition());
 
-TEST_F(AccessibilityTest, FromPositionInARIAHidden) {}
+  const auto ax_position_from_dom = AXPosition::FromPosition(position);
+  EXPECT_EQ(ax_position, ax_position_from_dom);
+  EXPECT_EQ(ax_after, ax_position_from_dom.ChildAfterTreePosition());
+}
+
+TEST_F(AccessibilityTest, PreviousPositionAfterARIAHiddenShouldSkipARIAHidden) {
+  SetBodyInnerHTML(R"HTML(
+      <p id="before">Before aria-hidden.</p>
+      <p id="ariaHidden" aria-hidden="true">Aria-hidden.</p>
+      <p id="after">After aria-hidden.</p>
+      )HTML");
+  const Node* before = GetElementById("before");
+  ASSERT_NE(nullptr, before);
+  ASSERT_NE(nullptr, before->firstChild());
+  ASSERT_TRUE(before->firstChild()->IsTextNode());
+  const Node* after = GetElementById("after");
+  ASSERT_NE(nullptr, after);
+  const AXObject* ax_after = GetAXObjectByElementId("after");
+  ASSERT_NE(nullptr, ax_after);
+  ASSERT_EQ(AccessibilityRole::kParagraphRole, ax_after->RoleValue());
+  ASSERT_NE(nullptr, GetAXObjectByElementId("ariaHidden"));
+  ASSERT_TRUE(GetAXObjectByElementId("ariaHidden")->AccessibilityIsIgnored());
+
+  const auto ax_position = AXPosition::CreatePositionBeforeObject(*ax_after);
+  const auto position = ax_position.ToPositionWithAffinity();
+  EXPECT_EQ(GetDocument().body(), position.AnchorNode());
+  EXPECT_EQ(5, position.GetPosition().OffsetInContainerNode());
+  EXPECT_EQ(after, position.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_from_dom = AXPosition::FromPosition(position);
+  EXPECT_EQ(ax_position, ax_position_from_dom);
+  EXPECT_EQ(ax_after, ax_position_from_dom.ChildAfterTreePosition());
+
+  const auto ax_position_previous = ax_position.CreatePreviousPosition();
+  const auto position_previous = ax_position_previous.ToPositionWithAffinity();
+  EXPECT_EQ(before->firstChild(), position_previous.AnchorNode());
+  EXPECT_EQ(19, position_previous.GetPosition().OffsetInContainerNode());
+  EXPECT_EQ(nullptr,
+            position_previous.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_previous_from_dom =
+      AXPosition::FromPosition(position_previous);
+  EXPECT_EQ(ax_position_previous, ax_position_previous_from_dom);
+  EXPECT_EQ(nullptr, ax_position_previous_from_dom.ChildAfterTreePosition());
+}
+
+TEST_F(AccessibilityTest, DISABLED_FromPositionInARIAHidden) {
+  SetBodyInnerHTML(R"HTML(
+      <p id="before">Before aria-hidden.</p>
+      <p id="ariaHidden" aria-hidden="true">Aria-hidden.</p>
+      <p id="after">After aria-hidden.</p>
+      )HTML");
+  const Node* hidden = GetElementById("ariaHidden");
+  ASSERT_NE(nullptr, hidden);
+  const Node* text = hidden->firstChild();
+  ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
+  const AXObject* ax_root = GetAXRootObject();
+  ASSERT_NE(nullptr, ax_root);
+  ASSERT_EQ(AccessibilityRole::kWebAreaRole, ax_root->RoleValue());
+  ASSERT_EQ(2, ax_root->ChildCount());
+  const AXObject* ax_after = GetAXObjectByElementId("after");
+  ASSERT_NE(nullptr, ax_after);
+  ASSERT_EQ(AccessibilityRole::kParagraphRole, ax_after->RoleValue());
+  ASSERT_NE(nullptr, GetAXObjectByElementId("ariaHidden"));
+  ASSERT_TRUE(GetAXObjectByElementId("ariaHidden")->AccessibilityIsIgnored());
+
+  const auto position_first = Position::FirstPositionInNode(*hidden);
+  const auto position_last = Position::LastPositionInNode(*hidden);
+  const auto position_before = Position::BeforeNode(*hidden);
+  const auto position_after = Position::AfterNode(*hidden);
+  const auto position_text = Position::EditingPositionOf(text, 3);
+  const auto positions = {position_first, position_last, position_before,
+                          position_after, position_text};
+
+  for (const auto& position : positions) {
+    const auto ax_position_left = AXPosition::FromPosition(position);
+    EXPECT_TRUE(ax_position_left.IsValid());
+    EXPECT_FALSE(ax_position_left.IsTextPosition());
+    EXPECT_EQ(ax_root, ax_position_left.ContainerObject());
+    EXPECT_EQ(1, ax_position_left.ChildIndex());
+    EXPECT_EQ(ax_after, ax_position_left.ChildAfterTreePosition());
+
+    const auto ax_position_right = AXPosition::FromPosition(position);
+    EXPECT_TRUE(ax_position_right.IsValid());
+    EXPECT_FALSE(ax_position_right.IsTextPosition());
+    EXPECT_EQ(ax_root, ax_position_left.ContainerObject());
+    EXPECT_EQ(2, ax_position_left.ChildIndex());
+    EXPECT_EQ(nullptr, ax_position_left.ChildAfterTreePosition());
+  }
+}
 
 //
 // Canvas fallback can cause things to be in the accessibility tree that are not
@@ -517,20 +735,302 @@
 
 //
 // Some layout objects, e.g. list bullets and CSS::before/after content, appear
-// in the accessibility tree but is not present in the DOM.
+// in the accessibility tree but are not present in the DOM.
 //
 
-TEST_F(AccessibilityTest, PositionBeforeListBullet) {}
+TEST_F(AccessibilityTest, DISABLED_PositionBeforeListMarker) {
+  SetBodyInnerHTML(R"HTML(
+      <ul id="list">
+        <li id="listItem">Item.</li>
+      </ul>
+      )HTML");
+  const Node* list = GetElementById("list");
+  ASSERT_NE(nullptr, list);
+  const Node* item = GetElementById("listItem");
+  ASSERT_NE(nullptr, item);
+  const Node* text = item->firstChild();
+  ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
+  const AXObject* ax_item = GetAXObjectByElementId("listItem");
+  ASSERT_NE(nullptr, ax_item);
+  ASSERT_EQ(AccessibilityRole::kListItemRole, ax_item->RoleValue());
+  ASSERT_EQ(2, ax_item->ChildCount());
+  const AXObject* ax_marker = ax_item->FirstChild();
+  ASSERT_NE(nullptr, ax_marker);
+  ASSERT_EQ(AccessibilityRole::kListMarkerRole, ax_marker->RoleValue());
 
-TEST_F(AccessibilityTest, PositionAfterListBullet) {}
+  const auto ax_position_1 = AXPosition::CreateFirstPositionInObject(*ax_item);
+  const auto position_1 = ax_position_1.ToPositionWithAffinity(
+      AXPositionAdjustmentBehavior::kMoveLeft);
+  EXPECT_EQ(list, position_1.AnchorNode());
+  EXPECT_TRUE(position_1.GetPosition().IsBeforeChildren());
+  EXPECT_EQ(item, position_1.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_from_dom_1 = AXPosition::FromPosition(position_1);
+  EXPECT_EQ(ax_position_1, ax_position_from_dom_1);
+  EXPECT_EQ(ax_marker, ax_position_from_dom_1.ChildAfterTreePosition());
+
+  const auto ax_position_2 = AXPosition::CreatePositionBeforeObject(*ax_marker);
+  const auto position_2 = ax_position_2.ToPositionWithAffinity(
+      AXPositionAdjustmentBehavior::kMoveLeft);
+  EXPECT_EQ(list, position_2.AnchorNode());
+  EXPECT_TRUE(position_2.GetPosition().IsBeforeChildren());
+  EXPECT_EQ(item, position_2.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_from_dom_2 = AXPosition::FromPosition(position_2);
+  EXPECT_EQ(ax_position_2, ax_position_from_dom_2);
+  EXPECT_EQ(ax_marker, ax_position_from_dom_2.ChildAfterTreePosition());
+
+  const auto position_3 = ax_position_1.ToPositionWithAffinity(
+      AXPositionAdjustmentBehavior::kMoveRight);
+  EXPECT_EQ(list, position_3.AnchorNode());
+  EXPECT_TRUE(position_3.GetPosition().IsBeforeChildren());
+  EXPECT_EQ(item, position_3.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_from_dom_3 = AXPosition::FromPosition(position_3);
+  EXPECT_EQ(ax_position_1, ax_position_from_dom_3);
+  EXPECT_EQ(ax_marker, ax_position_from_dom_3.ChildAfterTreePosition());
+
+  const auto position_4 = ax_position_2.ToPositionWithAffinity(
+      AXPositionAdjustmentBehavior::kMoveRight);
+  EXPECT_EQ(list, position_4.AnchorNode());
+  EXPECT_TRUE(position_4.GetPosition().IsBeforeChildren());
+  EXPECT_EQ(item, position_4.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_from_dom_4 = AXPosition::FromPosition(position_4);
+  EXPECT_EQ(ax_position_2, ax_position_from_dom_4);
+  EXPECT_EQ(ax_marker, ax_position_from_dom_4.ChildAfterTreePosition());
+}
+
+TEST_F(AccessibilityTest, PositionAfterListMarker) {
+  SetBodyInnerHTML(R"HTML(
+      <ol>
+        <li id="listItem">Item.</li>
+      </ol>
+      )HTML");
+  const Node* item = GetElementById("listItem");
+  ASSERT_NE(nullptr, item);
+  const Node* text = item->firstChild();
+  ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
+  const AXObject* ax_item = GetAXObjectByElementId("listItem");
+  ASSERT_NE(nullptr, ax_item);
+  ASSERT_EQ(AccessibilityRole::kListItemRole, ax_item->RoleValue());
+  ASSERT_EQ(2, ax_item->ChildCount());
+  const AXObject* ax_marker = ax_item->FirstChild();
+  ASSERT_NE(nullptr, ax_marker);
+  ASSERT_EQ(AccessibilityRole::kListMarkerRole, ax_marker->RoleValue());
+  const AXObject* ax_text = ax_item->LastChild();
+  ASSERT_NE(nullptr, ax_text);
+  ASSERT_EQ(AccessibilityRole::kStaticTextRole, ax_text->RoleValue());
+
+  const auto ax_position = AXPosition::CreatePositionAfterObject(*ax_marker);
+  const auto position = ax_position.ToPositionWithAffinity();
+  EXPECT_EQ(item, position.AnchorNode());
+  EXPECT_EQ(0, position.GetPosition().OffsetInContainerNode());
+  EXPECT_EQ(text, position.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_from_dom = AXPosition::FromPosition(position);
+  EXPECT_EQ(ax_position, ax_position_from_dom);
+  EXPECT_EQ(ax_text, ax_position_from_dom.ChildAfterTreePosition());
+}
 
 TEST_F(AccessibilityTest, PositionInCSSContent) {}
 
 //
 // Objects deriving from |AXMockObject|, e.g. table columns, are in the
 // accessibility tree but are neither in the DOM or layout trees.
+// Same for virtual nodes created using the Accessibility Object Model (AOM).
 //
 
-TEST_F(AccessibilityTest, PositionInTableColumn) {}
+TEST_F(AccessibilityTest, PositionBeforeAndAfterTable) {
+  SetBodyInnerHTML(kHTMLTable);
+  const Node* after = GetElementById("after");
+  ASSERT_NE(nullptr, after);
+  const AXObject* ax_table = GetAXObjectByElementId("table");
+  ASSERT_NE(nullptr, ax_table);
+  ASSERT_EQ(AccessibilityRole::kTableRole, ax_table->RoleValue());
+  const AXObject* ax_after = GetAXObjectByElementId("after");
+  ASSERT_NE(nullptr, ax_after);
+  ASSERT_EQ(AccessibilityRole::kParagraphRole, ax_after->RoleValue());
+
+  const auto ax_position_before =
+      AXPosition::CreatePositionBeforeObject(*ax_table);
+  const auto position_before = ax_position_before.ToPositionWithAffinity();
+  EXPECT_EQ(GetDocument().body(), position_before.AnchorNode());
+  EXPECT_EQ(3, position_before.GetPosition().OffsetInContainerNode());
+  const Node* table = position_before.GetPosition().ComputeNodeAfterPosition();
+  ASSERT_NE(nullptr, table);
+  EXPECT_EQ(GetElementById("table"), table);
+
+  const auto ax_position_before_from_dom =
+      AXPosition::FromPosition(position_before);
+  EXPECT_EQ(ax_position_before, ax_position_before_from_dom);
+
+  const auto ax_position_after =
+      AXPosition::CreatePositionAfterObject(*ax_table);
+  const auto position_after = ax_position_after.ToPositionWithAffinity();
+  EXPECT_EQ(GetDocument().body(), position_after.AnchorNode());
+  EXPECT_EQ(5, position_after.GetPosition().OffsetInContainerNode());
+  const Node* node_after =
+      position_after.GetPosition().ComputeNodeAfterPosition();
+  EXPECT_EQ(after, node_after);
+
+  const auto ax_position_after_from_dom =
+      AXPosition::FromPosition(position_after);
+  EXPECT_EQ(ax_position_after, ax_position_after_from_dom);
+  EXPECT_EQ(ax_after, ax_position_after_from_dom.ChildAfterTreePosition());
+}
+
+TEST_F(AccessibilityTest, PositionAtStartAndEndOfTable) {
+  SetBodyInnerHTML(kHTMLTable);
+  const Node* table = GetElementById("table");
+  ASSERT_NE(nullptr, table);
+  const Node* last_cell = GetElementById("lastCell");
+  ASSERT_NE(nullptr, last_cell);
+  const Node* last_cell_text = last_cell->firstChild();
+  ASSERT_NE(nullptr, last_cell_text);
+  ASSERT_TRUE(last_cell_text->IsTextNode());
+  const AXObject* ax_table = GetAXObjectByElementId("table");
+  ASSERT_NE(nullptr, ax_table);
+  ASSERT_EQ(AccessibilityRole::kTableRole, ax_table->RoleValue());
+
+  const auto ax_position_at_start =
+      AXPosition::CreateFirstPositionInObject(*ax_table);
+  const auto position_at_start = ax_position_at_start.ToPositionWithAffinity();
+  EXPECT_EQ(table, position_at_start.AnchorNode());
+  EXPECT_TRUE(position_at_start.GetPosition().IsBeforeChildren());
+
+  const auto ax_position_at_start_from_dom =
+      AXPosition::FromPosition(position_at_start);
+  EXPECT_EQ(ax_position_at_start, ax_position_at_start_from_dom);
+
+  const auto ax_position_at_end =
+      AXPosition::CreateLastPositionInObject(*ax_table);
+  const auto position_at_end = ax_position_at_end.ToPositionWithAffinity();
+  EXPECT_EQ(last_cell_text, position_at_end.AnchorNode());
+  EXPECT_EQ(3, position_at_end.GetPosition().OffsetInContainerNode());
+
+  const auto ax_position_at_end_from_dom =
+      AXPosition::FromPosition(position_at_end);
+  EXPECT_EQ(ax_position_at_end.AsValidDOMPosition(),
+            ax_position_at_end_from_dom);
+  EXPECT_EQ(nullptr, ax_position_at_end_from_dom.ChildAfterTreePosition());
+}
+
+TEST_F(AccessibilityTest, PositionInTableHeader) {
+  SetBodyInnerHTML(kHTMLTable);
+  const Node* header_row = GetElementById("headerRow");
+  ASSERT_NE(nullptr, header_row);
+  const AXObject* ax_first_header_cell =
+      GetAXObjectByElementId("firstHeaderCell");
+  ASSERT_NE(nullptr, ax_first_header_cell);
+  ASSERT_EQ(AccessibilityRole::kColumnHeaderRole,
+            ax_first_header_cell->RoleValue());
+  const AXObject* ax_last_header_cell =
+      GetAXObjectByElementId("lastHeaderCell");
+  ASSERT_NE(nullptr, ax_last_header_cell);
+  ASSERT_EQ(AccessibilityRole::kColumnHeaderRole,
+            ax_last_header_cell->RoleValue());
+
+  const auto ax_position_before =
+      AXPosition::CreatePositionBeforeObject(*ax_first_header_cell);
+  const auto position_before = ax_position_before.ToPositionWithAffinity();
+  EXPECT_EQ(header_row, position_before.AnchorNode());
+  EXPECT_TRUE(position_before.GetPosition().IsBeforeChildren());
+
+  const auto ax_position_before_from_dom =
+      AXPosition::FromPosition(position_before);
+  EXPECT_EQ(ax_position_before, ax_position_before_from_dom);
+
+  const auto ax_position_after =
+      AXPosition::CreatePositionAfterObject(*ax_last_header_cell);
+  const auto position_after = ax_position_after.ToPositionWithAffinity();
+  EXPECT_EQ(header_row, position_after.AnchorNode());
+  EXPECT_TRUE(position_after.GetPosition().IsAfterChildren());
+  EXPECT_EQ(nullptr, position_after.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_after_from_dom =
+      AXPosition::FromPosition(position_after);
+  EXPECT_EQ(ax_position_after, ax_position_after_from_dom);
+}
+
+TEST_F(AccessibilityTest, PositionInTableRow) {
+  SetBodyInnerHTML(kHTMLTable);
+  const Node* first_row = GetElementById("firstRow");
+  ASSERT_NE(nullptr, first_row);
+  const Node* last_row = GetElementById("lastRow");
+  ASSERT_NE(nullptr, last_row);
+  const AXObject* ax_first_cell = GetAXObjectByElementId("firstCell");
+  ASSERT_NE(nullptr, ax_first_cell);
+  ASSERT_EQ(AccessibilityRole::kRowHeaderRole, ax_first_cell->RoleValue());
+  const AXObject* ax_last_cell = GetAXObjectByElementId("lastCell");
+  ASSERT_NE(nullptr, ax_last_cell);
+  ASSERT_EQ(AccessibilityRole::kCellRole, ax_last_cell->RoleValue());
+
+  const auto ax_position_before =
+      AXPosition::CreatePositionBeforeObject(*ax_first_cell);
+  const auto position_before = ax_position_before.ToPositionWithAffinity();
+  EXPECT_EQ(first_row, position_before.AnchorNode());
+  EXPECT_TRUE(position_before.GetPosition().IsBeforeChildren());
+
+  const auto ax_position_before_from_dom =
+      AXPosition::FromPosition(position_before);
+  EXPECT_EQ(ax_position_before, ax_position_before_from_dom);
+
+  const auto ax_position_after =
+      AXPosition::CreatePositionAfterObject(*ax_last_cell);
+  const auto position_after = ax_position_after.ToPositionWithAffinity();
+  EXPECT_EQ(last_row, position_after.AnchorNode());
+  EXPECT_TRUE(position_after.GetPosition().IsAfterChildren());
+  EXPECT_EQ(nullptr, position_after.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_after_from_dom =
+      AXPosition::FromPosition(position_after);
+  EXPECT_EQ(ax_position_after, ax_position_after_from_dom);
+}
+
+TEST_F(AccessibilityTest, DISABLED_PositionInVirtualAOMNode) {
+  ScopedAccessibilityObjectModelForTest(true);
+  SetBodyInnerHTML(kAOM);
+  const Node* parent = GetElementById("aomParent");
+  ASSERT_NE(nullptr, parent);
+  const Node* after = GetElementById("after");
+  ASSERT_NE(nullptr, after);
+  const AXObject* ax_parent = GetAXObjectByElementId("aomParent");
+  ASSERT_NE(nullptr, ax_parent);
+  ASSERT_EQ(AccessibilityRole::kGenericContainerRole, ax_parent->RoleValue());
+  ASSERT_EQ(1, ax_parent->ChildCount());
+  const AXObject* ax_button = ax_parent->FirstChild();
+  ASSERT_NE(nullptr, ax_button);
+  ASSERT_EQ(AccessibilityRole::kButtonRole, ax_button->RoleValue());
+  const AXObject* ax_after = GetAXObjectByElementId("after");
+  ASSERT_NE(nullptr, ax_after);
+  ASSERT_EQ(AccessibilityRole::kParagraphRole, ax_after->RoleValue());
+
+  const auto ax_position_before =
+      AXPosition::CreatePositionBeforeObject(*ax_button);
+  const auto position_before = ax_position_before.ToPositionWithAffinity();
+  EXPECT_EQ(parent, position_before.AnchorNode());
+  EXPECT_TRUE(position_before.GetPosition().IsBeforeChildren());
+  EXPECT_EQ(nullptr, position_before.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_before_from_dom =
+      AXPosition::FromPosition(position_before);
+  EXPECT_EQ(ax_position_before, ax_position_before_from_dom);
+  EXPECT_EQ(ax_button, ax_position_before_from_dom.ChildAfterTreePosition());
+
+  const auto ax_position_after =
+      AXPosition::CreatePositionAfterObject(*ax_button);
+  const auto position_after = ax_position_after.ToPositionWithAffinity();
+  EXPECT_EQ(after, position_after.AnchorNode());
+  EXPECT_TRUE(position_after.GetPosition().IsBeforeChildren());
+  EXPECT_EQ(nullptr, position_after.GetPosition().ComputeNodeAfterPosition());
+
+  const auto ax_position_after_from_dom =
+      AXPosition::FromPosition(position_after);
+  EXPECT_EQ(ax_position_after, ax_position_after_from_dom);
+  EXPECT_EQ(ax_after, ax_position_after_from_dom.ChildAfterTreePosition());
+}
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/accessibility/ax_selection.h b/third_party/blink/renderer/modules/accessibility/ax_selection.h
index 32275e25..122c4e0 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_selection.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_selection.h
@@ -42,6 +42,8 @@
   // invalid, or if the positions are in two separate documents.
   bool IsValid() const;
 
+  operator bool() const { return IsValid(); }
+
   const SelectionInDOMTree AsSelection(
       const AXSelectionBehavior =
           AXSelectionBehavior::kExtendToValidDOMRange) const;
@@ -60,7 +62,8 @@
   AXPosition extent_;
 
 #if DCHECK_IS_ON()
-  // TODO(ax-dev): Use layout tree version in place of DOM and style versions.
+  // TODO(accessibility): Use layout tree version in place of DOM and style
+  // versions.
   uint64_t dom_tree_version_;
   uint64_t style_version_;
 #endif
diff --git a/third_party/blink/renderer/modules/accessibility/ax_selection_test.cc b/third_party/blink/renderer/modules/accessibility/ax_selection_test.cc
index a1ba17b..8d23a214 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_selection_test.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_selection_test.cc
@@ -22,6 +22,7 @@
   SetBodyInnerHTML(R"HTML(<p id='paragraph'>Hello</p>)HTML");
   const Node* text = GetElementById("paragraph")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text =
       GetAXObjectByElementId("paragraph")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
@@ -46,6 +47,7 @@
   SetBodyInnerHTML(R"HTML(<p id='paragraph'>     Hello</p>)HTML");
   const Node* text = GetElementById("paragraph")->firstChild();
   ASSERT_NE(nullptr, text);
+  ASSERT_TRUE(text->IsTextNode());
   const AXObject* ax_static_text =
       GetAXObjectByElementId("paragraph")->FirstChild();
   ASSERT_NE(nullptr, ax_static_text);
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_track.cc b/third_party/blink/renderer/modules/mediastream/media_stream_track.cc
index 17c7759..67d5dd3f 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_track.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_track.cc
@@ -475,6 +475,17 @@
     settings.setEchoCancellationType(platform_settings.echo_cancellation_type);
   }
 
+  if (platform_settings.HasSampleRate())
+    settings.setSampleRate(platform_settings.sample_rate);
+  if (platform_settings.HasSampleSize())
+    settings.setSampleSize(platform_settings.sample_size);
+  if (platform_settings.HasChannelCount())
+    settings.setChannelCount(platform_settings.channel_count);
+  if (platform_settings.HasLatency())
+    settings.setLatency(platform_settings.latency);
+  if (platform_settings.HasVolume())
+    settings.setVolume(platform_settings.volume);
+
   if (image_capture_)
     image_capture_->GetMediaTrackSettings(settings);
 }
diff --git a/third_party/blink/renderer/modules/mediastream/media_track_settings.idl b/third_party/blink/renderer/modules/mediastream/media_track_settings.idl
index 2feca7c..20d06f4 100644
--- a/third_party/blink/renderer/modules/mediastream/media_track_settings.idl
+++ b/third_party/blink/renderer/modules/mediastream/media_track_settings.idl
@@ -10,19 +10,17 @@
     double aspectRatio;
     double frameRate;
     DOMString facingMode;
-    // volume, sampleRate and sampleSize are not implemented.
-    // double volume;
-    // long sampleRate;
-    // long sampleSize;
+    double volume;
+    long sampleRate;
+    long sampleSize;
     boolean echoCancellation;
     boolean autoGainControl;
     boolean noiseSuppression;
-    [OriginTrialEnabled=ExperimentalHardwareEchoCancellation] DOMString echoCancellationType;
-    // latency and channelCount are not implemented.
-    // double latency;
-    // long channelCount;
+    double latency;
+    long channelCount;
     DOMString deviceId;
     DOMString groupId;
+    [OriginTrialEnabled=ExperimentalHardwareEchoCancellation] DOMString echoCancellationType;
     // Media Capture Depth Stream Extensions
     // https://w3c.github.io/mediacapture-depth/#mediatracksettings-dictionary
     // TODO(aleksandar.stojiljkovic): videoKind, depthNear, depthFar,
diff --git a/third_party/blink/renderer/modules/webaudio/DEPS b/third_party/blink/renderer/modules/webaudio/DEPS
index 5011e3e1..700b540d 100644
--- a/third_party/blink/renderer/modules/webaudio/DEPS
+++ b/third_party/blink/renderer/modules/webaudio/DEPS
@@ -1,4 +1,6 @@
 include_rules = [
+    "+services/metrics/public/cpp/ukm_builders.h",
+    "+services/metrics/public/cpp/ukm_recorder.h",
     "-third_party/blink/renderer/modules",
     "+third_party/blink/renderer/modules/event_modules.h",
     "+third_party/blink/renderer/modules/event_target_modules.h",
diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/third_party/blink/renderer/modules/webaudio/audio_context.cc
index a13673c..5df9bc3 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_context.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_context.cc
@@ -5,6 +5,8 @@
 #include "third_party/blink/renderer/modules/webaudio/audio_context.h"
 
 #include "build/build_config.h"
+#include "services/metrics/public/cpp/ukm_builders.h"
+#include "services/metrics/public/cpp/ukm_recorder.h"
 #include "third_party/blink/public/platform/web_audio_latency_hint.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
@@ -410,6 +412,15 @@
   if (!autoplay_status_.has_value())
     return;
 
+  ukm::UkmRecorder* ukm_recorder = GetDocument()->UkmRecorder();
+  DCHECK(ukm_recorder);
+  ukm::builders::Media_Autoplay_AudioContext(GetDocument()->UkmSourceID())
+      .SetStatus(autoplay_status_.value())
+      .SetUnlockType(autoplay_unlock_type_
+                         ? static_cast<int>(autoplay_unlock_type_.value())
+                         : -1)
+      .Record(ukm_recorder);
+
   // Record autoplay_status_ value.
   DEFINE_STATIC_LOCAL(
       EnumerationHistogram, autoplay_histogram,
diff --git a/third_party/blink/renderer/modules/webaudio/default_audio_destination_node.cc b/third_party/blink/renderer/modules/webaudio/default_audio_destination_node.cc
index 50646ee..7f334e59 100644
--- a/third_party/blink/renderer/modules/webaudio/default_audio_destination_node.cc
+++ b/third_party/blink/renderer/modules/webaudio/default_audio_destination_node.cc
@@ -37,7 +37,6 @@
     AudioNode& node,
     const WebAudioLatencyHint& latency_hint)
     : AudioDestinationHandler(node),
-      number_of_input_channels_(0),
       latency_hint_(latency_hint) {
   // Node-specific default mixing rules.
   channel_count_ = 2;
@@ -78,7 +77,6 @@
   if (destination_->IsPlaying())
     StopDestination();
 
-  number_of_input_channels_ = 0;
   AudioHandler::Uninitialize();
 }
 
diff --git a/third_party/blink/renderer/modules/webaudio/default_audio_destination_node.h b/third_party/blink/renderer/modules/webaudio/default_audio_destination_node.h
index 2abfee8..3ef08a3 100644
--- a/third_party/blink/renderer/modules/webaudio/default_audio_destination_node.h
+++ b/third_party/blink/renderer/modules/webaudio/default_audio_destination_node.h
@@ -79,8 +79,6 @@
   // tasks are completed.
   scoped_refptr<AudioDestination> destination_;
 
-  String input_device_id_;
-  unsigned number_of_input_channels_;
   const WebAudioLatencyHint latency_hint_;
 };
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource.cc b/third_party/blink/renderer/platform/loader/fetch/resource.cc
index 21ebc51..6d9cc88 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource.cc
@@ -470,6 +470,7 @@
 }
 
 static bool CanUseResponse(const ResourceResponse& response,
+                           bool allow_stale,
                            double response_timestamp) {
   if (response.IsNull())
     return false;
@@ -492,8 +493,11 @@
       return false;
   }
 
-  return CurrentAge(response, response_timestamp) <=
-         FreshnessLifetime(response, response_timestamp);
+  double max_life = FreshnessLifetime(response, response_timestamp);
+  if (allow_stale)
+    max_life += response.CacheControlStaleWhileRevalidate();
+
+  return CurrentAge(response, response_timestamp) <= max_life;
 }
 
 const ResourceRequest& Resource::LastResourceRequest() const {
@@ -1034,7 +1038,8 @@
 
 bool Resource::CanReuseRedirectChain() const {
   for (auto& redirect : redirect_chain_) {
-    if (!CanUseResponse(redirect.redirect_response_, response_timestamp_))
+    if (!CanUseResponse(redirect.redirect_response_, false /*allow_stale*/,
+                        response_timestamp_))
       return false;
     if (redirect.request_.CacheControlContainsNoCache() ||
         redirect.request_.CacheControlContainsNoStore())
@@ -1068,12 +1073,49 @@
   return false;
 }
 
-bool Resource::MustRevalidateDueToCacheHeaders() const {
-  return !CanUseResponse(GetResponse(), response_timestamp_) ||
+bool Resource::MustRevalidateDueToCacheHeaders(bool allow_stale) const {
+  return !CanUseResponse(GetResponse(), allow_stale, response_timestamp_) ||
          GetResourceRequest().CacheControlContainsNoCache() ||
          GetResourceRequest().CacheControlContainsNoStore();
 }
 
+static bool ShouldRevalidateStaleResponse(const ResourceRequest& request,
+                                          const ResourceResponse& response,
+                                          double response_timestamp) {
+  double staleness = response.CacheControlStaleWhileRevalidate();
+  if (staleness == 0)
+    return false;
+
+  return CurrentAge(response, response_timestamp) >
+         FreshnessLifetime(response, response_timestamp);
+}
+
+bool Resource::ShouldRevalidateStaleResponse() const {
+  for (auto& redirect : redirect_chain_) {
+    // Use |response_timestamp_| since we don't store the timestamp
+    // of each redirect response.
+    if (blink::ShouldRevalidateStaleResponse(redirect.request_,
+                                             redirect.redirect_response_,
+                                             response_timestamp_)) {
+      return true;
+    }
+  }
+
+  return blink::ShouldRevalidateStaleResponse(
+      GetResourceRequest(), GetResponse(), response_timestamp_);
+}
+
+bool Resource::AsyncRevalidationRequested() const {
+  if (GetResponse().AsyncRevalidationRequested())
+    return true;
+
+  for (auto& redirect : redirect_chain_) {
+    if (redirect.redirect_response_.AsyncRevalidationRequested())
+      return true;
+  }
+  return false;
+}
+
 bool Resource::CanUseCacheValidator() const {
   if (IsLoading() || ErrorOccurred())
     return false;
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource.h b/third_party/blink/renderer/platform/loader/fetch/resource.h
index 2cc65074..e49aedf 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource.h
+++ b/third_party/blink/renderer/platform/loader/fetch/resource.h
@@ -261,12 +261,17 @@
                             base::SingleThreadTaskRunner*);
 
   bool CanReuseRedirectChain() const;
-  bool MustRevalidateDueToCacheHeaders() const;
+  bool MustRevalidateDueToCacheHeaders(bool allow_stale) const;
+  bool ShouldRevalidateStaleResponse() const;
   virtual bool CanUseCacheValidator() const;
   bool IsCacheValidator() const { return is_revalidating_; }
   bool HasCacheControlNoStoreHeader() const;
   bool MustReloadDueToVaryHeader(const ResourceRequest& new_request) const;
 
+  // Returns true if any resource in the request chain has revalidation
+  // requested.
+  bool AsyncRevalidationRequested() const;
+
   const IntegrityMetadataSet& IntegrityMetadata() const {
     return options_.integrity_metadata;
   }
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
index 89b84a0..caddaa0 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
@@ -1267,7 +1267,8 @@
   // Check if the cache headers requires us to revalidate (cache expiration for
   // example).
   if (request.GetCacheMode() == mojom::FetchCacheMode::kValidateCache ||
-      existing_resource.MustRevalidateDueToCacheHeaders() ||
+      existing_resource.MustRevalidateDueToCacheHeaders(
+          false /* allow_stale */) ||
       request.CacheControlContainsNoCache()) {
     // Revalidation is harmful for non-matched preloads because it may lead to
     // sharing one preloaded resource among multiple ResourceFetchers.
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_response.cc b/third_party/blink/renderer/platform/loader/fetch/resource_response.cc
index d756e72..8771ae8 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_response.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_response.cc
@@ -410,6 +410,10 @@
         http_header_fields_.Get(kCacheControlHeader),
         http_header_fields_.Get(kPragmaHeader));
   }
+  if (!std::isfinite(cache_control_header_.stale_while_revalidate) ||
+      cache_control_header_.stale_while_revalidate < 0) {
+    return 0;
+  }
   return cache_control_header_.stale_while_revalidate;
 }
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_response.h b/third_party/blink/renderer/platform/loader/fetch/resource_response.h
index 309f5ce5..fec4db50 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_response.h
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_response.h
@@ -218,11 +218,12 @@
   bool CacheControlContainsMustRevalidate() const;
   bool HasCacheValidatorFields() const;
   double CacheControlMaxAge() const;
-  double CacheControlStaleWhileRevalidate() const;
   double Date() const;
   double Age() const;
   double Expires() const;
   double LastModified() const;
+  // Will always return values >= 0.
+  double CacheControlStaleWhileRevalidate() const;
 
   unsigned ConnectionID() const;
   void SetConnectionID(unsigned);
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_test.cc
index 453c1c3..4c20b71f 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_test.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_test.cc
@@ -421,4 +421,70 @@
   EXPECT_FALSE(resource->IsAlive());
 }
 
+TEST(ResourceTest, StaleWhileRevalidateCacheControl) {
+  ScopedTestingPlatformSupport<MockPlatform> mock;
+  const KURL url("http://127.0.0.1:8000/foo.html");
+  ResourceResponse response(url);
+  response.SetHTTPStatusCode(200);
+  response.SetHTTPHeaderField(HTTPNames::Cache_Control,
+                              "max-age=0, stale-while-revalidate=40");
+
+  MockResource* resource = MockResource::Create(url);
+  resource->ResponseReceived(response, nullptr);
+  resource->FinishForTest();
+
+  EXPECT_FALSE(resource->MustRevalidateDueToCacheHeaders(false));
+  EXPECT_FALSE(resource->MustRevalidateDueToCacheHeaders(true));
+  EXPECT_FALSE(resource->ShouldRevalidateStaleResponse());
+
+  mock->AdvanceClockSeconds(1);
+  EXPECT_TRUE(resource->MustRevalidateDueToCacheHeaders(false));
+  EXPECT_FALSE(resource->MustRevalidateDueToCacheHeaders(true));
+  EXPECT_TRUE(resource->ShouldRevalidateStaleResponse());
+
+  mock->AdvanceClockSeconds(40);
+  EXPECT_TRUE(resource->MustRevalidateDueToCacheHeaders(false));
+  EXPECT_TRUE(resource->MustRevalidateDueToCacheHeaders(true));
+  EXPECT_TRUE(resource->ShouldRevalidateStaleResponse());
+}
+
+TEST(ResourceTest, StaleWhileRevalidateCacheControlWithRedirect) {
+  ScopedTestingPlatformSupport<MockPlatform> mock;
+  const KURL url("http://127.0.0.1:8000/foo.html");
+  const KURL redirect_target_url("http://127.0.0.1:8000/food.html");
+  ResourceResponse response(url);
+  response.SetHTTPHeaderField(HTTPNames::Cache_Control, "max-age=50");
+  response.SetHTTPStatusCode(200);
+
+  // The revalidating request is redirected.
+  ResourceResponse redirect_response(url);
+  redirect_response.SetHTTPHeaderField(
+      "location", AtomicString(redirect_target_url.GetString()));
+  redirect_response.SetHTTPStatusCode(302);
+  redirect_response.SetHTTPHeaderField(HTTPNames::Cache_Control,
+                                       "max-age=0, stale-while-revalidate=40");
+  redirect_response.SetAsyncRevalidationRequested(true);
+  ResourceRequest redirected_revalidating_request(redirect_target_url);
+
+  MockResource* resource = MockResource::Create(url);
+  resource->WillFollowRedirect(redirected_revalidating_request,
+                               redirect_response);
+  resource->ResponseReceived(response, nullptr);
+  resource->FinishForTest();
+
+  EXPECT_FALSE(resource->MustRevalidateDueToCacheHeaders(false));
+  EXPECT_FALSE(resource->MustRevalidateDueToCacheHeaders(true));
+  EXPECT_FALSE(resource->ShouldRevalidateStaleResponse());
+
+  mock->AdvanceClockSeconds(41);
+
+  // MustRevalidateDueToCacheHeaders only looks at the stored response not
+  // any redirects but ShouldRevalidate and AsyncRevalidationRequest look
+  // at the entire redirect chain.
+  EXPECT_FALSE(resource->MustRevalidateDueToCacheHeaders(false));
+  EXPECT_FALSE(resource->MustRevalidateDueToCacheHeaders(true));
+  EXPECT_TRUE(resource->ShouldRevalidateStaleResponse());
+  EXPECT_TRUE(resource->AsyncRevalidationRequested());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_center.cc b/third_party/blink/renderer/platform/mediastream/media_stream_center.cc
index 06f9591..7e6ff05 100644
--- a/third_party/blink/renderer/platform/mediastream/media_stream_center.cc
+++ b/third_party/blink/renderer/platform/mediastream/media_stream_center.cc
@@ -39,7 +39,6 @@
 #include "third_party/blink/public/platform/web_media_stream.h"
 #include "third_party/blink/public/platform/web_media_stream_center.h"
 #include "third_party/blink/public/platform/web_media_stream_source.h"
-#include "third_party/blink/public/platform/web_media_stream_track.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_descriptor.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_web_audio_source.h"
 #include "third_party/blink/renderer/platform/wtf/assertions.h"
@@ -113,4 +112,11 @@
     private_->DidStopMediaStreamSource(source);
 }
 
+void MediaStreamCenter::GetSourceSettings(
+    MediaStreamSource* source,
+    WebMediaStreamTrack::Settings& settings) {
+  if (private_)
+    private_->GetSourceSettings(source, settings);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_center.h b/third_party/blink/renderer/platform/mediastream/media_stream_center.h
index a3c03c0..48fb098e 100644
--- a/third_party/blink/renderer/platform/mediastream/media_stream_center.h
+++ b/third_party/blink/renderer/platform/mediastream/media_stream_center.h
@@ -35,6 +35,7 @@
 
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
+#include "third_party/blink/public/platform/web_media_stream_track.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/wtf/allocator.h"
@@ -68,6 +69,8 @@
 
   void DidStopMediaStreamSource(MediaStreamSource*);
 
+  void GetSourceSettings(MediaStreamSource*, WebMediaStreamTrack::Settings&);
+
  private:
   MediaStreamCenter();
 
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_source.cc b/third_party/blink/renderer/platform/mediastream/media_stream_source.cc
index 816dfda3..86453cdb 100644
--- a/third_party/blink/renderer/platform/mediastream/media_stream_source.cc
+++ b/third_party/blink/renderer/platform/mediastream/media_stream_source.cc
@@ -29,6 +29,8 @@
  */
 
 #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h"
+
+#include "third_party/blink/renderer/platform/mediastream/media_stream_center.h"
 #include "third_party/blink/renderer/platform/wtf/assertions.h"
 
 namespace blink {
@@ -146,6 +148,8 @@
     settings.auto_gain_control = *auto_gain_control_;
   if (noise_supression_)
     settings.noise_supression = *noise_supression_;
+
+  MediaStreamCenter::Instance().GetSourceSettings(this, settings);
 }
 
 void MediaStreamSource::SetAudioFormat(size_t number_of_channels,
diff --git a/third_party/blink/renderer/platform/wtf/date_math.cc b/third_party/blink/renderer/platform/wtf/date_math.cc
index 30d5044..a7f3e3e 100644
--- a/third_party/blink/renderer/platform/wtf/date_math.cc
+++ b/third_party/blink/renderer/platform/wtf/date_math.cc
@@ -77,6 +77,7 @@
 #include <time.h>
 #include <algorithm>
 #include <limits>
+#include <memory>
 #include "build/build_config.h"
 #include "third_party/blink/renderer/platform/wtf/ascii_ctype.h"
 #include "third_party/blink/renderer/platform/wtf/assertions.h"
@@ -86,6 +87,8 @@
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 #include "third_party/blink/renderer/platform/wtf/time.h"
 
+#include <unicode/timezone.h>
+
 #if defined(OS_WIN)
 #include <windows.h>
 #else
@@ -835,9 +838,11 @@
 }
 
 double ConvertToLocalTime(double ms) {
-  double utc_offset = CalculateUTCOffset();
-  double dst_offset = CalculateDSTOffset(ms, utc_offset);
-  return (ms + utc_offset + dst_offset);
+  std::unique_ptr<icu::TimeZone> timezone(icu::TimeZone::createDefault());
+  int32_t raw_offset, dst_offset;
+  UErrorCode status = U_ZERO_ERROR;
+  timezone->getOffset(ms, false, raw_offset, dst_offset, status);
+  return (ms + static_cast<double>(raw_offset + dst_offset));
 }
 
 }  // namespace WTF
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
index 77e917d0..aa2b3d32 100644
--- a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
+++ b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
@@ -365,7 +365,7 @@
           return processed
 
         def is_ng_name_mismatch(expected, actual):
-            if 'LayoutNGBlockFlow' not in actual:
+            if not re.search("LayoutNG(BlockFlow|ListItem|TableCaption|TableCell)", actual):
                 return False
             if not self._is_render_tree(actual) and not self._is_layer_tree(actual):
                 return False
diff --git a/third_party/guava/BUILD.gn b/third_party/guava/BUILD.gn
index 01cb6b0..57d6e1b 100644
--- a/third_party/guava/BUILD.gn
+++ b/third_party/guava/BUILD.gn
@@ -9,9 +9,8 @@
 # the full guava and one that supports android. Please keep the versions in
 # sync with one another.
 
-java_prebuilt("guava_android_java") {
+android_java_prebuilt("guava_android_java") {
   testonly = true
-  supports_android = true
   jar_path = "lib/guava-android.jar"
 
   # Avoids dependency cycle.
diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn
index 7d1dc88..4f98a0fc 100644
--- a/third_party/libaom/BUILD.gn
+++ b/third_party/libaom/BUILD.gn
@@ -43,11 +43,6 @@
   if (is_nacl) {
     platform_include_dir = "source/config/linux/generic"
   } else {
-    # TODO(johannkoenig): remove mac-specific config files.
-    # The mac configurations are currently a relic. They were useful when
-    # x86inc.asm did not work for MACH_O but now the build is identical to the
-    # linux config. iOS for arm on the other hand needs an apple-specific twist in
-    # aom_config.asm
     if (is_ios && current_cpu == "arm") {
       os_category = current_os
     } else if (is_posix || is_fuchsia) {
@@ -67,39 +62,6 @@
 
   config("libaom_config") {
     include_dirs = libaom_include_dirs
-
-    # gn orders flags on a target before flags from configs. The default config
-    # adds -Wall, and these flags have to be after -Wall -- so they need to come
-    # from a config and can't be on the target directly.
-    if (is_clang) {
-      cflags = [
-        # TODO(johannkoenig): these may no longer apply.
-        # libvpx heavily relies on implicit enum casting.
-        "-Wno-conversion",
-
-        # libvpx does `if ((a == b))` in some places.
-        "-Wno-parentheses-equality",
-
-        # libvpx has many static functions in header, which trigger this warning.
-        "-Wno-unused-function",
-      ]
-
-      # TODO(johannkoenig): these may no longer apply.
-      # Fixes a mac / ios simulator link error for vpx_scaled_2d:
-      # Undefined symbols for architecture x86_64:
-      # "_vpx_scaled_2d", referenced from:
-      # _vp9_scale_and_extend_frame_c in libvpx.a(vp9_frame_scale.o)
-      # (maybe you meant: _vpx_scaled_2d_ssse3)
-      # ld: symbol(s) not found for architecture x86_64
-      if (is_mac || (is_ios && (current_cpu == "x86" || current_cpu == "x64"))) {
-        cflags += [ "-fno-common" ]
-      }
-    } else if (!is_win) {
-      cflags = [
-        "-Wno-unused-function",
-        "-Wno-sign-compare",
-      ]
-    }
   }
 
   # This config is applied to targets that depend on libaom.
@@ -109,12 +71,9 @@
 
   if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
     yasm_assemble("libaom_yasm") {
-      if (current_cpu == "x86") {
-        sources = libaom_srcs_x86_assembly
-      } else if (current_cpu == "x64") {
-        sources = libaom_srcs_x86_64_assembly
-      }
-
+      sources = aom_dsp_common_asm_sse2
+      sources += aom_dsp_common_asm_ssse3
+      sources += aom_ports_asm_x86
       defines = [ "CHROMIUM" ]
       if (is_android) {
         # TODO(johannkoenig): this was for vp8 assembly. May no longer apply.
@@ -124,29 +83,13 @@
       }
       include_dirs = libaom_include_dirs
     }
-  }
 
-  if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
     # The following targets are deliberately source_set rather than
     # static_library. The :libaom target exposes these intrinsic implementations
     # via global function pointer symbols, which hides the object dependency at
     # link time. On Mac, this results in undefined references to the intrinsic
     # symbols.
 
-    source_set("libaom_intrinsics_mmx") {
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":libaom_config" ]
-      if (!is_win) {
-        cflags = [ "-mmmx" ]
-      }
-      if (current_cpu == "x86") {
-        sources = libaom_srcs_x86_mmx
-      } else if (current_cpu == "x64") {
-        sources = libaom_srcs_x86_64_mmx
-      }
-    }
-
     source_set("libaom_intrinsics_sse2") {
       configs -= [ "//build/config/compiler:chromium_code" ]
       configs += [ "//build/config/compiler:no_chromium_code" ]
@@ -154,11 +97,8 @@
       if (!is_win || is_clang) {
         cflags = [ "-msse2" ]
       }
-      if (current_cpu == "x86") {
-        sources = libaom_srcs_x86_sse2
-      } else if (current_cpu == "x64") {
-        sources = libaom_srcs_x86_64_sse2
-      }
+      sources = aom_av1_common_intrin_sse2
+      sources += aom_dsp_common_intrin_sse2
     }
 
     source_set("libaom_intrinsics_ssse3") {
@@ -168,11 +108,8 @@
       if (!is_win || is_clang) {
         cflags = [ "-mssse3" ]
       }
-      if (current_cpu == "x86") {
-        sources = libaom_srcs_x86_ssse3
-      } else if (current_cpu == "x64") {
-        sources = libaom_srcs_x86_64_ssse3
-      }
+      sources = aom_av1_common_intrin_ssse3
+      sources += aom_dsp_common_intrin_ssse3
     }
 
     source_set("libaom_intrinsics_sse4_1") {
@@ -182,10 +119,16 @@
       if (!is_win || is_clang) {
         cflags = [ "-msse4.1" ]
       }
-      if (current_cpu == "x86") {
-        sources = libaom_srcs_x86_sse4_1
-      } else if (current_cpu == "x64") {
-        sources = libaom_srcs_x86_64_sse4_1
+      sources = aom_av1_common_intrin_sse4_1
+      sources += aom_dsp_common_intrin_sse4_1
+    }
+
+    source_set("libaom_intrinsics_sse4_2") {
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":libaom_config" ]
+      if (!is_win || is_clang) {
+        cflags = [ "-msse4.2" ]
       }
     }
 
@@ -198,11 +141,6 @@
       } else {
         cflags = [ "-mavx" ]
       }
-      if (current_cpu == "x86") {
-        sources = libaom_srcs_x86_avx
-      } else if (current_cpu == "x64") {
-        sources = libaom_srcs_x86_64_avx
-      }
     }
 
     source_set("libaom_intrinsics_avx2") {
@@ -214,77 +152,23 @@
       } else {
         cflags = [ "-mavx2" ]
       }
-      if (current_cpu == "x86") {
-        sources = libaom_srcs_x86_avx2
-      } else if (current_cpu == "x64") {
-        sources = libaom_srcs_x86_64_avx2
-      }
+      sources = aom_av1_common_intrin_avx2
+      sources += aom_dsp_common_intrin_avx2
     }
   }
 
-  if (cpu_arch_full == "arm-neon-cpu-detect") {
-    static_library("libaom_intrinsics_neon") {
-      configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
+  if (current_cpu == "arm64" || cpu_arch_full == "arm-neon" ||
+      cpu_arch_full == "arm-neon-cpu-detect") {
+    source_set("libaom_intrinsics_neon") {
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      if (current_cpu == "arm") {
+        configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
+        cflags = [ "-mfpu=neon" ]
+      }
       configs += [ ":libaom_config" ]
-      cflags = [ "-mfpu=neon" ]
-      sources = libaom_srcs_arm_neon_cpu_detect_neon
-    }
-  }
-
-  if (current_cpu == "arm") {
-    if (cpu_arch_full == "arm-neon") {
-      arm_assembly_sources = libaom_srcs_arm_neon_assembly
-    } else if (cpu_arch_full == "arm-neon-cpu-detect") {
-      arm_assembly_sources = libaom_srcs_arm_neon_cpu_detect_assembly
-    } else {
-      arm_assembly_sources = libaom_srcs_arm_assembly
-    }
-  }
-
-  # Converts ARM assembly files to GAS style.
-  if (current_cpu == "arm" && arm_assembly_sources != []) {
-    action_foreach("convert_arm_assembly") {
-      script = "//third_party/libaom/run_perl.py"
-      sources = arm_assembly_sources
-      gen_file =
-          get_label_info("//third_party/libaom/source/libaom", "root_gen_dir") +
-          "/{{source_root_relative_dir}}/{{source_file_part}}.S"
-      outputs = [
-        gen_file,
-      ]
-      if (is_ios) {
-        ads2gas_script =
-            "//third_party/libaom/source/libaom/build/make/ads2gas_apple.pl"
-      } else {
-        ads2gas_script =
-            "//third_party/libaom/source/libaom/build/make/ads2gas.pl"
-      }
-      args = [
-        "-s",
-        rebase_path(ads2gas_script, root_build_dir),
-        "-i",
-        "{{source}}",
-        "-o",
-        rebase_path(gen_file),
-      ]
-    }
-
-    static_library("libaom_assembly_arm") {
-      sources = get_target_outputs(":convert_arm_assembly")
-      configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
-      configs += [ ":libaom_config" ]
-      if (cpu_arch_full == "arm-neon" ||
-          cpu_arch_full == "arm-neon-cpu-detect") {
-        asmflags = [ "-mfpu=neon" ]
-
-        # allow asm files to include generated sources which match the source
-        # tree layout, e.g., aom_dsp/arm/...
-        include_dirs = [ get_label_info("//third_party/libaom/source/libaom",
-                                        "target_gen_dir") ]
-      }
-      deps = [
-        ":convert_arm_assembly",
-      ]
+      sources = aom_av1_common_intrin_neon
+      sources += aom_dsp_common_intrin_neon
     }
   }
 
@@ -293,56 +177,37 @@
       configs -= [ "//build/config/compiler:default_optimization" ]
       configs += [ "//build/config/compiler:optimize_max" ]
     }
-
-    if (is_nacl) {
-      sources = libaom_srcs_generic
-    } else if (current_cpu == "x86") {
-      sources = libaom_srcs_x86
-    } else if (current_cpu == "x64") {
-      if (is_msan) {
-        sources = libaom_srcs_generic
-      } else {
-        sources = libaom_srcs_x86_64
-      }
-    } else if (current_cpu == "mipsel" || current_cpu == "mips64el") {
-      sources = libaom_srcs_mips
-    } else if (current_cpu == "arm") {
-      if (arm_use_neon) {
-        sources = libaom_srcs_arm_neon
-      } else if (is_android) {
-        sources = libaom_srcs_arm_neon_cpu_detect
-      } else {
-        sources = libaom_srcs_arm
-      }
-    } else if (current_cpu == "arm64") {
-      sources = libaom_srcs_arm64
-    }
-
     configs -= [ "//build/config/compiler:chromium_code" ]
     configs += [ "//build/config/compiler:no_chromium_code" ]
     configs += [ ":libaom_config" ]
+    sources = aom_av1_common_sources
+    sources += aom_av1_decoder_sources
+    sources += aom_dsp_common_sources
+    sources += aom_dsp_decoder_sources
+    sources += aom_mem_sources
+    sources += aom_rtcd_sources
+    sources += aom_scale_sources
+    sources += aom_sources
+    sources += aom_util_sources
     deps = []
     if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
       deps += [
         ":libaom_intrinsics_avx",
         ":libaom_intrinsics_avx2",
-        ":libaom_intrinsics_mmx",
         ":libaom_intrinsics_sse2",
         ":libaom_intrinsics_sse4_1",
+        ":libaom_intrinsics_sse4_2",
         ":libaom_intrinsics_ssse3",
         ":libaom_yasm",
       ]
     }
-    if (cpu_arch_full == "arm-neon-cpu-detect") {
+    if (current_cpu == "arm64" || cpu_arch_full == "arm-neon" ||
+        cpu_arch_full == "arm-neon-cpu-detect") {
       deps += [ ":libaom_intrinsics_neon" ]
     }
     if (is_android) {
       deps += [ "//third_party/android_tools:cpu_features" ]
     }
-    if (current_cpu == "arm" && arm_assembly_sources != []) {
-      deps += [ ":libaom_assembly_arm" ]
-    }
-
     public_configs = [ ":libaom_external_config" ]
   }
 }
diff --git a/third_party/libaom/BUILD.gn.cmake b/third_party/libaom/BUILD.gn.cmake
deleted file mode 100644
index 4f98a0fc..0000000
--- a/third_party/libaom/BUILD.gn.cmake
+++ /dev/null
@@ -1,213 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//build/buildflag_header.gni")
-import("//build/config/arm.gni")
-import("//build/config/android/config.gni")
-import("//build/config/sanitizers/sanitizers.gni")
-import("//third_party/libaom/options.gni")
-import("//third_party/libaom/libaom_srcs.gni")
-import("//third_party/yasm/yasm_assemble.gni")
-
-buildflag_header("av1_buildflags") {
-  header = "av1_buildflags.h"
-
-  flags = [ "ENABLE_AV1_DECODER=$enable_av1_decoder" ]
-}
-
-if (enable_av1_decoder) {
-  # Sets the architecture name for building libaom.
-  if (current_cpu == "x86") {
-    cpu_arch_full = "ia32"
-  } else if (current_cpu == "x64") {
-    if (is_msan) {
-      # TODO(johannkoenig): Check if MSAN builds pass. libaom is favoring
-      # intrinsics over assembly.
-      cpu_arch_full = "generic"
-    } else {
-      cpu_arch_full = "x64"
-    }
-  } else if (current_cpu == "arm") {
-    if (arm_use_neon) {
-      cpu_arch_full = "arm-neon"
-    } else if (is_android) {
-      cpu_arch_full = "arm-neon-cpu-detect"
-    } else {
-      cpu_arch_full = "arm"
-    }
-  } else {
-    cpu_arch_full = current_cpu
-  }
-
-  if (is_nacl) {
-    platform_include_dir = "source/config/linux/generic"
-  } else {
-    if (is_ios && current_cpu == "arm") {
-      os_category = current_os
-    } else if (is_posix || is_fuchsia) {
-      # Should cover linux, fuchsia, mac, and the ios simulator.
-      os_category = "linux"
-    } else {  # This should only match windows.
-      os_category = current_os
-    }
-    platform_include_dir = "source/config/$os_category/$cpu_arch_full"
-  }
-
-  libaom_include_dirs = [
-    "source/config",
-    platform_include_dir,
-    "source/libaom",
-  ]
-
-  config("libaom_config") {
-    include_dirs = libaom_include_dirs
-  }
-
-  # This config is applied to targets that depend on libaom.
-  config("libaom_external_config") {
-    include_dirs = [ "source/libaom" ]
-  }
-
-  if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
-    yasm_assemble("libaom_yasm") {
-      sources = aom_dsp_common_asm_sse2
-      sources += aom_dsp_common_asm_ssse3
-      sources += aom_ports_asm_x86
-      defines = [ "CHROMIUM" ]
-      if (is_android) {
-        # TODO(johannkoenig): this was for vp8 assembly. May no longer apply.
-        # On Android, define __ANDROID__ to use alternative standard library
-        # functions.
-        defines += [ "__ANDROID__" ]
-      }
-      include_dirs = libaom_include_dirs
-    }
-
-    # The following targets are deliberately source_set rather than
-    # static_library. The :libaom target exposes these intrinsic implementations
-    # via global function pointer symbols, which hides the object dependency at
-    # link time. On Mac, this results in undefined references to the intrinsic
-    # symbols.
-
-    source_set("libaom_intrinsics_sse2") {
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":libaom_config" ]
-      if (!is_win || is_clang) {
-        cflags = [ "-msse2" ]
-      }
-      sources = aom_av1_common_intrin_sse2
-      sources += aom_dsp_common_intrin_sse2
-    }
-
-    source_set("libaom_intrinsics_ssse3") {
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":libaom_config" ]
-      if (!is_win || is_clang) {
-        cflags = [ "-mssse3" ]
-      }
-      sources = aom_av1_common_intrin_ssse3
-      sources += aom_dsp_common_intrin_ssse3
-    }
-
-    source_set("libaom_intrinsics_sse4_1") {
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":libaom_config" ]
-      if (!is_win || is_clang) {
-        cflags = [ "-msse4.1" ]
-      }
-      sources = aom_av1_common_intrin_sse4_1
-      sources += aom_dsp_common_intrin_sse4_1
-    }
-
-    source_set("libaom_intrinsics_sse4_2") {
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":libaom_config" ]
-      if (!is_win || is_clang) {
-        cflags = [ "-msse4.2" ]
-      }
-    }
-
-    source_set("libaom_intrinsics_avx") {
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":libaom_config" ]
-      if (is_win) {
-        cflags = [ "/arch:AVX" ]
-      } else {
-        cflags = [ "-mavx" ]
-      }
-    }
-
-    source_set("libaom_intrinsics_avx2") {
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":libaom_config" ]
-      if (is_win) {
-        cflags = [ "/arch:AVX2" ]
-      } else {
-        cflags = [ "-mavx2" ]
-      }
-      sources = aom_av1_common_intrin_avx2
-      sources += aom_dsp_common_intrin_avx2
-    }
-  }
-
-  if (current_cpu == "arm64" || cpu_arch_full == "arm-neon" ||
-      cpu_arch_full == "arm-neon-cpu-detect") {
-    source_set("libaom_intrinsics_neon") {
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      if (current_cpu == "arm") {
-        configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
-        cflags = [ "-mfpu=neon" ]
-      }
-      configs += [ ":libaom_config" ]
-      sources = aom_av1_common_intrin_neon
-      sources += aom_dsp_common_intrin_neon
-    }
-  }
-
-  static_library("libaom") {
-    if (!is_debug && is_win) {
-      configs -= [ "//build/config/compiler:default_optimization" ]
-      configs += [ "//build/config/compiler:optimize_max" ]
-    }
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [ "//build/config/compiler:no_chromium_code" ]
-    configs += [ ":libaom_config" ]
-    sources = aom_av1_common_sources
-    sources += aom_av1_decoder_sources
-    sources += aom_dsp_common_sources
-    sources += aom_dsp_decoder_sources
-    sources += aom_mem_sources
-    sources += aom_rtcd_sources
-    sources += aom_scale_sources
-    sources += aom_sources
-    sources += aom_util_sources
-    deps = []
-    if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
-      deps += [
-        ":libaom_intrinsics_avx",
-        ":libaom_intrinsics_avx2",
-        ":libaom_intrinsics_sse2",
-        ":libaom_intrinsics_sse4_1",
-        ":libaom_intrinsics_sse4_2",
-        ":libaom_intrinsics_ssse3",
-        ":libaom_yasm",
-      ]
-    }
-    if (current_cpu == "arm64" || cpu_arch_full == "arm-neon" ||
-        cpu_arch_full == "arm-neon-cpu-detect") {
-      deps += [ ":libaom_intrinsics_neon" ]
-    }
-    if (is_android) {
-      deps += [ "//third_party/android_tools:cpu_features" ]
-    }
-    public_configs = [ ":libaom_external_config" ]
-  }
-}
diff --git a/third_party/libaom/DEPS b/third_party/libaom/DEPS
index 67017011..2bb2531 100644
--- a/third_party/libaom/DEPS
+++ b/third_party/libaom/DEPS
@@ -3,4 +3,5 @@
   '+aom',
   '+aom_dsp',
   '+aom_ports',
+  '+config',
 ]
diff --git a/third_party/libaom/README.chromium b/third_party/libaom/README.chromium
index 12dcf82..e98bf36 100644
--- a/third_party/libaom/README.chromium
+++ b/third_party/libaom/README.chromium
@@ -2,9 +2,9 @@
 Short Name: libaom
 URL: https://aomedia.googlesource.com/aom/
 Version: 0
-Date: Saturday December 23 2017
-Branch: test-20170915
-Commit: cc92258a08d98f469dff1be288acbc322632377b
+Date: Thursday June 14 2018
+Branch: master
+Commit: c5a56b99df86cd39706af252a13ed263eebc6412
 License: BSD
 License File: source/libaom/LICENSE
 Security Critical: yes
@@ -26,7 +26,7 @@
    Use the generated commit message for the roll.
 
 2. Generate the config files:
-    ./generate_gni.sh
+    ./cmake_update.sh
 
   This will also update this file with the new revision.
 
diff --git a/third_party/libaom/cmake_update.sh b/third_party/libaom/cmake_update.sh
index 6396c74..fb23f80 100755
--- a/third_party/libaom/cmake_update.sh
+++ b/third_party/libaom/cmake_update.sh
@@ -155,16 +155,15 @@
 #all_platforms+=" -DENABLE_AVX2=0"
 toolchain="-DCMAKE_TOOLCHAIN_FILE=${SRC}/build/cmake/toolchains"
 
-reset_dirs linux/ia32
-gen_config_files linux/ia32 "${toolchain}/x86-linux.cmake ${all_platforms}"
+reset_dirs linux/generic
+gen_config_files linux/generic "-DAOM_TARGET_CPU=generic ${all_platforms}"
 # libaom_srcs.gni and aom_version.h are shared.
 cp libaom_srcs.gni "${BASE}"
-if [ ! -f "${CFG}/config/aom_version.h" ]; then
-  # These steps can be removed after the first run.
-  rm -f "${CFG}/aom_version.h"
-  mkdir -p "${CFG}/config/"
-fi
 cp config/aom_version.h "${CFG}/config/"
+gen_rtcd_header linux/generic generic
+
+reset_dirs linux/ia32
+gen_config_files linux/ia32 "${toolchain}/x86-linux.cmake ${all_platforms}"
 gen_rtcd_header linux/ia32 x86 #--disable-avx2
 
 reset_dirs linux/x64
@@ -174,6 +173,19 @@
 # Windows looks like linux but with some minor tweaks. Cmake doesn't generate VS
 # project files on linux otherwise we would not resort to these hacks.
 
+reset_dirs win/ia32
+cp "${CFG}/linux/ia32/config"/* "${CFG}/win/ia32/config/"
+sed -i.bak \
+  -e 's/\(#define[[:space:]]INLINE[[:space:]]*\)inline/#define INLINE __inline/' \
+  -e 's/\(#define[[:space:]]HAVE_PTHREAD_H[[:space:]]*\)1/#define HAVE_PTHREAD_H 0/' \
+  -e 's/\(#define[[:space:]]HAVE_UNISTD_H[[:space:]]*\)1/#define HAVE_UNISTD_H 0/' \
+  -e 's/\(#define[[:space:]]CONFIG_GCC[[:space:]]*\)1/#define CONFIG_GCC 0/' \
+  -e 's/\(#define[[:space:]]CONFIG_MSVS[[:space:]]*\)0/#define CONFIG_MSVS 1/' \
+  "${CFG}/win/ia32/config/aom_config.h"
+rm "${CFG}/win/ia32/config/aom_config.h.bak"
+egrep "#define [A-Z0-9_]+ [01]" "${CFG}/win/ia32/config/aom_config.h" \
+  | awk '{print "%define " $2 " " $3}' > "${CFG}/win/ia32/config/aom_config.asm"
+
 reset_dirs win/x64
 cp "${CFG}/linux/x64/config"/* "${CFG}/win/x64/config/"
 sed -i.bak \
@@ -205,4 +217,7 @@
 gen_config_files linux/arm64 "${toolchain}/arm64-linux-gcc.cmake ${all_platforms}"
 gen_rtcd_header linux/arm64 arm64
 
+cd "${SRC}"
+update_readme
+
 clean
diff --git a/third_party/libaom/generate_gni.sh b/third_party/libaom/generate_gni.sh
deleted file mode 100755
index 40d9be9e..0000000
--- a/third_party/libaom/generate_gni.sh
+++ /dev/null
@@ -1,461 +0,0 @@
-#!/bin/bash -e
-#
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This script is used to generate .gni files and files in the
-# config/platform directories needed to build libaom. It is derived from the
-# script used to update libvpx.
-# Every time the upstream source code is updated just run this script.
-#
-# Usage:
-# $ ./generate_gni.sh [--only-configs]
-#
-# The following optional flags are supported:
-# --only-configs : Excludes generation of GN files (i.e. only
-#                  configuration headers are generated).
-
-export LC_ALL=C
-BASE_DIR=$(pwd)
-LIBAOM_SRC_DIR="source/libaom"
-LIBAOM_CONFIG_DIR="source/config"
-
-for i in "$@"
-do
-case $i in
-  --only-configs)
-  ONLY_CONFIGS=true
-  shift
-  ;;
-  *)
-  echo "Unknown option: $i"
-  exit 1
-  ;;
-esac
-done
-
-# Print license header.
-# $1 - Output base name
-function write_license {
-  echo "# This file is generated. Do not edit." >> $1
-  echo "# Copyright (c) 2014 The Chromium Authors. All rights reserved." >> $1
-  echo "# Use of this source code is governed by a BSD-style license that can be" >> $1
-  echo "# found in the LICENSE file." >> $1
-  echo "" >> $1
-}
-
-# Search for source files with the same basename. The build can support such
-# files but only when they are built into disparate modules. Now that gyp has
-# been removed such cleanup can be considered.
-function find_duplicates {
-  local readonly duplicate_file_names=$(find \
-    $BASE_DIR/$LIBAOM_SRC_DIR/aom \
-    $BASE_DIR/$LIBAOM_SRC_DIR/aom_dsp \
-    -type f -name \*.c  | xargs -I {} basename {} | sort | uniq -d \
-  )
-
-  if [ -n "${duplicate_file_names}" ]; then
-    echo "WARNING: DUPLICATE FILES FOUND"
-    for file in  ${duplicate_file_names}; do
-      find \
-        $BASE_DIR/$LIBAOM_SRC_DIR/aom \
-        $BASE_DIR/$LIBAOM_SRC_DIR/aom_dsp \
-        -name $file
-    done
-    exit 1
-  fi
-}
-
-# Generate a gni with a list of source files.
-# $1 - Array name for file list. This is processed with 'declare' below to
-#      regenerate the array locally.
-# $2 - GN variable name.
-# $3 - Output file.
-function write_gni {
-  # Convert the first argument back in to an array.
-  declare -a file_list=("${!1}")
-
-  echo "$2 = [" >> "$3"
-  for f in $file_list
-  do
-    echo "  \"//third_party/libaom/source/libaom/$f\"," >> "$3"
-  done
-  echo "]" >> "$3"
-}
-
-# Convert a list of source files into gni files.
-# $1 - Input file.
-function convert_srcs_to_project_files {
-  # Do the following here:
-  # 1. Filter .c, .h, .s, .S and .asm files.
-  # 2. Move certain files to a separate lists to allow applying different
-  #    compiler options.
-  # 3. Replace .asm.s to .asm because gn will do the conversion.
-
-  local source_list=$(grep -E '(\.c|\.h|\.S|\.s|\.asm)$' $1)
-
-  # Not sure why aom_config.c is not included.
-  source_list=$(echo "$source_list" | grep -v 'aom_config\.c')
-
-  # Ignore include files.
-  source_list=$(echo "$source_list" | grep -v 'x86_abi_support\.asm')
-
-  # The actual ARM files end in .asm. We have rules to translate them to .S
-  source_list=$(echo "$source_list" | sed s/\.asm\.s$/.asm/)
-
-  # Select all x86 files ending with .c
-  local intrinsic_list=$(echo "$source_list" | \
-    egrep '(mmx|sse2|sse3|ssse3|sse4|avx|avx2).c$')
-
-  # Select all neon files ending in C but only when building in RTCD mode
-  if [ "libaom_srcs_arm_neon_cpu_detect" == "$2" ]; then
-    # Select all arm neon files ending in _neon.c and all asm files.
-    # The asm files need to be included in the intrinsics target because
-    # they need the -mfpu=neon flag.
-    # the pattern may need to be updated if aom_scale gets intrinsics
-    local intrinsic_list=$(echo "$source_list" | \
-      egrep 'neon.*(\.c|\.asm)$')
-  fi
-
-  # Remove these files from the main list.
-  source_list=$(comm -23 <(echo "$source_list") <(echo "$intrinsic_list"))
-
-  local x86_list=$(echo "$source_list" | egrep '/x86/')
-
-  # Write a single .gni file that includes all source files for all archs.
-  if [ 0 -ne ${#x86_list} ]; then
-    local c_sources=$(echo "$source_list" | egrep '.(c|h)$')
-    local assembly_sources=$(echo "$source_list" | egrep '.asm$')
-    local mmx_sources=$(echo "$intrinsic_list" | grep '_mmx\.c$')
-    local sse2_sources=$(echo "$intrinsic_list" | grep '_sse2\.c$')
-    local sse3_sources=$(echo "$intrinsic_list" | grep '_sse3\.c$')
-    local ssse3_sources=$(echo "$intrinsic_list" | grep '_ssse3\.c$')
-    local sse4_1_sources=$(echo "$intrinsic_list" | grep '_sse4\.c$')
-    local avx_sources=$(echo "$intrinsic_list" | grep '_avx\.c$')
-    local avx2_sources=$(echo "$intrinsic_list" | grep '_avx2\.c$')
-
-    write_gni c_sources $2 "$BASE_DIR/libaom_srcs.gni"
-    write_gni assembly_sources $2_assembly "$BASE_DIR/libaom_srcs.gni"
-    write_gni mmx_sources $2_mmx "$BASE_DIR/libaom_srcs.gni"
-    write_gni sse2_sources $2_sse2 "$BASE_DIR/libaom_srcs.gni"
-    write_gni sse3_sources $2_sse3 "$BASE_DIR/libaom_srcs.gni"
-    write_gni ssse3_sources $2_ssse3 "$BASE_DIR/libaom_srcs.gni"
-    write_gni sse4_1_sources $2_sse4_1 "$BASE_DIR/libaom_srcs.gni"
-    if [ -z "$DISABLE_AVX" ]; then
-      write_gni avx_sources $2_avx "$BASE_DIR/libaom_srcs.gni"
-      write_gni avx2_sources $2_avx2 "$BASE_DIR/libaom_srcs.gni"
-    fi
-  else
-    local c_sources=$(echo "$source_list" | egrep '.(c|h)$')
-    local assembly_sources=$(echo -e "$source_list\n$intrinsic_list" | \
-      egrep '.asm$')
-    local neon_sources=$(echo "$intrinsic_list" | grep '_neon\.c$')
-    write_gni c_sources $2 "$BASE_DIR/libaom_srcs.gni"
-    write_gni assembly_sources $2_assembly "$BASE_DIR/libaom_srcs.gni"
-    if [ 0 -ne ${#neon_sources} ]; then
-      write_gni neon_sources $2_neon "$BASE_DIR/libaom_srcs.gni"
-    fi
-  fi
-}
-
-# Clean files from previous make.
-function make_clean {
-  make clean > /dev/null
-  rm -f libaom_srcs.txt
-}
-
-# Lint a pair of aom_config.h and aom_config.asm to make sure they match.
-# $1 - Header file directory.
-function lint_config {
-  # mips and native client do not contain any assembly so the headers do not
-  # need to be compared to the asm.
-  if [[ "$1" != *mipsel && "$1" != *mips64el && "$1" != nacl ]]; then
-    $BASE_DIR/lint_config.sh \
-      -h $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_config.h \
-      -a $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_config.asm
-  fi
-}
-
-# Print the configuration.
-# $1 - Header file directory.
-function print_config {
-  $BASE_DIR/lint_config.sh -p \
-    -h $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_config.h \
-    -a $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_config.asm
-}
-
-# Print the configuration from Header file.
-# This function is an abridged version of print_config which does not use
-# lint_config and it does not require existence of aom_config.asm.
-# $1 - Header file directory.
-function print_config_basic {
-  combined_config="$(cat $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_config.h \
-                   | grep -E ' +[01] *$')"
-  combined_config="$(echo "$combined_config" | grep -v DO1STROUNDING)"
-  combined_config="$(echo "$combined_config" | sed 's/[ \t]//g')"
-  combined_config="$(echo "$combined_config" | sed 's/.*define//')"
-  combined_config="$(echo "$combined_config" | sed 's/0$/=no/')"
-  combined_config="$(echo "$combined_config" | sed 's/1$/=yes/')"
-  echo "$combined_config" | sort | uniq
-}
-
-# Generate *_rtcd.h files.
-# $1 - Header file directory.
-# $2 - Architecture.
-# $3 - Optional - any additional arguments to pass through.
-function gen_rtcd_header {
-  echo "Generate $LIBAOM_CONFIG_DIR/$1/*_rtcd.h files."
-
-  rm -rf $BASE_DIR/$TEMP_DIR/libaom.config
-  if [[ "$2" == "mipsel" || "$2" == "mips64el" || "$2" == nacl ]]; then
-    print_config_basic $1 > $BASE_DIR/$TEMP_DIR/libaom.config
-  else
-    $BASE_DIR/lint_config.sh -p \
-      -h $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_config.h \
-      -a $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_config.asm \
-      -o $BASE_DIR/$TEMP_DIR/libaom.config
-  fi
-
-  $BASE_DIR/$LIBAOM_SRC_DIR/build/make/rtcd.pl \
-    --arch=$2 \
-    --sym=av1_rtcd $3 \
-    --config=$BASE_DIR/$TEMP_DIR/libaom.config \
-    $BASE_DIR/$LIBAOM_SRC_DIR/av1/common/av1_rtcd_defs.pl \
-    > $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/av1_rtcd.h
-
-  clang-format -i $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/av1_rtcd.h
-
-  $BASE_DIR/$LIBAOM_SRC_DIR/build/make/rtcd.pl \
-    --arch=$2 \
-    --sym=aom_scale_rtcd $3 \
-    --config=$BASE_DIR/$TEMP_DIR/libaom.config \
-    $BASE_DIR/$LIBAOM_SRC_DIR/aom_scale/aom_scale_rtcd.pl \
-    > $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_scale_rtcd.h
-
-  clang-format -i $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_scale_rtcd.h
-
-  $BASE_DIR/$LIBAOM_SRC_DIR/build/make/rtcd.pl \
-    --arch=$2 \
-    --sym=aom_dsp_rtcd $3 \
-    --config=$BASE_DIR/$TEMP_DIR/libaom.config \
-    $BASE_DIR/$LIBAOM_SRC_DIR/aom_dsp/aom_dsp_rtcd_defs.pl \
-    > $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_dsp_rtcd.h
-
-  clang-format -i $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/aom_dsp_rtcd.h
-
-  rm -rf $BASE_DIR/$TEMP_DIR/libaom.config
-}
-
-# Generate Config files. "--enable-external-build" must be set to skip
-# detection of capabilities on specific targets.
-# $1 - Header file directory.
-# $2 - Config command line.
-function gen_config_files {
-  ./configure $2 > /dev/null
-
-  # Disable HAVE_UNISTD_H as it causes vp8 to try to detect how many cpus
-  # available, which doesn't work from inside a sandbox on linux.
-  # TODO(johannkoenig) probably not required for av1
-  #sed -i.bak -e 's/\(HAVE_UNISTD_H[[:space:]]*\)1/\10/' vpx_config.h
-  #rm vpx_config.h.bak
-
-  # Use the correct ads2gas script.
-  if [[ "$1" == linux* ]]; then
-    local ASM_CONV=ads2gas.pl
-  else
-    local ASM_CONV=ads2gas_apple.pl
-  fi
-
-  # Generate aom_config.asm. Do not create one for mips or native client.
-  if [[ "$1" != *mipsel && "$1" != *mips64el && "$1" != nacl ]]; then
-    if [[ "$1" == *x64* ]] || [[ "$1" == *ia32* ]]; then
-      egrep "#define [A-Z0-9_]+ [01]" aom_config.h | awk '{print "%define " $2 " " $3}' > aom_config.asm
-    else
-      egrep "#define [A-Z0-9_]+ [01]" aom_config.h | awk '{print $2 " EQU " $3}' | perl $BASE_DIR/$LIBAOM_SRC_DIR/build/make/$ASM_CONV > aom_config.asm
-    fi
-  fi
-
-  cp aom_config.* $BASE_DIR/$LIBAOM_CONFIG_DIR/$1
-  make_clean
-  rm -rf aom_config.*
-}
-
-function update_readme {
-  local IFS=$'\n'
-  # Split git log output '<date>\n<commit hash>' on the newline to produce 2
-  # array entries.
-  local vals=($(git --no-pager log -1 --format="%cd%n%H" \
-    --date=format:"%A %B %d %Y"))
-  sed -E -i.bak \
-    -e "s/^(Date:)[[:space:]]+.*$/\1 ${vals[0]}/" \
-    -e "s/^(Commit:)[[:space:]]+[a-f0-9]{40}/\1 ${vals[1]}/" \
-    ${BASE_DIR}/README.chromium
-  rm ${BASE_DIR}/README.chromium.bak
-  cat <<EOF
-
-README.chromium updated with:
-Date: ${vals[0]}
-Commit: ${vals[1]}
-EOF
-}
-
-find_duplicates
-
-echo "Create temporary directory."
-TEMP_DIR="$LIBAOM_SRC_DIR.temp"
-rm -rf $TEMP_DIR
-cp -R $LIBAOM_SRC_DIR $TEMP_DIR
-cd $TEMP_DIR
-
-echo "Generate config files."
-all_platforms="--enable-external-build --enable-postproc --disable-av1-encoder"
-all_platforms="${all_platforms} --size-limit=16384x16384"
-all_platforms="${all_platforms} --enable-realtime-only --disable-install-docs"
-# TODO(tomfinegan): This is a workaround for
-# https://bugs.chromium.org/p/aomedia/issues/detail?id=1173. It should be
-# removed once the quality issue is sorted out.
-all_platforms="${all_platforms} --disable-highbitdepth"
-x86_platforms="--enable-pic --as=yasm"
-gen_config_files linux/ia32 "--target=x86-linux-gcc ${all_platforms} ${x86_platforms}"
-gen_config_files linux/x64 "--target=x86_64-linux-gcc ${all_platforms} ${x86_platforms}"
-#gen_config_files linux/arm "--target=armv7-linux-gcc --disable-neon ${all_platforms}"
-#gen_config_files linux/arm-neon "--target=armv7-linux-gcc ${all_platforms}"
-#gen_config_files linux/arm-neon-cpu-detect "--target=armv7-linux-gcc --enable-runtime-cpu-detect ${all_platforms}"
-#gen_config_files linux/arm64 "--target=armv8-linux-gcc ${all_platforms}"
-#gen_config_files linux/mipsel "--target=mips32-linux-gcc ${all_platforms}"
-#gen_config_files linux/mips64el "--target=mips64-linux-gcc ${all_platforms}"
-gen_config_files linux/generic "--target=generic-gnu $HIGHBD ${all_platforms}"
-gen_config_files win/ia32 "--target=x86-win32-vs12 ${all_platforms} ${x86_platforms}"
-gen_config_files win/x64 "--target=x86_64-win64-vs12 ${all_platforms} ${x86_platforms}"
-#gen_config_files mac/ia32 "--target=x86-darwin9-gcc ${all_platforms} ${x86_platforms}"
-#gen_config_files mac/x64 "--target=x86_64-darwin9-gcc ${all_platforms} ${x86_platforms}"
-#gen_config_files ios/arm-neon "--target=armv7-linux-gcc ${all_platforms}"
-#gen_config_files ios/arm64 "--target=armv8-linux-gcc ${all_platforms}"
-#gen_config_files nacl "--target=generic-gnu $HIGHBD ${all_platforms}"
-
-echo "Remove temporary directory."
-cd $BASE_DIR
-rm -rf $TEMP_DIR
-
-echo "Lint libaom configuration."
-lint_config linux/ia32
-lint_config linux/x64
-#lint_config linux/arm
-#lint_config linux/arm-neon
-#lint_config linux/arm-neon-cpu-detect
-#lint_config linux/arm64
-#lint_config linux/mipsel
-#lint_config linux/mips64el
-lint_config linux/generic
-lint_config win/ia32
-lint_config win/x64
-#lint_config mac/ia32
-#lint_config mac/x64
-#lint_config ios/arm-neon
-#lint_config ios/arm64
-#lint_config nacl
-
-echo "Create temporary directory."
-TEMP_DIR="$LIBAOM_SRC_DIR.temp"
-rm -rf $TEMP_DIR
-cp -R $LIBAOM_SRC_DIR $TEMP_DIR
-cd $TEMP_DIR
-
-gen_rtcd_header linux/ia32 x86
-gen_rtcd_header linux/x64 x86_64
-#gen_rtcd_header linux/arm armv7 "--disable-neon --disable-neon_asm"
-#gen_rtcd_header linux/arm-neon armv7
-#gen_rtcd_header linux/arm-neon-cpu-detect armv7
-#gen_rtcd_header linux/arm64 armv8
-#gen_rtcd_header linux/mipsel mipsel
-#gen_rtcd_header linux/mips64el mips64el
-gen_rtcd_header linux/generic generic
-gen_rtcd_header win/ia32 x86
-gen_rtcd_header win/x64 x86_64
-#gen_rtcd_header mac/ia32 x86
-#gen_rtcd_header mac/x64 x86_64
-#gen_rtcd_header ios/arm-neon armv7
-#gen_rtcd_header ios/arm64 armv8
-#gen_rtcd_header nacl nacl
-
-echo "Prepare Makefile."
-./configure --target=generic-gnu > /dev/null
-make_clean
-
-if [ -z $ONLY_CONFIGS ]; then
-  # Remove existing .gni file.
-  rm -rf $BASE_DIR/libaom_srcs.gni
-  write_license $BASE_DIR/libaom_srcs.gni
-
-  echo "Generate X86 source list."
-  config=$(print_config linux/ia32)
-  make_clean
-  make libaom_srcs.txt target=libs $config > /dev/null
-  convert_srcs_to_project_files libaom_srcs.txt libaom_srcs_x86
-
-  # Copy aom_version.h. The file should be the same for all platforms.
-  cp aom_version.h $BASE_DIR/$LIBAOM_CONFIG_DIR
-
-  echo "Generate X86_64 source list."
-  config=$(print_config linux/x64)
-  make_clean
-  make libaom_srcs.txt target=libs $config > /dev/null
-  convert_srcs_to_project_files libaom_srcs.txt libaom_srcs_x86_64
-
-#  echo "Generate ARM source list."
-#  config=$(print_config linux/arm)
-#  make_clean
-#  make libaom_srcs.txt target=libs $config > /dev/null
-#  convert_srcs_to_project_files libaom_srcs.txt libaom_srcs_arm
-#
-#  echo "Generate ARM NEON source list."
-#  config=$(print_config linux/arm-neon)
-#  make_clean
-#  make libaom_srcs.txt target=libs $config > /dev/null
-#  convert_srcs_to_project_files libaom_srcs.txt libaom_srcs_arm_neon
-#
-#  echo "Generate ARM NEON CPU DETECT source list."
-#  config=$(print_config linux/arm-neon-cpu-detect)
-#  make_clean
-#  make libaom_srcs.txt target=libs $config > /dev/null
-#  convert_srcs_to_project_files libaom_srcs.txt libaom_srcs_arm_neon_cpu_detect
-#
-#  echo "Generate ARM64 source list."
-#  config=$(print_config linux/arm64)
-#  make_clean
-#  make libaom_srcs.txt target=libs $config > /dev/null
-#  convert_srcs_to_project_files libaom_srcs.txt libaom_srcs_arm64
-#
-#  echo "Generate MIPS source list."
-#  config=$(print_config_basic linux/mipsel)
-#  make_clean
-#  make libaom_srcs.txt target=libs $config > /dev/null
-#  convert_srcs_to_project_files libaom_srcs.txt libaom_srcs_mips
-#
-#  echo "MIPS64 source list is identical to MIPS source list. No need to generate it."
-#
-#  echo "Generate NaCl source list."
-#  config=$(print_config_basic nacl)
-#  make_clean
-#  make libaom_srcs.txt target=libs $config > /dev/null
-#  convert_srcs_to_project_files libaom_srcs.txt libaom_srcs_nacl
-
-  echo "Generate GENERIC source list."
-  config=$(print_config_basic linux/generic)
-  make_clean
-  make libaom_srcs.txt target=libs $config > /dev/null
-  convert_srcs_to_project_files libaom_srcs.txt libaom_srcs_generic
-fi
-
-echo "Remove temporary directory."
-cd $BASE_DIR
-rm -rf $TEMP_DIR
-
-gn format --in-place $BASE_DIR/BUILD.gn
-gn format --in-place $BASE_DIR/libaom_srcs.gni
-
-cd $BASE_DIR/$LIBAOM_SRC_DIR
-update_readme
-
-cd $BASE_DIR
diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs.gni
index e8b8f41f..95cf913 100644
--- a/third_party/libaom/libaom_srcs.gni
+++ b/third_party/libaom/libaom_srcs.gni
@@ -1,111 +1,88 @@
-# This file is generated. Do not edit.
-# Copyright (c) 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
+# This file is generated. DO NOT EDIT.
 
-libaom_srcs_x86 = [
-  "//third_party/libaom/source/libaom/aom/aom.h",
-  "//third_party/libaom/source/libaom/aom/aom_codec.h",
-  "//third_party/libaom/source/libaom/aom/aom_decoder.h",
-  "//third_party/libaom/source/libaom/aom/aom_encoder.h",
-  "//third_party/libaom/source/libaom/aom/aom_frame_buffer.h",
-  "//third_party/libaom/source/libaom/aom/aom_image.h",
-  "//third_party/libaom/source/libaom/aom/aom_integer.h",
-  "//third_party/libaom/source/libaom/aom/aomdx.h",
-  "//third_party/libaom/source/libaom/aom/internal/aom_codec_internal.h",
-  "//third_party/libaom/source/libaom/aom/src/aom_codec.c",
-  "//third_party/libaom/source/libaom/aom/src/aom_decoder.c",
-  "//third_party/libaom/source/libaom/aom/src/aom_encoder.c",
-  "//third_party/libaom/source/libaom/aom/src/aom_image.c",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_convolve.c",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_convolve.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_dsp_common.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_dsp_rtcd.c",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_filter.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_simd.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_simd_inline.h",
-  "//third_party/libaom/source/libaom/aom_dsp/binary_codes_reader.c",
-  "//third_party/libaom/source/libaom/aom_dsp/binary_codes_reader.h",
-  "//third_party/libaom/source/libaom/aom_dsp/bitreader.h",
-  "//third_party/libaom/source/libaom/aom_dsp/bitreader_buffer.c",
-  "//third_party/libaom/source/libaom/aom_dsp/bitreader_buffer.h",
-  "//third_party/libaom/source/libaom/aom_dsp/blend.h",
-  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_hmask.c",
-  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_mask.c",
-  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_vmask.c",
-  "//third_party/libaom/source/libaom/aom_dsp/daalaboolreader.c",
-  "//third_party/libaom/source/libaom/aom_dsp/daalaboolreader.h",
-  "//third_party/libaom/source/libaom/aom_dsp/entcode.c",
-  "//third_party/libaom/source/libaom/aom_dsp/entcode.h",
-  "//third_party/libaom/source/libaom/aom_dsp/entdec.c",
-  "//third_party/libaom/source/libaom/aom_dsp/entdec.h",
-  "//third_party/libaom/source/libaom/aom_dsp/intrapred.c",
-  "//third_party/libaom/source/libaom/aom_dsp/inv_txfm.c",
-  "//third_party/libaom/source/libaom/aom_dsp/inv_txfm.h",
-  "//third_party/libaom/source/libaom/aom_dsp/loopfilter.c",
-  "//third_party/libaom/source/libaom/aom_dsp/prob.c",
-  "//third_party/libaom/source/libaom/aom_dsp/prob.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics_c.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics_x86.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics_c.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics_v128.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics_x86.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics_c.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics_x86.h",
-  "//third_party/libaom/source/libaom/aom_dsp/txfm_common.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_asm_stubs.c",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/blend_sse4.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/common_avx2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/convolve.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_common_avx2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_sse2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/lpf_common_sse2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/obmc_intrinsic_ssse3.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/synonyms.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/txfm_common_avx2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/txfm_common_intrin.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/txfm_common_sse2.h",
-  "//third_party/libaom/source/libaom/aom_mem/aom_mem.c",
-  "//third_party/libaom/source/libaom/aom_mem/aom_mem.h",
-  "//third_party/libaom/source/libaom/aom_mem/include/aom_mem_intrnl.h",
-  "//third_party/libaom/source/libaom/aom_ports/aom_once.h",
-  "//third_party/libaom/source/libaom/aom_ports/aom_timer.h",
-  "//third_party/libaom/source/libaom/aom_ports/bitops.h",
-  "//third_party/libaom/source/libaom/aom_ports/emmintrin_compat.h",
-  "//third_party/libaom/source/libaom/aom_ports/mem.h",
-  "//third_party/libaom/source/libaom/aom_ports/mem_ops.h",
-  "//third_party/libaom/source/libaom/aom_ports/mem_ops_aligned.h",
-  "//third_party/libaom/source/libaom/aom_ports/msvc.h",
-  "//third_party/libaom/source/libaom/aom_ports/system_state.h",
-  "//third_party/libaom/source/libaom/aom_ports/x86.h",
-  "//third_party/libaom/source/libaom/aom_scale/aom_scale.h",
-  "//third_party/libaom/source/libaom/aom_scale/aom_scale_rtcd.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/aom_scale.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/gen_scalers.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/yv12config.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/yv12extend.c",
-  "//third_party/libaom/source/libaom/aom_scale/yv12config.h",
-  "//third_party/libaom/source/libaom/aom_util/aom_thread.c",
-  "//third_party/libaom/source/libaom/aom_util/aom_thread.h",
-  "//third_party/libaom/source/libaom/aom_util/endian_inl.h",
-  "//third_party/libaom/source/libaom/av1/av1_dx_iface.c",
+aom_av1_common_intrin_avx2 = [
+  "//third_party/libaom/source/libaom/av1/common/cdef_block_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_inv_txfm_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_inv_txfm_avx2.h",
+  "//third_party/libaom/source/libaom/av1/common/x86/cfl_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/convolve_2d_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/convolve_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_convolve_2d_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_inv_txfm_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_jnt_convolve_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_wiener_convolve_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/jnt_convolve_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/reconinter_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/selfguided_avx2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/wiener_convolve_avx2.c",
+]
+
+aom_av1_common_intrin_neon = [
+  "//third_party/libaom/source/libaom/av1/common/arm/av1_txfm_neon.c",
+  "//third_party/libaom/source/libaom/av1/common/arm/cfl_neon.c",
+  "//third_party/libaom/source/libaom/av1/common/arm/convolve_neon.c",
+  "//third_party/libaom/source/libaom/av1/common/arm/convolve_neon.h",
+  "//third_party/libaom/source/libaom/av1/common/arm/jnt_convolve_neon.c",
+  "//third_party/libaom/source/libaom/av1/common/arm/mem_neon.h",
+  "//third_party/libaom/source/libaom/av1/common/arm/transpose_neon.h",
+  "//third_party/libaom/source/libaom/av1/common/arm/wiener_convolve_neon.c",
+  "//third_party/libaom/source/libaom/av1/common/cdef_block_neon.c",
+]
+
+aom_av1_common_intrin_sse2 = [
+  "//third_party/libaom/source/libaom/av1/common/cdef_block_sse2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/cfl_sse2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/convolve_2d_sse2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/convolve_sse2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_convolve_2d_sse2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/jnt_convolve_sse2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/wiener_convolve_sse2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_txfm_sse2.h",
+]
+
+aom_av1_common_intrin_sse4_1 = [
+  "//third_party/libaom/source/libaom/av1/common/cdef_block_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_convolve_horiz_rs_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_convolve_scale_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_highbd_convolve_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_txfm_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_txfm_sse4.h",
+  "//third_party/libaom/source/libaom/av1/common/x86/filterintra_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_convolve_2d_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_inv_txfm_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_jnt_convolve_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_warp_plane_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/intra_edge_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/reconinter_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/selfguided_sse4.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/warp_plane_sse4.c",
+]
+
+aom_av1_common_intrin_ssse3 = [
+  "//third_party/libaom/source/libaom/av1/common/cdef_block_ssse3.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_inv_txfm_ssse3.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_inv_txfm_ssse3.h",
+  "//third_party/libaom/source/libaom/av1/common/x86/cfl_ssse3.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_convolve_2d_ssse3.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/highbd_wiener_convolve_ssse3.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/jnt_convolve_ssse3.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/reconinter_ssse3.c",
+]
+
+aom_av1_common_intrin_vsx =
+    [ "//third_party/libaom/source/libaom/av1/common/ppc/cfl_ppc.c" ]
+
+aom_av1_common_sources = [
   "//third_party/libaom/source/libaom/av1/av1_iface_common.h",
   "//third_party/libaom/source/libaom/av1/common/alloccommon.c",
   "//third_party/libaom/source/libaom/av1/common/alloccommon.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm1d.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm1d.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm1d_cfg.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm2d.c",
   "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm1d.c",
   "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm1d.h",
   "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm1d_cfg.h",
   "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm2d.c",
   "//third_party/libaom/source/libaom/av1/common/av1_loopfilter.c",
   "//third_party/libaom/source/libaom/av1/common/av1_loopfilter.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_rtcd.c",
+  "//third_party/libaom/source/libaom/av1/common/av1_txfm.c",
   "//third_party/libaom/source/libaom/av1/common/av1_txfm.h",
   "//third_party/libaom/source/libaom/av1/common/blockd.c",
   "//third_party/libaom/source/libaom/av1/common/blockd.h",
@@ -113,15 +90,12 @@
   "//third_party/libaom/source/libaom/av1/common/cdef.h",
   "//third_party/libaom/source/libaom/av1/common/cdef_block.c",
   "//third_party/libaom/source/libaom/av1/common/cdef_block.h",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_simd.h",
-  "//third_party/libaom/source/libaom/av1/common/clpf.c",
-  "//third_party/libaom/source/libaom/av1/common/clpf_simd.h",
+  "//third_party/libaom/source/libaom/av1/common/cfl.c",
+  "//third_party/libaom/source/libaom/av1/common/cfl.h",
   "//third_party/libaom/source/libaom/av1/common/common.h",
   "//third_party/libaom/source/libaom/av1/common/common_data.h",
   "//third_party/libaom/source/libaom/av1/common/convolve.c",
   "//third_party/libaom/source/libaom/av1/common/convolve.h",
-  "//third_party/libaom/source/libaom/av1/common/daala_tx.c",
-  "//third_party/libaom/source/libaom/av1/common/daala_tx.h",
   "//third_party/libaom/source/libaom/av1/common/debugmodes.c",
   "//third_party/libaom/source/libaom/av1/common/entropy.c",
   "//third_party/libaom/source/libaom/av1/common/entropy.h",
@@ -139,7 +113,6 @@
   "//third_party/libaom/source/libaom/av1/common/mv.h",
   "//third_party/libaom/source/libaom/av1/common/mvref_common.c",
   "//third_party/libaom/source/libaom/av1/common/mvref_common.h",
-  "//third_party/libaom/source/libaom/av1/common/obmc.h",
   "//third_party/libaom/source/libaom/av1/common/odintrin.c",
   "//third_party/libaom/source/libaom/av1/common/odintrin.h",
   "//third_party/libaom/source/libaom/av1/common/onyxc_int.h",
@@ -153,6 +126,8 @@
   "//third_party/libaom/source/libaom/av1/common/reconintra.h",
   "//third_party/libaom/source/libaom/av1/common/resize.c",
   "//third_party/libaom/source/libaom/av1/common/resize.h",
+  "//third_party/libaom/source/libaom/av1/common/restoration.c",
+  "//third_party/libaom/source/libaom/av1/common/restoration.h",
   "//third_party/libaom/source/libaom/av1/common/scale.c",
   "//third_party/libaom/source/libaom/av1/common/scale.h",
   "//third_party/libaom/source/libaom/av1/common/scan.c",
@@ -163,291 +138,333 @@
   "//third_party/libaom/source/libaom/av1/common/thread_common.h",
   "//third_party/libaom/source/libaom/av1/common/tile_common.c",
   "//third_party/libaom/source/libaom/av1/common/tile_common.h",
+  "//third_party/libaom/source/libaom/av1/common/timing.h",
+  "//third_party/libaom/source/libaom/av1/common/token_cdfs.h",
+  "//third_party/libaom/source/libaom/av1/common/txb_common.c",
+  "//third_party/libaom/source/libaom/av1/common/txb_common.h",
   "//third_party/libaom/source/libaom/av1/common/warped_motion.c",
   "//third_party/libaom/source/libaom/av1/common/warped_motion.h",
-  "//third_party/libaom/source/libaom/av1/common/x86/highbd_txfm_utility_sse4.h",
+]
+
+aom_av1_decoder_sources = [
+  "//third_party/libaom/source/libaom/av1/av1_dx_iface.c",
   "//third_party/libaom/source/libaom/av1/decoder/decodeframe.c",
   "//third_party/libaom/source/libaom/av1/decoder/decodeframe.h",
   "//third_party/libaom/source/libaom/av1/decoder/decodemv.c",
   "//third_party/libaom/source/libaom/av1/decoder/decodemv.h",
   "//third_party/libaom/source/libaom/av1/decoder/decoder.c",
   "//third_party/libaom/source/libaom/av1/decoder/decoder.h",
+  "//third_party/libaom/source/libaom/av1/decoder/decodetxb.c",
+  "//third_party/libaom/source/libaom/av1/decoder/decodetxb.h",
   "//third_party/libaom/source/libaom/av1/decoder/detokenize.c",
   "//third_party/libaom/source/libaom/av1/decoder/detokenize.h",
-  "//third_party/libaom/source/libaom/av1/decoder/dsubexp.c",
-  "//third_party/libaom/source/libaom/av1/decoder/dsubexp.h",
   "//third_party/libaom/source/libaom/av1/decoder/dthread.c",
   "//third_party/libaom/source/libaom/av1/decoder/dthread.h",
+  "//third_party/libaom/source/libaom/av1/decoder/obu.h",
+  "//third_party/libaom/source/libaom/av1/decoder/obu.c",
 ]
-libaom_srcs_x86_assembly = [
+
+aom_av1_encoder_asm_sse2 = [
+  "//third_party/libaom/source/libaom/av1/encoder/x86/dct_sse2.asm",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/error_sse2.asm",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/temporal_filter_apply_sse2.asm",
+]
+
+aom_av1_encoder_asm_ssse3_x86_64 = [ "//third_party/libaom/source/libaom/av1/encoder/x86/av1_quantize_ssse3_x86_64.asm" ]
+
+aom_av1_encoder_intrin_avx2 = [
+  "//third_party/libaom/source/libaom/av1/encoder/x86/av1_quantize_avx2.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/av1_highbd_quantize_avx2.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/error_intrin_avx2.c",
+]
+
+aom_av1_encoder_intrin_msa = [
+  "//third_party/libaom/source/libaom/av1/encoder/mips/msa/error_msa.c",
+  "//third_party/libaom/source/libaom/av1/encoder/mips/msa/fdct4x4_msa.c",
+  "//third_party/libaom/source/libaom/av1/encoder/mips/msa/temporal_filter_msa.c",
+]
+
+aom_av1_encoder_intrin_neon = [
+  "//third_party/libaom/source/libaom/av1/encoder/arm/neon/quantize_neon.c",
+]
+
+aom_av1_encoder_intrin_sse2 = [
+  "//third_party/libaom/source/libaom/av1/encoder/x86/av1_fwd_txfm_sse2.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/av1_fwd_txfm_sse2.h",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/av1_quantize_sse2.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/encodetxb_sse2.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/highbd_block_error_intrin_sse2.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/wedge_utils_sse2.c",
+]
+
+aom_av1_encoder_intrin_sse4_1 = [
+  "//third_party/libaom/source/libaom/av1/encoder/x86/av1_fwd_txfm1d_sse4.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/av1_fwd_txfm2d_sse4.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/av1_highbd_quantize_sse4.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/corner_match_sse4.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/encodetxb_sse4.c",
+  "//third_party/libaom/source/libaom/av1/encoder/x86/highbd_fwd_txfm_sse4.c",
+]
+
+aom_av1_encoder_intrin_sse4_2 =
+    [ "//third_party/libaom/source/libaom/av1/encoder/x86/hash_sse42.c" ]
+
+aom_av1_encoder_sources = [
+  "//third_party/libaom/source/libaom/av1/av1_cx_iface.c",
+  "//third_party/libaom/source/libaom/av1/encoder/aq_complexity.c",
+  "//third_party/libaom/source/libaom/av1/encoder/aq_complexity.h",
+  "//third_party/libaom/source/libaom/av1/encoder/aq_cyclicrefresh.c",
+  "//third_party/libaom/source/libaom/av1/encoder/aq_cyclicrefresh.h",
+  "//third_party/libaom/source/libaom/av1/encoder/aq_variance.c",
+  "//third_party/libaom/source/libaom/av1/encoder/aq_variance.h",
+  "//third_party/libaom/source/libaom/av1/encoder/av1_fwd_txfm1d.c",
+  "//third_party/libaom/source/libaom/av1/encoder/av1_fwd_txfm1d.h",
+  "//third_party/libaom/source/libaom/av1/encoder/av1_fwd_txfm1d_cfg.h",
+  "//third_party/libaom/source/libaom/av1/encoder/av1_fwd_txfm2d.c",
+  "//third_party/libaom/source/libaom/av1/encoder/av1_quantize.c",
+  "//third_party/libaom/source/libaom/av1/encoder/av1_quantize.h",
+  "//third_party/libaom/source/libaom/av1/encoder/bitstream.c",
+  "//third_party/libaom/source/libaom/av1/encoder/bitstream.h",
+  "//third_party/libaom/source/libaom/av1/encoder/block.h",
+  "//third_party/libaom/source/libaom/av1/encoder/context_tree.c",
+  "//third_party/libaom/source/libaom/av1/encoder/context_tree.h",
+  "//third_party/libaom/source/libaom/av1/encoder/corner_detect.c",
+  "//third_party/libaom/source/libaom/av1/encoder/corner_detect.h",
+  "//third_party/libaom/source/libaom/av1/encoder/corner_match.c",
+  "//third_party/libaom/source/libaom/av1/encoder/corner_match.h",
+  "//third_party/libaom/source/libaom/av1/encoder/cost.c",
+  "//third_party/libaom/source/libaom/av1/encoder/cost.h",
+  "//third_party/libaom/source/libaom/av1/encoder/encodeframe.c",
+  "//third_party/libaom/source/libaom/av1/encoder/encodeframe.h",
+  "//third_party/libaom/source/libaom/av1/encoder/encodemb.c",
+  "//third_party/libaom/source/libaom/av1/encoder/encodemb.h",
+  "//third_party/libaom/source/libaom/av1/encoder/encodemv.c",
+  "//third_party/libaom/source/libaom/av1/encoder/encodemv.h",
+  "//third_party/libaom/source/libaom/av1/encoder/encoder.c",
+  "//third_party/libaom/source/libaom/av1/encoder/encoder.h",
+  "//third_party/libaom/source/libaom/av1/encoder/encodetxb.c",
+  "//third_party/libaom/source/libaom/av1/encoder/encodetxb.h",
+  "//third_party/libaom/source/libaom/av1/encoder/ethread.c",
+  "//third_party/libaom/source/libaom/av1/encoder/ethread.h",
+  "//third_party/libaom/source/libaom/av1/encoder/extend.c",
+  "//third_party/libaom/source/libaom/av1/encoder/extend.h",
+  "//third_party/libaom/source/libaom/av1/encoder/firstpass.c",
+  "//third_party/libaom/source/libaom/av1/encoder/firstpass.h",
+  "//third_party/libaom/source/libaom/av1/encoder/global_motion.c",
+  "//third_party/libaom/source/libaom/av1/encoder/global_motion.h",
+  "//third_party/libaom/source/libaom/av1/encoder/grain_test_vectors.h",
+  "//third_party/libaom/source/libaom/av1/encoder/hash.c",
+  "//third_party/libaom/source/libaom/av1/encoder/hash.h",
+  "//third_party/libaom/source/libaom/av1/encoder/hash_motion.c",
+  "//third_party/libaom/source/libaom/av1/encoder/hash_motion.h",
+  "//third_party/libaom/source/libaom/av1/encoder/hybrid_fwd_txfm.c",
+  "//third_party/libaom/source/libaom/av1/encoder/hybrid_fwd_txfm.h",
+  "//third_party/libaom/source/libaom/av1/encoder/lookahead.c",
+  "//third_party/libaom/source/libaom/av1/encoder/lookahead.h",
+  "//third_party/libaom/source/libaom/av1/encoder/mbgraph.c",
+  "//third_party/libaom/source/libaom/av1/encoder/mbgraph.h",
+  "//third_party/libaom/source/libaom/av1/encoder/mcomp.c",
+  "//third_party/libaom/source/libaom/av1/encoder/mcomp.h",
+  "//third_party/libaom/source/libaom/av1/encoder/ml.c",
+  "//third_party/libaom/source/libaom/av1/encoder/ml.h",
+  "//third_party/libaom/source/libaom/av1/encoder/palette.c",
+  "//third_party/libaom/source/libaom/av1/encoder/palette.h",
+  "//third_party/libaom/source/libaom/av1/encoder/pickcdef.c",
+  "//third_party/libaom/source/libaom/av1/encoder/picklpf.c",
+  "//third_party/libaom/source/libaom/av1/encoder/picklpf.h",
+  "//third_party/libaom/source/libaom/av1/encoder/pickrst.c",
+  "//third_party/libaom/source/libaom/av1/encoder/pickrst.h",
+  "//third_party/libaom/source/libaom/av1/encoder/ransac.c",
+  "//third_party/libaom/source/libaom/av1/encoder/ransac.h",
+  "//third_party/libaom/source/libaom/av1/encoder/ratectrl.c",
+  "//third_party/libaom/source/libaom/av1/encoder/ratectrl.h",
+  "//third_party/libaom/source/libaom/av1/encoder/rd.c",
+  "//third_party/libaom/source/libaom/av1/encoder/rd.h",
+  "//third_party/libaom/source/libaom/av1/encoder/rdopt.c",
+  "//third_party/libaom/source/libaom/av1/encoder/rdopt.h",
+  "//third_party/libaom/source/libaom/av1/encoder/segmentation.c",
+  "//third_party/libaom/source/libaom/av1/encoder/segmentation.h",
+  "//third_party/libaom/source/libaom/av1/encoder/speed_features.c",
+  "//third_party/libaom/source/libaom/av1/encoder/speed_features.h",
+  "//third_party/libaom/source/libaom/av1/encoder/temporal_filter.c",
+  "//third_party/libaom/source/libaom/av1/encoder/temporal_filter.h",
+  "//third_party/libaom/source/libaom/av1/encoder/timing.c",
+  "//third_party/libaom/source/libaom/av1/encoder/tokenize.c",
+  "//third_party/libaom/source/libaom/av1/encoder/tokenize.h",
+  "//third_party/libaom/source/libaom/av1/encoder/wedge_utils.c",
+  "//third_party/libaom/source/libaom/third_party/fastfeat/fast.c",
+  "//third_party/libaom/source/libaom/third_party/fastfeat/fast.h",
+  "//third_party/libaom/source/libaom/third_party/fastfeat/fast_9.c",
+  "//third_party/libaom/source/libaom/third_party/fastfeat/nonmax.c",
+  "//third_party/libaom/source/libaom/third_party/vector/vector.c",
+  "//third_party/libaom/source/libaom/third_party/vector/vector.h",
+]
+
+aom_dsp_common_asm_sse2 = [
   "//third_party/libaom/source/libaom/aom_dsp/x86/aom_convolve_copy_sse2.asm",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_high_subpixel_8t_sse2.asm",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_high_subpixel_bilinear_sse2.asm",
   "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_sse2.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_ssse3.asm",
   "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_bilinear_sse2.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_bilinear_ssse3.asm",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/highbd_intrapred_sse2.asm",
   "//third_party/libaom/source/libaom/aom_dsp/x86/intrapred_sse2.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/intrapred_ssse3.asm",
   "//third_party/libaom/source/libaom/aom_dsp/x86/inv_wht_sse2.asm",
-  "//third_party/libaom/source/libaom/aom_ports/emms.asm",
 ]
-libaom_srcs_x86_mmx = []
-libaom_srcs_x86_sse2 = [
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_sse2.c",
+
+aom_dsp_common_asm_ssse3 = [
+  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_ssse3.asm",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_bilinear_ssse3.asm",
+]
+
+aom_dsp_common_intrin_avx2 = [
+  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_intrin_avx2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/common_avx2.h",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/convolve_avx2.h",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/highbd_convolve_avx2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/highbd_loopfilter_avx2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/intrapred_avx2.c",
+]
+
+aom_dsp_common_intrin_dspr2 = [
+  "//third_party/libaom/source/libaom/aom_dsp/mips/common_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/common_dspr2.h",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/convolve2_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/convolve2_horiz_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/convolve2_vert_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/convolve8_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/convolve8_horiz_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/convolve8_vert_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/convolve_common_dspr2.h",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/intrapred16_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/intrapred4_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/intrapred8_dspr2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/inv_txfm_dspr2.h",
+]
+
+aom_dsp_common_intrin_msa = [
+  "//third_party/libaom/source/libaom/aom_dsp/mips/aom_convolve8_horiz_msa.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/aom_convolve8_vert_msa.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/aom_convolve_copy_msa.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/aom_convolve_msa.h",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/intrapred_msa.c",
+  "//third_party/libaom/source/libaom/aom_dsp/mips/macros_msa.h",
+]
+
+aom_dsp_common_intrin_neon = [
+  "//third_party/libaom/source/libaom/aom_dsp/arm/fwd_txfm_neon.c",
+  "//third_party/libaom/source/libaom/aom_dsp/arm/loopfilter_neon.c",
+  "//third_party/libaom/source/libaom/aom_dsp/arm/intrapred_neon.c",
+  "//third_party/libaom/source/libaom/aom_dsp/arm/subtract_neon.c",
+  "//third_party/libaom/source/libaom/aom_dsp/arm/blend_a64_mask_neon.c",
+]
+
+aom_dsp_common_intrin_sse2 = [
+  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_asm_stubs.c",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/convolve.h",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/convolve_sse2.h",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/highbd_intrapred_sse2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/highbd_loopfilter_sse2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/intrapred_sse2.c",
   "//third_party/libaom/source/libaom/aom_dsp/x86/loopfilter_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/clpf_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/convolve_2d_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/idct_intrin_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/warp_plane_sse2.c",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/lpf_common_sse2.h",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/mem_sse2.h",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/transpose_sse2.h",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/txfm_common_sse2.h",
 ]
-libaom_srcs_x86_sse3 = []
-libaom_srcs_x86_ssse3 = [
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_intrin_ssse3.c",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_ssse3.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_ssse3.c",
-  "//third_party/libaom/source/libaom/av1/common/clpf_ssse3.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/av1_convolve_ssse3.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/warp_plane_ssse3.c",
-]
-libaom_srcs_x86_sse4_1 = [
+
+aom_dsp_common_intrin_sse4_1 = [
   "//third_party/libaom/source/libaom/aom_dsp/x86/blend_a64_hmask_sse4.c",
   "//third_party/libaom/source/libaom/aom_dsp/x86/blend_a64_mask_sse4.c",
   "//third_party/libaom/source/libaom/aom_dsp/x86/blend_a64_vmask_sse4.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_sse4.c",
-  "//third_party/libaom/source/libaom/av1/common/clpf_sse4.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/highbd_inv_txfm_sse4.c",
 ]
-libaom_srcs_x86_avx = []
-libaom_srcs_x86_avx2 = [
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_intrin_avx2.c",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_avx2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/convolve_avx2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/highbd_inv_txfm_avx2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/hybrid_inv_txfm_avx2.c",
-]
-libaom_srcs_x86_64 = [
-  "//third_party/libaom/source/libaom/aom/aom.h",
-  "//third_party/libaom/source/libaom/aom/aom_codec.h",
-  "//third_party/libaom/source/libaom/aom/aom_decoder.h",
-  "//third_party/libaom/source/libaom/aom/aom_encoder.h",
-  "//third_party/libaom/source/libaom/aom/aom_frame_buffer.h",
-  "//third_party/libaom/source/libaom/aom/aom_image.h",
-  "//third_party/libaom/source/libaom/aom/aom_integer.h",
-  "//third_party/libaom/source/libaom/aom/aomdx.h",
-  "//third_party/libaom/source/libaom/aom/internal/aom_codec_internal.h",
-  "//third_party/libaom/source/libaom/aom/src/aom_codec.c",
-  "//third_party/libaom/source/libaom/aom/src/aom_decoder.c",
-  "//third_party/libaom/source/libaom/aom/src/aom_encoder.c",
-  "//third_party/libaom/source/libaom/aom/src/aom_image.c",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_convolve.c",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_convolve.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_dsp_common.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_dsp_rtcd.c",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_filter.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_simd.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_simd_inline.h",
-  "//third_party/libaom/source/libaom/aom_dsp/binary_codes_reader.c",
-  "//third_party/libaom/source/libaom/aom_dsp/binary_codes_reader.h",
-  "//third_party/libaom/source/libaom/aom_dsp/bitreader.h",
-  "//third_party/libaom/source/libaom/aom_dsp/bitreader_buffer.c",
-  "//third_party/libaom/source/libaom/aom_dsp/bitreader_buffer.h",
-  "//third_party/libaom/source/libaom/aom_dsp/blend.h",
-  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_hmask.c",
-  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_mask.c",
-  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_vmask.c",
-  "//third_party/libaom/source/libaom/aom_dsp/daalaboolreader.c",
-  "//third_party/libaom/source/libaom/aom_dsp/daalaboolreader.h",
-  "//third_party/libaom/source/libaom/aom_dsp/entcode.c",
-  "//third_party/libaom/source/libaom/aom_dsp/entcode.h",
-  "//third_party/libaom/source/libaom/aom_dsp/entdec.c",
-  "//third_party/libaom/source/libaom/aom_dsp/entdec.h",
-  "//third_party/libaom/source/libaom/aom_dsp/intrapred.c",
-  "//third_party/libaom/source/libaom/aom_dsp/inv_txfm.c",
-  "//third_party/libaom/source/libaom/aom_dsp/inv_txfm.h",
-  "//third_party/libaom/source/libaom/aom_dsp/loopfilter.c",
-  "//third_party/libaom/source/libaom/aom_dsp/prob.c",
-  "//third_party/libaom/source/libaom/aom_dsp/prob.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics_c.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics_x86.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics_c.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics_v128.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics_x86.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics_c.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics_x86.h",
-  "//third_party/libaom/source/libaom/aom_dsp/txfm_common.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_asm_stubs.c",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/blend_sse4.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/common_avx2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/convolve.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_common_avx2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_sse2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/lpf_common_sse2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/obmc_intrinsic_ssse3.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/synonyms.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/txfm_common_avx2.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/txfm_common_intrin.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/txfm_common_sse2.h",
-  "//third_party/libaom/source/libaom/aom_mem/aom_mem.c",
-  "//third_party/libaom/source/libaom/aom_mem/aom_mem.h",
-  "//third_party/libaom/source/libaom/aom_mem/include/aom_mem_intrnl.h",
-  "//third_party/libaom/source/libaom/aom_ports/aom_once.h",
-  "//third_party/libaom/source/libaom/aom_ports/aom_timer.h",
-  "//third_party/libaom/source/libaom/aom_ports/bitops.h",
-  "//third_party/libaom/source/libaom/aom_ports/emmintrin_compat.h",
-  "//third_party/libaom/source/libaom/aom_ports/mem.h",
-  "//third_party/libaom/source/libaom/aom_ports/mem_ops.h",
-  "//third_party/libaom/source/libaom/aom_ports/mem_ops_aligned.h",
-  "//third_party/libaom/source/libaom/aom_ports/msvc.h",
-  "//third_party/libaom/source/libaom/aom_ports/system_state.h",
-  "//third_party/libaom/source/libaom/aom_ports/x86.h",
-  "//third_party/libaom/source/libaom/aom_scale/aom_scale.h",
-  "//third_party/libaom/source/libaom/aom_scale/aom_scale_rtcd.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/aom_scale.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/gen_scalers.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/yv12config.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/yv12extend.c",
-  "//third_party/libaom/source/libaom/aom_scale/yv12config.h",
-  "//third_party/libaom/source/libaom/aom_util/aom_thread.c",
-  "//third_party/libaom/source/libaom/aom_util/aom_thread.h",
-  "//third_party/libaom/source/libaom/aom_util/endian_inl.h",
-  "//third_party/libaom/source/libaom/av1/av1_dx_iface.c",
-  "//third_party/libaom/source/libaom/av1/av1_iface_common.h",
-  "//third_party/libaom/source/libaom/av1/common/alloccommon.c",
-  "//third_party/libaom/source/libaom/av1/common/alloccommon.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm1d.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm1d.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm1d_cfg.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm2d.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm1d.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm1d.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm1d_cfg.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm2d.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_loopfilter.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_loopfilter.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_rtcd.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_txfm.h",
-  "//third_party/libaom/source/libaom/av1/common/blockd.c",
-  "//third_party/libaom/source/libaom/av1/common/blockd.h",
-  "//third_party/libaom/source/libaom/av1/common/cdef.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef.h",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block.h",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_simd.h",
-  "//third_party/libaom/source/libaom/av1/common/clpf.c",
-  "//third_party/libaom/source/libaom/av1/common/clpf_simd.h",
-  "//third_party/libaom/source/libaom/av1/common/common.h",
-  "//third_party/libaom/source/libaom/av1/common/common_data.h",
-  "//third_party/libaom/source/libaom/av1/common/convolve.c",
-  "//third_party/libaom/source/libaom/av1/common/convolve.h",
-  "//third_party/libaom/source/libaom/av1/common/daala_tx.c",
-  "//third_party/libaom/source/libaom/av1/common/daala_tx.h",
-  "//third_party/libaom/source/libaom/av1/common/debugmodes.c",
-  "//third_party/libaom/source/libaom/av1/common/entropy.c",
-  "//third_party/libaom/source/libaom/av1/common/entropy.h",
-  "//third_party/libaom/source/libaom/av1/common/entropymode.c",
-  "//third_party/libaom/source/libaom/av1/common/entropymode.h",
-  "//third_party/libaom/source/libaom/av1/common/entropymv.c",
-  "//third_party/libaom/source/libaom/av1/common/entropymv.h",
-  "//third_party/libaom/source/libaom/av1/common/enums.h",
-  "//third_party/libaom/source/libaom/av1/common/filter.c",
-  "//third_party/libaom/source/libaom/av1/common/filter.h",
-  "//third_party/libaom/source/libaom/av1/common/frame_buffers.c",
-  "//third_party/libaom/source/libaom/av1/common/frame_buffers.h",
-  "//third_party/libaom/source/libaom/av1/common/idct.c",
-  "//third_party/libaom/source/libaom/av1/common/idct.h",
-  "//third_party/libaom/source/libaom/av1/common/mv.h",
-  "//third_party/libaom/source/libaom/av1/common/mvref_common.c",
-  "//third_party/libaom/source/libaom/av1/common/mvref_common.h",
-  "//third_party/libaom/source/libaom/av1/common/obmc.h",
-  "//third_party/libaom/source/libaom/av1/common/odintrin.c",
-  "//third_party/libaom/source/libaom/av1/common/odintrin.h",
-  "//third_party/libaom/source/libaom/av1/common/onyxc_int.h",
-  "//third_party/libaom/source/libaom/av1/common/pred_common.c",
-  "//third_party/libaom/source/libaom/av1/common/pred_common.h",
-  "//third_party/libaom/source/libaom/av1/common/quant_common.c",
-  "//third_party/libaom/source/libaom/av1/common/quant_common.h",
-  "//third_party/libaom/source/libaom/av1/common/reconinter.c",
-  "//third_party/libaom/source/libaom/av1/common/reconinter.h",
-  "//third_party/libaom/source/libaom/av1/common/reconintra.c",
-  "//third_party/libaom/source/libaom/av1/common/reconintra.h",
-  "//third_party/libaom/source/libaom/av1/common/resize.c",
-  "//third_party/libaom/source/libaom/av1/common/resize.h",
-  "//third_party/libaom/source/libaom/av1/common/scale.c",
-  "//third_party/libaom/source/libaom/av1/common/scale.h",
-  "//third_party/libaom/source/libaom/av1/common/scan.c",
-  "//third_party/libaom/source/libaom/av1/common/scan.h",
-  "//third_party/libaom/source/libaom/av1/common/seg_common.c",
-  "//third_party/libaom/source/libaom/av1/common/seg_common.h",
-  "//third_party/libaom/source/libaom/av1/common/thread_common.c",
-  "//third_party/libaom/source/libaom/av1/common/thread_common.h",
-  "//third_party/libaom/source/libaom/av1/common/tile_common.c",
-  "//third_party/libaom/source/libaom/av1/common/tile_common.h",
-  "//third_party/libaom/source/libaom/av1/common/warped_motion.c",
-  "//third_party/libaom/source/libaom/av1/common/warped_motion.h",
-  "//third_party/libaom/source/libaom/av1/common/x86/highbd_txfm_utility_sse4.h",
-  "//third_party/libaom/source/libaom/av1/decoder/decodeframe.c",
-  "//third_party/libaom/source/libaom/av1/decoder/decodeframe.h",
-  "//third_party/libaom/source/libaom/av1/decoder/decodemv.c",
-  "//third_party/libaom/source/libaom/av1/decoder/decodemv.h",
-  "//third_party/libaom/source/libaom/av1/decoder/decoder.c",
-  "//third_party/libaom/source/libaom/av1/decoder/decoder.h",
-  "//third_party/libaom/source/libaom/av1/decoder/detokenize.c",
-  "//third_party/libaom/source/libaom/av1/decoder/detokenize.h",
-  "//third_party/libaom/source/libaom/av1/decoder/dsubexp.c",
-  "//third_party/libaom/source/libaom/av1/decoder/dsubexp.h",
-  "//third_party/libaom/source/libaom/av1/decoder/dthread.c",
-  "//third_party/libaom/source/libaom/av1/decoder/dthread.h",
-]
-libaom_srcs_x86_64_assembly = [
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_convolve_copy_sse2.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_sse2.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_ssse3.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_bilinear_sse2.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_bilinear_ssse3.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/intrapred_sse2.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/intrapred_ssse3.asm",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_wht_sse2.asm",
-  "//third_party/libaom/source/libaom/aom_ports/emms.asm",
-]
-libaom_srcs_x86_64_mmx = []
-libaom_srcs_x86_64_sse2 = [
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_sse2.c",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/loopfilter_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/clpf_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/convolve_2d_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/idct_intrin_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/warp_plane_sse2.c",
-]
-libaom_srcs_x86_64_sse3 = []
-libaom_srcs_x86_64_ssse3 = [
+
+aom_dsp_common_intrin_ssse3 = [
   "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_intrin_ssse3.c",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_ssse3.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_ssse3.c",
-  "//third_party/libaom/source/libaom/av1/common/clpf_ssse3.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/av1_convolve_ssse3.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/warp_plane_ssse3.c",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/highbd_convolve_ssse3.c",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/intrapred_ssse3.c",
 ]
-libaom_srcs_x86_64_sse4_1 = [
-  "//third_party/libaom/source/libaom/aom_dsp/x86/blend_a64_hmask_sse4.c",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/blend_a64_mask_sse4.c",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/blend_a64_vmask_sse4.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_sse4.c",
-  "//third_party/libaom/source/libaom/av1/common/clpf_sse4.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/highbd_inv_txfm_sse4.c",
+
+aom_dsp_common_sources = [
+  "//third_party/libaom/source/libaom/aom_dsp/aom_convolve.c",
+  "//third_party/libaom/source/libaom/aom_dsp/aom_convolve.h",
+  "//third_party/libaom/source/libaom/aom_dsp/aom_dsp_common.h",
+  "//third_party/libaom/source/libaom/aom_dsp/aom_filter.h",
+  "//third_party/libaom/source/libaom/aom_dsp/aom_simd.h",
+  "//third_party/libaom/source/libaom/aom_dsp/aom_simd_inline.h",
+  "//third_party/libaom/source/libaom/aom_dsp/blend.h",
+  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_hmask.c",
+  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_mask.c",
+  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_vmask.c",
+  "//third_party/libaom/source/libaom/aom_dsp/entcode.c",
+  "//third_party/libaom/source/libaom/aom_dsp/entcode.h",
+  "//third_party/libaom/source/libaom/aom_dsp/intrapred.c",
+  "//third_party/libaom/source/libaom/aom_dsp/intrapred_common.h",
+  "//third_party/libaom/source/libaom/aom_dsp/loopfilter.c",
+  "//third_party/libaom/source/libaom/aom_dsp/prob.h",
+  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics.h",
+  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics_c.h",
+  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics.h",
+  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics_c.h",
+  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics.h",
+  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics_c.h",
+  "//third_party/libaom/source/libaom/aom_dsp/subtract.c",
+  "//third_party/libaom/source/libaom/aom_dsp/txfm_common.h",
+  "//third_party/libaom/source/libaom/aom_dsp/x86/convolve_common_intrin.h",
 ]
-libaom_srcs_x86_64_avx = []
-libaom_srcs_x86_64_avx2 = [
-  "//third_party/libaom/source/libaom/aom_dsp/x86/aom_subpixel_8t_intrin_avx2.c",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/inv_txfm_avx2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/convolve_avx2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/highbd_inv_txfm_avx2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/hybrid_inv_txfm_avx2.c",
+
+aom_dsp_decoder_sources = [
+  "//third_party/libaom/source/libaom/aom_dsp/binary_codes_reader.c",
+  "//third_party/libaom/source/libaom/aom_dsp/binary_codes_reader.h",
+  "//third_party/libaom/source/libaom/aom_dsp/bitreader.h",
+  "//third_party/libaom/source/libaom/aom_dsp/bitreader_buffer.c",
+  "//third_party/libaom/source/libaom/aom_dsp/bitreader_buffer.h",
+  "//third_party/libaom/source/libaom/aom_dsp/daalaboolreader.c",
+  "//third_party/libaom/source/libaom/aom_dsp/daalaboolreader.h",
+  "//third_party/libaom/source/libaom/aom_dsp/entdec.c",
+  "//third_party/libaom/source/libaom/aom_dsp/entdec.h",
+  "//third_party/libaom/source/libaom/aom_dsp/grain_synthesis.c",
+  "//third_party/libaom/source/libaom/aom_dsp/grain_synthesis.h",
 ]
-libaom_srcs_generic = [
+
+aom_encoder_stats_sources = [
+  "//third_party/libaom/source/libaom/stats/aomstats.c",
+  "//third_party/libaom/source/libaom/stats/aomstats.h",
+  "//third_party/libaom/source/libaom/stats/rate_hist.c",
+  "//third_party/libaom/source/libaom/stats/rate_hist.h",
+]
+
+aom_mem_sources = [
+  "//third_party/libaom/source/libaom/aom_mem/aom_mem.c",
+  "//third_party/libaom/source/libaom/aom_mem/aom_mem.h",
+  "//third_party/libaom/source/libaom/aom_mem/include/aom_mem_intrnl.h",
+]
+
+aom_ports_asm_x86 = [ "//third_party/libaom/source/libaom/aom_ports/emms.asm" ]
+
+aom_rtcd_sources = [
+  "//third_party/libaom/source/libaom/aom_dsp/aom_dsp_rtcd_defs.pl",
+  "//third_party/libaom/source/libaom/aom_dsp/aom_dsp_rtcd.c",
+  "//third_party/libaom/source/libaom/aom_scale/aom_scale_rtcd.pl",
+  "//third_party/libaom/source/libaom/aom_scale/aom_scale_rtcd.c",
+  "//third_party/libaom/source/libaom/av1/common/av1_rtcd_defs.pl",
+  "//third_party/libaom/source/libaom/av1/common/av1_rtcd.c",
+  "//third_party/libaom/source/libaom/build/make/rtcd.pl",
+]
+
+aom_scale_intrin_dspr2 = [
+  "//third_party/libaom/source/libaom/aom_scale/mips/dspr2/yv12extend_dspr2.c",
+]
+
+aom_scale_sources = [
+  "//third_party/libaom/source/libaom/aom_scale/aom_scale.h",
+  "//third_party/libaom/source/libaom/aom_scale/generic/aom_scale.c",
+  "//third_party/libaom/source/libaom/aom_scale/generic/gen_scalers.c",
+  "//third_party/libaom/source/libaom/aom_scale/generic/yv12config.c",
+  "//third_party/libaom/source/libaom/aom_scale/generic/yv12extend.c",
+  "//third_party/libaom/source/libaom/aom_scale/yv12config.h",
+]
+
+aom_sources = [
   "//third_party/libaom/source/libaom/aom/aom.h",
   "//third_party/libaom/source/libaom/aom/aom_codec.h",
   "//third_party/libaom/source/libaom/aom/aom_decoder.h",
@@ -455,163 +472,46 @@
   "//third_party/libaom/source/libaom/aom/aom_frame_buffer.h",
   "//third_party/libaom/source/libaom/aom/aom_image.h",
   "//third_party/libaom/source/libaom/aom/aom_integer.h",
+  "//third_party/libaom/source/libaom/aom/aomcx.h",
   "//third_party/libaom/source/libaom/aom/aomdx.h",
   "//third_party/libaom/source/libaom/aom/internal/aom_codec_internal.h",
   "//third_party/libaom/source/libaom/aom/src/aom_codec.c",
   "//third_party/libaom/source/libaom/aom/src/aom_decoder.c",
   "//third_party/libaom/source/libaom/aom/src/aom_encoder.c",
   "//third_party/libaom/source/libaom/aom/src/aom_image.c",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_convolve.c",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_convolve.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_dsp_common.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_dsp_rtcd.c",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_filter.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_simd.h",
-  "//third_party/libaom/source/libaom/aom_dsp/aom_simd_inline.h",
-  "//third_party/libaom/source/libaom/aom_dsp/binary_codes_reader.c",
-  "//third_party/libaom/source/libaom/aom_dsp/binary_codes_reader.h",
-  "//third_party/libaom/source/libaom/aom_dsp/bitreader.h",
-  "//third_party/libaom/source/libaom/aom_dsp/bitreader_buffer.c",
-  "//third_party/libaom/source/libaom/aom_dsp/bitreader_buffer.h",
-  "//third_party/libaom/source/libaom/aom_dsp/blend.h",
-  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_hmask.c",
-  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_mask.c",
-  "//third_party/libaom/source/libaom/aom_dsp/blend_a64_vmask.c",
-  "//third_party/libaom/source/libaom/aom_dsp/daalaboolreader.c",
-  "//third_party/libaom/source/libaom/aom_dsp/daalaboolreader.h",
-  "//third_party/libaom/source/libaom/aom_dsp/entcode.c",
-  "//third_party/libaom/source/libaom/aom_dsp/entcode.h",
-  "//third_party/libaom/source/libaom/aom_dsp/entdec.c",
-  "//third_party/libaom/source/libaom/aom_dsp/entdec.h",
-  "//third_party/libaom/source/libaom/aom_dsp/intrapred.c",
-  "//third_party/libaom/source/libaom/aom_dsp/inv_txfm.c",
-  "//third_party/libaom/source/libaom/aom_dsp/inv_txfm.h",
-  "//third_party/libaom/source/libaom/aom_dsp/loopfilter.c",
-  "//third_party/libaom/source/libaom/aom_dsp/prob.c",
-  "//third_party/libaom/source/libaom/aom_dsp/prob.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v128_intrinsics_c.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics_c.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v256_intrinsics_v128.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics.h",
-  "//third_party/libaom/source/libaom/aom_dsp/simd/v64_intrinsics_c.h",
-  "//third_party/libaom/source/libaom/aom_dsp/txfm_common.h",
-  "//third_party/libaom/source/libaom/aom_dsp/x86/txfm_common_intrin.h",
-  "//third_party/libaom/source/libaom/aom_mem/aom_mem.c",
-  "//third_party/libaom/source/libaom/aom_mem/aom_mem.h",
-  "//third_party/libaom/source/libaom/aom_mem/include/aom_mem_intrnl.h",
-  "//third_party/libaom/source/libaom/aom_ports/aom_once.h",
-  "//third_party/libaom/source/libaom/aom_ports/aom_timer.h",
-  "//third_party/libaom/source/libaom/aom_ports/bitops.h",
-  "//third_party/libaom/source/libaom/aom_ports/emmintrin_compat.h",
-  "//third_party/libaom/source/libaom/aom_ports/mem.h",
-  "//third_party/libaom/source/libaom/aom_ports/mem_ops.h",
-  "//third_party/libaom/source/libaom/aom_ports/mem_ops_aligned.h",
-  "//third_party/libaom/source/libaom/aom_ports/msvc.h",
-  "//third_party/libaom/source/libaom/aom_ports/system_state.h",
-  "//third_party/libaom/source/libaom/aom_scale/aom_scale.h",
-  "//third_party/libaom/source/libaom/aom_scale/aom_scale_rtcd.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/aom_scale.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/gen_scalers.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/yv12config.c",
-  "//third_party/libaom/source/libaom/aom_scale/generic/yv12extend.c",
-  "//third_party/libaom/source/libaom/aom_scale/yv12config.h",
+  "//third_party/libaom/source/libaom/aom/src/aom_integer.c",
+]
+
+aom_util_sources = [
   "//third_party/libaom/source/libaom/aom_util/aom_thread.c",
   "//third_party/libaom/source/libaom/aom_util/aom_thread.h",
   "//third_party/libaom/source/libaom/aom_util/endian_inl.h",
-  "//third_party/libaom/source/libaom/av1/av1_dx_iface.c",
-  "//third_party/libaom/source/libaom/av1/av1_iface_common.h",
-  "//third_party/libaom/source/libaom/av1/common/alloccommon.c",
-  "//third_party/libaom/source/libaom/av1/common/alloccommon.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm1d.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm1d.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm1d_cfg.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_fwd_txfm2d.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm1d.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm1d.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm1d_cfg.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_inv_txfm2d.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_loopfilter.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_loopfilter.h",
-  "//third_party/libaom/source/libaom/av1/common/av1_rtcd.c",
-  "//third_party/libaom/source/libaom/av1/common/av1_txfm.h",
-  "//third_party/libaom/source/libaom/av1/common/blockd.c",
-  "//third_party/libaom/source/libaom/av1/common/blockd.h",
-  "//third_party/libaom/source/libaom/av1/common/cdef.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef.h",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block.h",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_simd.h",
-  "//third_party/libaom/source/libaom/av1/common/clpf.c",
-  "//third_party/libaom/source/libaom/av1/common/clpf_simd.h",
-  "//third_party/libaom/source/libaom/av1/common/common.h",
-  "//third_party/libaom/source/libaom/av1/common/common_data.h",
-  "//third_party/libaom/source/libaom/av1/common/convolve.c",
-  "//third_party/libaom/source/libaom/av1/common/convolve.h",
-  "//third_party/libaom/source/libaom/av1/common/daala_tx.c",
-  "//third_party/libaom/source/libaom/av1/common/daala_tx.h",
-  "//third_party/libaom/source/libaom/av1/common/debugmodes.c",
-  "//third_party/libaom/source/libaom/av1/common/entropy.c",
-  "//third_party/libaom/source/libaom/av1/common/entropy.h",
-  "//third_party/libaom/source/libaom/av1/common/entropymode.c",
-  "//third_party/libaom/source/libaom/av1/common/entropymode.h",
-  "//third_party/libaom/source/libaom/av1/common/entropymv.c",
-  "//third_party/libaom/source/libaom/av1/common/entropymv.h",
-  "//third_party/libaom/source/libaom/av1/common/enums.h",
-  "//third_party/libaom/source/libaom/av1/common/filter.c",
-  "//third_party/libaom/source/libaom/av1/common/filter.h",
-  "//third_party/libaom/source/libaom/av1/common/frame_buffers.c",
-  "//third_party/libaom/source/libaom/av1/common/frame_buffers.h",
-  "//third_party/libaom/source/libaom/av1/common/idct.c",
-  "//third_party/libaom/source/libaom/av1/common/idct.h",
-  "//third_party/libaom/source/libaom/av1/common/mv.h",
-  "//third_party/libaom/source/libaom/av1/common/mvref_common.c",
-  "//third_party/libaom/source/libaom/av1/common/mvref_common.h",
-  "//third_party/libaom/source/libaom/av1/common/obmc.h",
-  "//third_party/libaom/source/libaom/av1/common/odintrin.c",
-  "//third_party/libaom/source/libaom/av1/common/odintrin.h",
-  "//third_party/libaom/source/libaom/av1/common/onyxc_int.h",
-  "//third_party/libaom/source/libaom/av1/common/pred_common.c",
-  "//third_party/libaom/source/libaom/av1/common/pred_common.h",
-  "//third_party/libaom/source/libaom/av1/common/quant_common.c",
-  "//third_party/libaom/source/libaom/av1/common/quant_common.h",
-  "//third_party/libaom/source/libaom/av1/common/reconinter.c",
-  "//third_party/libaom/source/libaom/av1/common/reconinter.h",
-  "//third_party/libaom/source/libaom/av1/common/reconintra.c",
-  "//third_party/libaom/source/libaom/av1/common/reconintra.h",
-  "//third_party/libaom/source/libaom/av1/common/resize.c",
-  "//third_party/libaom/source/libaom/av1/common/resize.h",
-  "//third_party/libaom/source/libaom/av1/common/scale.c",
-  "//third_party/libaom/source/libaom/av1/common/scale.h",
-  "//third_party/libaom/source/libaom/av1/common/scan.c",
-  "//third_party/libaom/source/libaom/av1/common/scan.h",
-  "//third_party/libaom/source/libaom/av1/common/seg_common.c",
-  "//third_party/libaom/source/libaom/av1/common/seg_common.h",
-  "//third_party/libaom/source/libaom/av1/common/thread_common.c",
-  "//third_party/libaom/source/libaom/av1/common/thread_common.h",
-  "//third_party/libaom/source/libaom/av1/common/tile_common.c",
-  "//third_party/libaom/source/libaom/av1/common/tile_common.h",
-  "//third_party/libaom/source/libaom/av1/common/warped_motion.c",
-  "//third_party/libaom/source/libaom/av1/common/warped_motion.h",
-  "//third_party/libaom/source/libaom/av1/decoder/decodeframe.c",
-  "//third_party/libaom/source/libaom/av1/decoder/decodeframe.h",
-  "//third_party/libaom/source/libaom/av1/decoder/decodemv.c",
-  "//third_party/libaom/source/libaom/av1/decoder/decodemv.h",
-  "//third_party/libaom/source/libaom/av1/decoder/decoder.c",
-  "//third_party/libaom/source/libaom/av1/decoder/decoder.h",
-  "//third_party/libaom/source/libaom/av1/decoder/detokenize.c",
-  "//third_party/libaom/source/libaom/av1/decoder/detokenize.h",
-  "//third_party/libaom/source/libaom/av1/decoder/dsubexp.c",
-  "//third_party/libaom/source/libaom/av1/decoder/dsubexp.h",
-  "//third_party/libaom/source/libaom/av1/decoder/dthread.c",
-  "//third_party/libaom/source/libaom/av1/decoder/dthread.h",
+  "//third_party/libaom/source/libaom/aom_util/debug_util.c",
+  "//third_party/libaom/source/libaom/aom_util/debug_util.h",
 ]
-libaom_srcs_generic_assembly = []
-libaom_srcs_generic_mmx = []
-libaom_srcs_generic_sse2 = []
-libaom_srcs_generic_sse3 = []
-libaom_srcs_generic_ssse3 = []
-libaom_srcs_generic_sse4_1 = []
-libaom_srcs_generic_avx = []
-libaom_srcs_generic_avx2 = []
+
+aom_webm_decoder_sources = [
+  "//third_party/libaom/source/libaom/common/webmdec.cc",
+  "//third_party/libaom/source/libaom/common/webmdec.h",
+]
+
+aom_webm_encoder_sources = [
+  "//third_party/libaom/source/libaom/common/webmenc.cc",
+  "//third_party/libaom/source/libaom/common/webmenc.h",
+]
+
+# Files below this line are generated by the libaom build system.
+
+aom_rtcd_sources_gen = [
+  "//third_party/libaom/source/libaom/config/aom_dsp_rtcd.h",
+  "//third_party/libaom/source/libaom/config/aom_scale_rtcd.h",
+  "//third_party/libaom/source/libaom/config/av1_rtcd.h",
+]
+
+aom_sources_gen = [
+  "//third_party/libaom/source/libaom/config/aom_config.c",
+  "//third_party/libaom/source/libaom/config/aom_config.h",
+]
+
+aom_version_sources_gen =
+    [ "//third_party/libaom/source/libaom/config/aom_version.h" ]
diff --git a/third_party/libaom/source/config/aom_version.h b/third_party/libaom/source/config/aom_version.h
deleted file mode 100644
index 2c3ce173..0000000
--- a/third_party/libaom/source/config/aom_version.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#define VERSION_MAJOR  0
-#define VERSION_MINOR  1
-#define VERSION_PATCH  0
-#define VERSION_EXTRA  "5968-gcccda0db7"
-#define VERSION_PACKED ((VERSION_MAJOR<<16)|(VERSION_MINOR<<8)|(VERSION_PATCH))
-#define VERSION_STRING_NOSP "v0.1.0-5968-gcccda0db7"
-#define VERSION_STRING      " v0.1.0-5968-gcccda0db7"
diff --git a/third_party/libaom/source/config/config/aom_version.h b/third_party/libaom/source/config/config/aom_version.h
new file mode 100644
index 0000000..671a906
--- /dev/null
+++ b/third_party/libaom/source/config/config/aom_version.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+
+#define VERSION_MAJOR 0
+#define VERSION_MINOR 1
+#define VERSION_PATCH 0
+#define VERSION_EXTRA ""
+#define VERSION_PACKED \
+  ((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH))
+#define VERSION_STRING_NOSP "0.1.0-9778-gc5a56b99d"
+#define VERSION_STRING " 0.1.0-9778-gc5a56b99d"
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm
new file mode 100644
index 0000000..c47753d
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.asm
@@ -0,0 +1,73 @@
+;
+; Copyright (c) 2018, Alliance for Open Media. All rights reserved
+;
+; This source code is subject to the terms of the BSD 2 Clause License and
+; the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+; was not distributed with this source code in the LICENSE file, you can
+; obtain it at www.aomedia.org/license/software. If the Alliance for Open
+; Media Patent License 1.0 was not distributed with this source code in the
+; PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+;
+ARCH_ARM equ 1
+ARCH_MIPS equ 0
+ARCH_PPC equ 0
+ARCH_X86 equ 0
+ARCH_X86_64 equ 0
+CONFIG_ACCOUNTING equ 0
+CONFIG_ANALYZER equ 0
+CONFIG_AV1_DECODER equ 1
+CONFIG_AV1_ENCODER equ 0
+CONFIG_BIG_ENDIAN equ 0
+CONFIG_BITSTREAM_DEBUG equ 0
+CONFIG_COEFFICIENT_RANGE_CHECKING equ 0
+CONFIG_COLLECT_INTER_MODE_RD_STATS equ 1
+CONFIG_COLLECT_RD_STATS equ 0
+CONFIG_DEBUG equ 0
+CONFIG_DECODE_PERF_TESTS equ 0
+CONFIG_DIST_8X8 equ 1
+CONFIG_ENCODE_PERF_TESTS equ 0
+CONFIG_ENTROPY_STATS equ 0
+CONFIG_FILEOPTIONS equ 1
+CONFIG_FP_MB_STATS equ 0
+CONFIG_GCC equ 1
+CONFIG_GCOV equ 0
+CONFIG_GPROF equ 0
+CONFIG_INSPECTION equ 0
+CONFIG_INTERNAL_STATS equ 0
+CONFIG_INTER_STATS_ONLY equ 0
+CONFIG_LIBYUV equ 1
+CONFIG_LOWBITDEPTH equ 1
+CONFIG_MISMATCH_DEBUG equ 0
+CONFIG_MSVS equ 0
+CONFIG_MULTITHREAD equ 1
+CONFIG_OS_SUPPORT equ 1
+CONFIG_PIC equ 0
+CONFIG_RD_DEBUG equ 0
+CONFIG_RUNTIME_CPU_DETECT equ 1
+CONFIG_SHARED equ 0
+CONFIG_SIZE_LIMIT equ 1
+CONFIG_SPATIAL_RESAMPLING equ 1
+CONFIG_STATIC equ 1
+CONFIG_UNIT_TESTS equ 1
+CONFIG_WEBM_IO equ 1
+DECODE_HEIGHT_LIMIT equ 16384
+DECODE_WIDTH_LIMIT equ 16384
+HAVE_AVX equ 0
+HAVE_AVX2 equ 0
+HAVE_DSPR2 equ 0
+HAVE_FEXCEPT equ 1
+HAVE_MIPS32 equ 0
+HAVE_MIPS64 equ 0
+HAVE_MMX equ 0
+HAVE_MSA equ 0
+HAVE_NEON equ 1
+HAVE_PTHREAD_H equ 1
+HAVE_SSE equ 0
+HAVE_SSE2 equ 0
+HAVE_SSE3 equ 0
+HAVE_SSE4_1 equ 0
+HAVE_SSE4_2 equ 0
+HAVE_SSSE3 equ 0
+HAVE_UNISTD_H equ 1
+HAVE_VSX equ 0
+HAVE_WXWIDGETS equ 0
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.c b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.c
new file mode 100644
index 0000000..27a92cf
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2016, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#include "aom/aom_codec.h"
+static const char* const cfg = "-G \"Unix Makefiles\" -DCMAKE_TOOLCHAIN_FILE=\"/usr/local/google/home/johannkoenig/chromium/chromium/src/third_party/libaom/source/libaom/build/cmake/toolchains/armv7-linux-gcc.cmake\" -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=1 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=16384 -DDECODE_WIDTH_LIMIT=16384";
+const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h
new file mode 100644
index 0000000..4bc157ce
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#ifndef AOM_CONFIG_H_
+#define AOM_CONFIG_H_
+#define ARCH_ARM 1
+#define ARCH_MIPS 0
+#define ARCH_PPC 0
+#define ARCH_X86 0
+#define ARCH_X86_64 0
+#define CONFIG_ACCOUNTING 0
+#define CONFIG_ANALYZER 0
+#define CONFIG_AV1_DECODER 1
+#define CONFIG_AV1_ENCODER 0
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+#define CONFIG_COLLECT_RD_STATS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_DIST_8X8 1
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_ENTROPY_STATS 0
+#define CONFIG_FILEOPTIONS 1
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_GCC 1
+#define CONFIG_GCOV 0
+#define CONFIG_GPROF 0
+#define CONFIG_INSPECTION 0
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_INTER_STATS_ONLY 0
+#define CONFIG_LIBYUV 1
+#define CONFIG_LOWBITDEPTH 1
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_MSVS 0
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_PIC 0
+#define CONFIG_RD_DEBUG 0
+#define CONFIG_RUNTIME_CPU_DETECT 1
+#define CONFIG_SHARED 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_STATIC 1
+#define CONFIG_UNIT_TESTS 1
+#define CONFIG_WEBM_IO 1
+#define DECODE_HEIGHT_LIMIT 16384
+#define DECODE_WIDTH_LIMIT 16384
+#define HAVE_AVX 0
+#define HAVE_AVX2 0
+#define HAVE_DSPR2 0
+#define HAVE_FEXCEPT 1
+#define HAVE_MIPS32 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 0
+#define HAVE_MSA 0
+#define HAVE_NEON 1
+#define HAVE_PTHREAD_H 1
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define HAVE_SSE3 0
+#define HAVE_SSE4_1 0
+#define HAVE_SSE4_2 0
+#define HAVE_SSSE3 0
+#define HAVE_UNISTD_H 1
+#define HAVE_VSX 0
+#define HAVE_WXWIDGETS 0
+#define INLINE inline
+#endif /* AOM_CONFIG_H_ */
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h
new file mode 100644
index 0000000..7a1e9f84
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h
@@ -0,0 +1,3452 @@
+// This file is generated. Do not edit.
+#ifndef AOM_DSP_RTCD_H_
+#define AOM_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/aom_dsp_common.h"
+#include "av1/common/blockd.h"
+#include "av1/common/enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void aom_blend_a64_hmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_hmask aom_blend_a64_hmask_c
+
+void aom_blend_a64_mask_c(uint8_t* dst,
+                          uint32_t dst_stride,
+                          const uint8_t* src0,
+                          uint32_t src0_stride,
+                          const uint8_t* src1,
+                          uint32_t src1_stride,
+                          const uint8_t* mask,
+                          uint32_t mask_stride,
+                          int w,
+                          int h,
+                          int subx,
+                          int suby);
+#define aom_blend_a64_mask aom_blend_a64_mask_c
+
+void aom_blend_a64_vmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_vmask aom_blend_a64_vmask_c
+
+void aom_convolve8_horiz_c(const uint8_t* src,
+                           ptrdiff_t src_stride,
+                           uint8_t* dst,
+                           ptrdiff_t dst_stride,
+                           const int16_t* filter_x,
+                           int x_step_q4,
+                           const int16_t* filter_y,
+                           int y_step_q4,
+                           int w,
+                           int h);
+#define aom_convolve8_horiz aom_convolve8_horiz_c
+
+void aom_convolve8_vert_c(const uint8_t* src,
+                          ptrdiff_t src_stride,
+                          uint8_t* dst,
+                          ptrdiff_t dst_stride,
+                          const int16_t* filter_x,
+                          int x_step_q4,
+                          const int16_t* filter_y,
+                          int y_step_q4,
+                          int w,
+                          int h);
+#define aom_convolve8_vert aom_convolve8_vert_c
+
+void aom_convolve_copy_c(const uint8_t* src,
+                         ptrdiff_t src_stride,
+                         uint8_t* dst,
+                         ptrdiff_t dst_stride,
+                         const int16_t* filter_x,
+                         int x_step_q4,
+                         const int16_t* filter_y,
+                         int y_step_q4,
+                         int w,
+                         int h);
+#define aom_convolve_copy aom_convolve_copy_c
+
+void aom_dc_128_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x16_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
+
+void aom_dc_128_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x4 aom_dc_128_predictor_16x4_c
+
+void aom_dc_128_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x64 aom_dc_128_predictor_16x64_c
+
+void aom_dc_128_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
+
+void aom_dc_128_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
+
+void aom_dc_128_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
+
+void aom_dc_128_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x32_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x64 aom_dc_128_predictor_32x64_c
+
+void aom_dc_128_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_32x8 aom_dc_128_predictor_32x8_c
+
+void aom_dc_128_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_4x16 aom_dc_128_predictor_4x16_c
+
+void aom_dc_128_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x4_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_128_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
+
+void aom_dc_128_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x16 aom_dc_128_predictor_64x16_c
+
+void aom_dc_128_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x32 aom_dc_128_predictor_64x32_c
+
+void aom_dc_128_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x64 aom_dc_128_predictor_64x64_c
+
+void aom_dc_128_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
+
+void aom_dc_128_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x32 aom_dc_128_predictor_8x32_c
+
+void aom_dc_128_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
+
+void aom_dc_128_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x8_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_left_predictor_16x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x16_neon(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_16x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
+
+void aom_dc_left_predictor_16x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x4 aom_dc_left_predictor_16x4_c
+
+void aom_dc_left_predictor_16x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x64 aom_dc_left_predictor_16x64_c
+
+void aom_dc_left_predictor_16x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
+
+void aom_dc_left_predictor_2x2_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
+
+void aom_dc_left_predictor_32x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
+
+void aom_dc_left_predictor_32x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x32_neon(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x64 aom_dc_left_predictor_32x64_c
+
+void aom_dc_left_predictor_32x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_32x8 aom_dc_left_predictor_32x8_c
+
+void aom_dc_left_predictor_4x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_4x16 aom_dc_left_predictor_4x16_c
+
+void aom_dc_left_predictor_4x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x4_neon(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_4x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_left_predictor_4x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
+
+void aom_dc_left_predictor_64x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x16 aom_dc_left_predictor_64x16_c
+
+void aom_dc_left_predictor_64x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x32 aom_dc_left_predictor_64x32_c
+
+void aom_dc_left_predictor_64x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x64 aom_dc_left_predictor_64x64_c
+
+void aom_dc_left_predictor_8x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
+
+void aom_dc_left_predictor_8x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x32 aom_dc_left_predictor_8x32_c
+
+void aom_dc_left_predictor_8x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
+
+void aom_dc_left_predictor_8x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x8_neon(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_8x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_predictor_16x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x16_neon(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_16x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
+
+void aom_dc_predictor_16x4_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x4 aom_dc_predictor_16x4_c
+
+void aom_dc_predictor_16x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x64 aom_dc_predictor_16x64_c
+
+void aom_dc_predictor_16x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
+
+void aom_dc_predictor_2x2_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
+
+void aom_dc_predictor_32x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
+
+void aom_dc_predictor_32x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x32_neon(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x64 aom_dc_predictor_32x64_c
+
+void aom_dc_predictor_32x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_32x8 aom_dc_predictor_32x8_c
+
+void aom_dc_predictor_4x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_4x16 aom_dc_predictor_4x16_c
+
+void aom_dc_predictor_4x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x4_neon(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_4x4)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_predictor_4x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
+
+void aom_dc_predictor_64x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x16 aom_dc_predictor_64x16_c
+
+void aom_dc_predictor_64x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x32 aom_dc_predictor_64x32_c
+
+void aom_dc_predictor_64x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x64 aom_dc_predictor_64x64_c
+
+void aom_dc_predictor_8x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
+
+void aom_dc_predictor_8x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x32 aom_dc_predictor_8x32_c
+
+void aom_dc_predictor_8x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
+
+void aom_dc_predictor_8x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x8_neon(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_8x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_top_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x16_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
+
+void aom_dc_top_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x4 aom_dc_top_predictor_16x4_c
+
+void aom_dc_top_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x64 aom_dc_top_predictor_16x64_c
+
+void aom_dc_top_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
+
+void aom_dc_top_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
+
+void aom_dc_top_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
+
+void aom_dc_top_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x32_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x64 aom_dc_top_predictor_32x64_c
+
+void aom_dc_top_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_32x8 aom_dc_top_predictor_32x8_c
+
+void aom_dc_top_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_4x16 aom_dc_top_predictor_4x16_c
+
+void aom_dc_top_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x4_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_top_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
+
+void aom_dc_top_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x16 aom_dc_top_predictor_64x16_c
+
+void aom_dc_top_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x32 aom_dc_top_predictor_64x32_c
+
+void aom_dc_top_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x64 aom_dc_top_predictor_64x64_c
+
+void aom_dc_top_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
+
+void aom_dc_top_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x32 aom_dc_top_predictor_8x32_c
+
+void aom_dc_top_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
+
+void aom_dc_top_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x8_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_h_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x16_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
+
+void aom_h_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x4 aom_h_predictor_16x4_c
+
+void aom_h_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x64 aom_h_predictor_16x64_c
+
+void aom_h_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
+
+void aom_h_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
+
+void aom_h_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
+
+void aom_h_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x32_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x64 aom_h_predictor_32x64_c
+
+void aom_h_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_32x8 aom_h_predictor_32x8_c
+
+void aom_h_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_4x16 aom_h_predictor_4x16_c
+
+void aom_h_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x4_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_4x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_h_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
+
+void aom_h_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x16 aom_h_predictor_64x16_c
+
+void aom_h_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x32 aom_h_predictor_64x32_c
+
+void aom_h_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x64 aom_h_predictor_64x64_c
+
+void aom_h_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
+
+void aom_h_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x32 aom_h_predictor_8x32_c
+
+void aom_h_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
+
+void aom_h_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x8_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_8x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_highbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                     uint32_t dst_stride,
+                                     const CONV_BUF_TYPE* src0,
+                                     uint32_t src0_stride,
+                                     const CONV_BUF_TYPE* src1,
+                                     uint32_t src1_stride,
+                                     const uint8_t* mask,
+                                     uint32_t mask_stride,
+                                     int w,
+                                     int h,
+                                     int subx,
+                                     int suby,
+                                     ConvolveParams* conv_params,
+                                     const int bd);
+#define aom_highbd_blend_a64_d16_mask aom_highbd_blend_a64_d16_mask_c
+
+void aom_highbd_blend_a64_hmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_hmask aom_highbd_blend_a64_hmask_c
+
+void aom_highbd_blend_a64_mask_c(uint8_t* dst,
+                                 uint32_t dst_stride,
+                                 const uint8_t* src0,
+                                 uint32_t src0_stride,
+                                 const uint8_t* src1,
+                                 uint32_t src1_stride,
+                                 const uint8_t* mask,
+                                 uint32_t mask_stride,
+                                 int w,
+                                 int h,
+                                 int subx,
+                                 int suby,
+                                 int bd);
+#define aom_highbd_blend_a64_mask aom_highbd_blend_a64_mask_c
+
+void aom_highbd_blend_a64_vmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_vmask aom_highbd_blend_a64_vmask_c
+
+void aom_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define aom_highbd_convolve8_horiz aom_highbd_convolve8_horiz_c
+
+void aom_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define aom_highbd_convolve8_vert aom_highbd_convolve8_vert_c
+
+void aom_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define aom_highbd_convolve_copy aom_highbd_convolve_copy_c
+
+void aom_highbd_dc_128_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x16 aom_highbd_dc_128_predictor_16x16_c
+
+void aom_highbd_dc_128_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x32 aom_highbd_dc_128_predictor_16x32_c
+
+void aom_highbd_dc_128_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x4 aom_highbd_dc_128_predictor_16x4_c
+
+void aom_highbd_dc_128_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x64 aom_highbd_dc_128_predictor_16x64_c
+
+void aom_highbd_dc_128_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x8 aom_highbd_dc_128_predictor_16x8_c
+
+void aom_highbd_dc_128_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_2x2 aom_highbd_dc_128_predictor_2x2_c
+
+void aom_highbd_dc_128_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x16 aom_highbd_dc_128_predictor_32x16_c
+
+void aom_highbd_dc_128_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x32 aom_highbd_dc_128_predictor_32x32_c
+
+void aom_highbd_dc_128_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x64 aom_highbd_dc_128_predictor_32x64_c
+
+void aom_highbd_dc_128_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_32x8 aom_highbd_dc_128_predictor_32x8_c
+
+void aom_highbd_dc_128_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_4x16 aom_highbd_dc_128_predictor_4x16_c
+
+void aom_highbd_dc_128_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x4 aom_highbd_dc_128_predictor_4x4_c
+
+void aom_highbd_dc_128_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x8 aom_highbd_dc_128_predictor_4x8_c
+
+void aom_highbd_dc_128_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x16 aom_highbd_dc_128_predictor_64x16_c
+
+void aom_highbd_dc_128_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x32 aom_highbd_dc_128_predictor_64x32_c
+
+void aom_highbd_dc_128_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x64 aom_highbd_dc_128_predictor_64x64_c
+
+void aom_highbd_dc_128_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x16 aom_highbd_dc_128_predictor_8x16_c
+
+void aom_highbd_dc_128_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x32 aom_highbd_dc_128_predictor_8x32_c
+
+void aom_highbd_dc_128_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x4 aom_highbd_dc_128_predictor_8x4_c
+
+void aom_highbd_dc_128_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x8 aom_highbd_dc_128_predictor_8x8_c
+
+void aom_highbd_dc_left_predictor_16x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x16 aom_highbd_dc_left_predictor_16x16_c
+
+void aom_highbd_dc_left_predictor_16x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x32 aom_highbd_dc_left_predictor_16x32_c
+
+void aom_highbd_dc_left_predictor_16x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x4 aom_highbd_dc_left_predictor_16x4_c
+
+void aom_highbd_dc_left_predictor_16x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x64 aom_highbd_dc_left_predictor_16x64_c
+
+void aom_highbd_dc_left_predictor_16x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x8 aom_highbd_dc_left_predictor_16x8_c
+
+void aom_highbd_dc_left_predictor_2x2_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_2x2 aom_highbd_dc_left_predictor_2x2_c
+
+void aom_highbd_dc_left_predictor_32x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x16 aom_highbd_dc_left_predictor_32x16_c
+
+void aom_highbd_dc_left_predictor_32x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x32 aom_highbd_dc_left_predictor_32x32_c
+
+void aom_highbd_dc_left_predictor_32x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x64 aom_highbd_dc_left_predictor_32x64_c
+
+void aom_highbd_dc_left_predictor_32x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_32x8 aom_highbd_dc_left_predictor_32x8_c
+
+void aom_highbd_dc_left_predictor_4x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_4x16 aom_highbd_dc_left_predictor_4x16_c
+
+void aom_highbd_dc_left_predictor_4x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x4 aom_highbd_dc_left_predictor_4x4_c
+
+void aom_highbd_dc_left_predictor_4x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x8 aom_highbd_dc_left_predictor_4x8_c
+
+void aom_highbd_dc_left_predictor_64x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x16 aom_highbd_dc_left_predictor_64x16_c
+
+void aom_highbd_dc_left_predictor_64x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x32 aom_highbd_dc_left_predictor_64x32_c
+
+void aom_highbd_dc_left_predictor_64x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x64 aom_highbd_dc_left_predictor_64x64_c
+
+void aom_highbd_dc_left_predictor_8x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x16 aom_highbd_dc_left_predictor_8x16_c
+
+void aom_highbd_dc_left_predictor_8x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x32 aom_highbd_dc_left_predictor_8x32_c
+
+void aom_highbd_dc_left_predictor_8x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x4 aom_highbd_dc_left_predictor_8x4_c
+
+void aom_highbd_dc_left_predictor_8x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x8 aom_highbd_dc_left_predictor_8x8_c
+
+void aom_highbd_dc_predictor_16x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x16 aom_highbd_dc_predictor_16x16_c
+
+void aom_highbd_dc_predictor_16x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x32 aom_highbd_dc_predictor_16x32_c
+
+void aom_highbd_dc_predictor_16x4_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x4 aom_highbd_dc_predictor_16x4_c
+
+void aom_highbd_dc_predictor_16x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x64 aom_highbd_dc_predictor_16x64_c
+
+void aom_highbd_dc_predictor_16x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x8 aom_highbd_dc_predictor_16x8_c
+
+void aom_highbd_dc_predictor_2x2_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_2x2 aom_highbd_dc_predictor_2x2_c
+
+void aom_highbd_dc_predictor_32x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x16 aom_highbd_dc_predictor_32x16_c
+
+void aom_highbd_dc_predictor_32x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x32 aom_highbd_dc_predictor_32x32_c
+
+void aom_highbd_dc_predictor_32x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x64 aom_highbd_dc_predictor_32x64_c
+
+void aom_highbd_dc_predictor_32x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_32x8 aom_highbd_dc_predictor_32x8_c
+
+void aom_highbd_dc_predictor_4x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_4x16 aom_highbd_dc_predictor_4x16_c
+
+void aom_highbd_dc_predictor_4x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x4 aom_highbd_dc_predictor_4x4_c
+
+void aom_highbd_dc_predictor_4x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x8 aom_highbd_dc_predictor_4x8_c
+
+void aom_highbd_dc_predictor_64x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x16 aom_highbd_dc_predictor_64x16_c
+
+void aom_highbd_dc_predictor_64x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x32 aom_highbd_dc_predictor_64x32_c
+
+void aom_highbd_dc_predictor_64x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x64 aom_highbd_dc_predictor_64x64_c
+
+void aom_highbd_dc_predictor_8x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x16 aom_highbd_dc_predictor_8x16_c
+
+void aom_highbd_dc_predictor_8x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x32 aom_highbd_dc_predictor_8x32_c
+
+void aom_highbd_dc_predictor_8x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x4 aom_highbd_dc_predictor_8x4_c
+
+void aom_highbd_dc_predictor_8x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x8 aom_highbd_dc_predictor_8x8_c
+
+void aom_highbd_dc_top_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x16 aom_highbd_dc_top_predictor_16x16_c
+
+void aom_highbd_dc_top_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x32 aom_highbd_dc_top_predictor_16x32_c
+
+void aom_highbd_dc_top_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x4 aom_highbd_dc_top_predictor_16x4_c
+
+void aom_highbd_dc_top_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x64 aom_highbd_dc_top_predictor_16x64_c
+
+void aom_highbd_dc_top_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x8 aom_highbd_dc_top_predictor_16x8_c
+
+void aom_highbd_dc_top_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_2x2 aom_highbd_dc_top_predictor_2x2_c
+
+void aom_highbd_dc_top_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x16 aom_highbd_dc_top_predictor_32x16_c
+
+void aom_highbd_dc_top_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x32 aom_highbd_dc_top_predictor_32x32_c
+
+void aom_highbd_dc_top_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x64 aom_highbd_dc_top_predictor_32x64_c
+
+void aom_highbd_dc_top_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_32x8 aom_highbd_dc_top_predictor_32x8_c
+
+void aom_highbd_dc_top_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_4x16 aom_highbd_dc_top_predictor_4x16_c
+
+void aom_highbd_dc_top_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x4 aom_highbd_dc_top_predictor_4x4_c
+
+void aom_highbd_dc_top_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x8 aom_highbd_dc_top_predictor_4x8_c
+
+void aom_highbd_dc_top_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x16 aom_highbd_dc_top_predictor_64x16_c
+
+void aom_highbd_dc_top_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x32 aom_highbd_dc_top_predictor_64x32_c
+
+void aom_highbd_dc_top_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x64 aom_highbd_dc_top_predictor_64x64_c
+
+void aom_highbd_dc_top_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x16 aom_highbd_dc_top_predictor_8x16_c
+
+void aom_highbd_dc_top_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x32 aom_highbd_dc_top_predictor_8x32_c
+
+void aom_highbd_dc_top_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x4 aom_highbd_dc_top_predictor_8x4_c
+
+void aom_highbd_dc_top_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x8 aom_highbd_dc_top_predictor_8x8_c
+
+void aom_highbd_h_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x16 aom_highbd_h_predictor_16x16_c
+
+void aom_highbd_h_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x32 aom_highbd_h_predictor_16x32_c
+
+void aom_highbd_h_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x4 aom_highbd_h_predictor_16x4_c
+
+void aom_highbd_h_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x64 aom_highbd_h_predictor_16x64_c
+
+void aom_highbd_h_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x8 aom_highbd_h_predictor_16x8_c
+
+void aom_highbd_h_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_2x2 aom_highbd_h_predictor_2x2_c
+
+void aom_highbd_h_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x16 aom_highbd_h_predictor_32x16_c
+
+void aom_highbd_h_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x32 aom_highbd_h_predictor_32x32_c
+
+void aom_highbd_h_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x64 aom_highbd_h_predictor_32x64_c
+
+void aom_highbd_h_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_32x8 aom_highbd_h_predictor_32x8_c
+
+void aom_highbd_h_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_4x16 aom_highbd_h_predictor_4x16_c
+
+void aom_highbd_h_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x4 aom_highbd_h_predictor_4x4_c
+
+void aom_highbd_h_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x8 aom_highbd_h_predictor_4x8_c
+
+void aom_highbd_h_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x16 aom_highbd_h_predictor_64x16_c
+
+void aom_highbd_h_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x32 aom_highbd_h_predictor_64x32_c
+
+void aom_highbd_h_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x64 aom_highbd_h_predictor_64x64_c
+
+void aom_highbd_h_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x16 aom_highbd_h_predictor_8x16_c
+
+void aom_highbd_h_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x32 aom_highbd_h_predictor_8x32_c
+
+void aom_highbd_h_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x4 aom_highbd_h_predictor_8x4_c
+
+void aom_highbd_h_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x8 aom_highbd_h_predictor_8x8_c
+
+void aom_highbd_lpf_horizontal_14_c(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_horizontal_14 aom_highbd_lpf_horizontal_14_c
+
+void aom_highbd_lpf_horizontal_14_dual_c(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limt1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+#define aom_highbd_lpf_horizontal_14_dual aom_highbd_lpf_horizontal_14_dual_c
+
+void aom_highbd_lpf_horizontal_4_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_4 aom_highbd_lpf_horizontal_4_c
+
+void aom_highbd_lpf_horizontal_4_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_4_dual aom_highbd_lpf_horizontal_4_dual_c
+
+void aom_highbd_lpf_horizontal_6_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_6 aom_highbd_lpf_horizontal_6_c
+
+void aom_highbd_lpf_horizontal_6_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_6_dual aom_highbd_lpf_horizontal_6_dual_c
+
+void aom_highbd_lpf_horizontal_8_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_8 aom_highbd_lpf_horizontal_8_c
+
+void aom_highbd_lpf_horizontal_8_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_8_dual aom_highbd_lpf_horizontal_8_dual_c
+
+void aom_highbd_lpf_vertical_14_c(uint16_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit,
+                                  const uint8_t* limit,
+                                  const uint8_t* thresh,
+                                  int bd);
+#define aom_highbd_lpf_vertical_14 aom_highbd_lpf_vertical_14_c
+
+void aom_highbd_lpf_vertical_14_dual_c(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit0,
+                                       const uint8_t* limit0,
+                                       const uint8_t* thresh0,
+                                       const uint8_t* blimit1,
+                                       const uint8_t* limit1,
+                                       const uint8_t* thresh1,
+                                       int bd);
+#define aom_highbd_lpf_vertical_14_dual aom_highbd_lpf_vertical_14_dual_c
+
+void aom_highbd_lpf_vertical_4_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_4 aom_highbd_lpf_vertical_4_c
+
+void aom_highbd_lpf_vertical_4_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_4_dual aom_highbd_lpf_vertical_4_dual_c
+
+void aom_highbd_lpf_vertical_6_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_6 aom_highbd_lpf_vertical_6_c
+
+void aom_highbd_lpf_vertical_6_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_6_dual aom_highbd_lpf_vertical_6_dual_c
+
+void aom_highbd_lpf_vertical_8_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_8 aom_highbd_lpf_vertical_8_c
+
+void aom_highbd_lpf_vertical_8_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_8_dual aom_highbd_lpf_vertical_8_dual_c
+
+void aom_highbd_paeth_predictor_16x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x16 aom_highbd_paeth_predictor_16x16_c
+
+void aom_highbd_paeth_predictor_16x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x32 aom_highbd_paeth_predictor_16x32_c
+
+void aom_highbd_paeth_predictor_16x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x4 aom_highbd_paeth_predictor_16x4_c
+
+void aom_highbd_paeth_predictor_16x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x64 aom_highbd_paeth_predictor_16x64_c
+
+void aom_highbd_paeth_predictor_16x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x8 aom_highbd_paeth_predictor_16x8_c
+
+void aom_highbd_paeth_predictor_2x2_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_2x2 aom_highbd_paeth_predictor_2x2_c
+
+void aom_highbd_paeth_predictor_32x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x16 aom_highbd_paeth_predictor_32x16_c
+
+void aom_highbd_paeth_predictor_32x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x32 aom_highbd_paeth_predictor_32x32_c
+
+void aom_highbd_paeth_predictor_32x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x64 aom_highbd_paeth_predictor_32x64_c
+
+void aom_highbd_paeth_predictor_32x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_32x8 aom_highbd_paeth_predictor_32x8_c
+
+void aom_highbd_paeth_predictor_4x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_4x16 aom_highbd_paeth_predictor_4x16_c
+
+void aom_highbd_paeth_predictor_4x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x4 aom_highbd_paeth_predictor_4x4_c
+
+void aom_highbd_paeth_predictor_4x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x8 aom_highbd_paeth_predictor_4x8_c
+
+void aom_highbd_paeth_predictor_64x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x16 aom_highbd_paeth_predictor_64x16_c
+
+void aom_highbd_paeth_predictor_64x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x32 aom_highbd_paeth_predictor_64x32_c
+
+void aom_highbd_paeth_predictor_64x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x64 aom_highbd_paeth_predictor_64x64_c
+
+void aom_highbd_paeth_predictor_8x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x16 aom_highbd_paeth_predictor_8x16_c
+
+void aom_highbd_paeth_predictor_8x32_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x32 aom_highbd_paeth_predictor_8x32_c
+
+void aom_highbd_paeth_predictor_8x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x4 aom_highbd_paeth_predictor_8x4_c
+
+void aom_highbd_paeth_predictor_8x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x8 aom_highbd_paeth_predictor_8x8_c
+
+void aom_highbd_smooth_h_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x16 \
+  aom_highbd_smooth_h_predictor_16x16_c
+
+void aom_highbd_smooth_h_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x32 \
+  aom_highbd_smooth_h_predictor_16x32_c
+
+void aom_highbd_smooth_h_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x4 aom_highbd_smooth_h_predictor_16x4_c
+
+void aom_highbd_smooth_h_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x64 \
+  aom_highbd_smooth_h_predictor_16x64_c
+
+void aom_highbd_smooth_h_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x8 aom_highbd_smooth_h_predictor_16x8_c
+
+void aom_highbd_smooth_h_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_2x2 aom_highbd_smooth_h_predictor_2x2_c
+
+void aom_highbd_smooth_h_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x16 \
+  aom_highbd_smooth_h_predictor_32x16_c
+
+void aom_highbd_smooth_h_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x32 \
+  aom_highbd_smooth_h_predictor_32x32_c
+
+void aom_highbd_smooth_h_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x64 \
+  aom_highbd_smooth_h_predictor_32x64_c
+
+void aom_highbd_smooth_h_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_32x8 aom_highbd_smooth_h_predictor_32x8_c
+
+void aom_highbd_smooth_h_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_4x16 aom_highbd_smooth_h_predictor_4x16_c
+
+void aom_highbd_smooth_h_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x4 aom_highbd_smooth_h_predictor_4x4_c
+
+void aom_highbd_smooth_h_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x8 aom_highbd_smooth_h_predictor_4x8_c
+
+void aom_highbd_smooth_h_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x16 \
+  aom_highbd_smooth_h_predictor_64x16_c
+
+void aom_highbd_smooth_h_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x32 \
+  aom_highbd_smooth_h_predictor_64x32_c
+
+void aom_highbd_smooth_h_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x64 \
+  aom_highbd_smooth_h_predictor_64x64_c
+
+void aom_highbd_smooth_h_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x16 aom_highbd_smooth_h_predictor_8x16_c
+
+void aom_highbd_smooth_h_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x32 aom_highbd_smooth_h_predictor_8x32_c
+
+void aom_highbd_smooth_h_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x4 aom_highbd_smooth_h_predictor_8x4_c
+
+void aom_highbd_smooth_h_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x8 aom_highbd_smooth_h_predictor_8x8_c
+
+void aom_highbd_smooth_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x16 aom_highbd_smooth_predictor_16x16_c
+
+void aom_highbd_smooth_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x32 aom_highbd_smooth_predictor_16x32_c
+
+void aom_highbd_smooth_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x4 aom_highbd_smooth_predictor_16x4_c
+
+void aom_highbd_smooth_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x64 aom_highbd_smooth_predictor_16x64_c
+
+void aom_highbd_smooth_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x8 aom_highbd_smooth_predictor_16x8_c
+
+void aom_highbd_smooth_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_2x2 aom_highbd_smooth_predictor_2x2_c
+
+void aom_highbd_smooth_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x16 aom_highbd_smooth_predictor_32x16_c
+
+void aom_highbd_smooth_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x32 aom_highbd_smooth_predictor_32x32_c
+
+void aom_highbd_smooth_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x64 aom_highbd_smooth_predictor_32x64_c
+
+void aom_highbd_smooth_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_32x8 aom_highbd_smooth_predictor_32x8_c
+
+void aom_highbd_smooth_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_4x16 aom_highbd_smooth_predictor_4x16_c
+
+void aom_highbd_smooth_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x4 aom_highbd_smooth_predictor_4x4_c
+
+void aom_highbd_smooth_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x8 aom_highbd_smooth_predictor_4x8_c
+
+void aom_highbd_smooth_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x16 aom_highbd_smooth_predictor_64x16_c
+
+void aom_highbd_smooth_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x32 aom_highbd_smooth_predictor_64x32_c
+
+void aom_highbd_smooth_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x64 aom_highbd_smooth_predictor_64x64_c
+
+void aom_highbd_smooth_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x16 aom_highbd_smooth_predictor_8x16_c
+
+void aom_highbd_smooth_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x32 aom_highbd_smooth_predictor_8x32_c
+
+void aom_highbd_smooth_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x4 aom_highbd_smooth_predictor_8x4_c
+
+void aom_highbd_smooth_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x8 aom_highbd_smooth_predictor_8x8_c
+
+void aom_highbd_smooth_v_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x16 \
+  aom_highbd_smooth_v_predictor_16x16_c
+
+void aom_highbd_smooth_v_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x32 \
+  aom_highbd_smooth_v_predictor_16x32_c
+
+void aom_highbd_smooth_v_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x4 aom_highbd_smooth_v_predictor_16x4_c
+
+void aom_highbd_smooth_v_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x64 \
+  aom_highbd_smooth_v_predictor_16x64_c
+
+void aom_highbd_smooth_v_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x8 aom_highbd_smooth_v_predictor_16x8_c
+
+void aom_highbd_smooth_v_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_2x2 aom_highbd_smooth_v_predictor_2x2_c
+
+void aom_highbd_smooth_v_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x16 \
+  aom_highbd_smooth_v_predictor_32x16_c
+
+void aom_highbd_smooth_v_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x32 \
+  aom_highbd_smooth_v_predictor_32x32_c
+
+void aom_highbd_smooth_v_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x64 \
+  aom_highbd_smooth_v_predictor_32x64_c
+
+void aom_highbd_smooth_v_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_32x8 aom_highbd_smooth_v_predictor_32x8_c
+
+void aom_highbd_smooth_v_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_4x16 aom_highbd_smooth_v_predictor_4x16_c
+
+void aom_highbd_smooth_v_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x4 aom_highbd_smooth_v_predictor_4x4_c
+
+void aom_highbd_smooth_v_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x8 aom_highbd_smooth_v_predictor_4x8_c
+
+void aom_highbd_smooth_v_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x16 \
+  aom_highbd_smooth_v_predictor_64x16_c
+
+void aom_highbd_smooth_v_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x32 \
+  aom_highbd_smooth_v_predictor_64x32_c
+
+void aom_highbd_smooth_v_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x64 \
+  aom_highbd_smooth_v_predictor_64x64_c
+
+void aom_highbd_smooth_v_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x16 aom_highbd_smooth_v_predictor_8x16_c
+
+void aom_highbd_smooth_v_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x32 aom_highbd_smooth_v_predictor_8x32_c
+
+void aom_highbd_smooth_v_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x4 aom_highbd_smooth_v_predictor_8x4_c
+
+void aom_highbd_smooth_v_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x8 aom_highbd_smooth_v_predictor_8x8_c
+
+void aom_highbd_v_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x16 aom_highbd_v_predictor_16x16_c
+
+void aom_highbd_v_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x32 aom_highbd_v_predictor_16x32_c
+
+void aom_highbd_v_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x4 aom_highbd_v_predictor_16x4_c
+
+void aom_highbd_v_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x64 aom_highbd_v_predictor_16x64_c
+
+void aom_highbd_v_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x8 aom_highbd_v_predictor_16x8_c
+
+void aom_highbd_v_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_2x2 aom_highbd_v_predictor_2x2_c
+
+void aom_highbd_v_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x16 aom_highbd_v_predictor_32x16_c
+
+void aom_highbd_v_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x32 aom_highbd_v_predictor_32x32_c
+
+void aom_highbd_v_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x64 aom_highbd_v_predictor_32x64_c
+
+void aom_highbd_v_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_32x8 aom_highbd_v_predictor_32x8_c
+
+void aom_highbd_v_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_4x16 aom_highbd_v_predictor_4x16_c
+
+void aom_highbd_v_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x4 aom_highbd_v_predictor_4x4_c
+
+void aom_highbd_v_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x8 aom_highbd_v_predictor_4x8_c
+
+void aom_highbd_v_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x16 aom_highbd_v_predictor_64x16_c
+
+void aom_highbd_v_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x32 aom_highbd_v_predictor_64x32_c
+
+void aom_highbd_v_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x64 aom_highbd_v_predictor_64x64_c
+
+void aom_highbd_v_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x16 aom_highbd_v_predictor_8x16_c
+
+void aom_highbd_v_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x32 aom_highbd_v_predictor_8x32_c
+
+void aom_highbd_v_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x4 aom_highbd_v_predictor_8x4_c
+
+void aom_highbd_v_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x8 aom_highbd_v_predictor_8x8_c
+
+void aom_lowbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                    uint32_t dst_stride,
+                                    const CONV_BUF_TYPE* src0,
+                                    uint32_t src0_stride,
+                                    const CONV_BUF_TYPE* src1,
+                                    uint32_t src1_stride,
+                                    const uint8_t* mask,
+                                    uint32_t mask_stride,
+                                    int w,
+                                    int h,
+                                    int subx,
+                                    int suby,
+                                    ConvolveParams* conv_params);
+void aom_lowbd_blend_a64_d16_mask_neon(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const CONV_BUF_TYPE* src0,
+                                       uint32_t src0_stride,
+                                       const CONV_BUF_TYPE* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       uint32_t mask_stride,
+                                       int w,
+                                       int h,
+                                       int subx,
+                                       int suby,
+                                       ConvolveParams* conv_params);
+RTCD_EXTERN void (*aom_lowbd_blend_a64_d16_mask)(uint8_t* dst,
+                                                 uint32_t dst_stride,
+                                                 const CONV_BUF_TYPE* src0,
+                                                 uint32_t src0_stride,
+                                                 const CONV_BUF_TYPE* src1,
+                                                 uint32_t src1_stride,
+                                                 const uint8_t* mask,
+                                                 uint32_t mask_stride,
+                                                 int w,
+                                                 int h,
+                                                 int subx,
+                                                 int suby,
+                                                 ConvolveParams* conv_params);
+
+void aom_lpf_horizontal_14_c(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_horizontal_14 aom_lpf_horizontal_14_c
+
+void aom_lpf_horizontal_14_dual_c(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_horizontal_14_dual aom_lpf_horizontal_14_dual_c
+
+void aom_lpf_horizontal_4_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_c
+
+void aom_lpf_horizontal_4_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
+
+void aom_lpf_horizontal_6_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_6_neon(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_6)(uint8_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit,
+                                         const uint8_t* limit,
+                                         const uint8_t* thresh);
+
+void aom_lpf_horizontal_6_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_6_dual aom_lpf_horizontal_6_dual_c
+
+void aom_lpf_horizontal_8_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_8_neon(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_8)(uint8_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit,
+                                         const uint8_t* limit,
+                                         const uint8_t* thresh);
+
+void aom_lpf_horizontal_8_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
+
+void aom_lpf_vertical_14_c(uint8_t* s,
+                           int pitch,
+                           const uint8_t* blimit,
+                           const uint8_t* limit,
+                           const uint8_t* thresh);
+void aom_lpf_vertical_14_neon(uint8_t* s,
+                              int pitch,
+                              const uint8_t* blimit,
+                              const uint8_t* limit,
+                              const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_14)(uint8_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit,
+                                        const uint8_t* limit,
+                                        const uint8_t* thresh);
+
+void aom_lpf_vertical_14_dual_c(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit0,
+                                const uint8_t* limit0,
+                                const uint8_t* thresh0,
+                                const uint8_t* blimit1,
+                                const uint8_t* limit1,
+                                const uint8_t* thresh1);
+#define aom_lpf_vertical_14_dual aom_lpf_vertical_14_dual_c
+
+void aom_lpf_vertical_4_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_4 aom_lpf_vertical_4_c
+
+void aom_lpf_vertical_4_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
+
+void aom_lpf_vertical_6_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_6 aom_lpf_vertical_6_c
+
+void aom_lpf_vertical_6_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_6_dual aom_lpf_vertical_6_dual_c
+
+void aom_lpf_vertical_8_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_8_neon(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_8)(uint8_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh);
+
+void aom_lpf_vertical_8_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
+
+void aom_paeth_predictor_16x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
+
+void aom_paeth_predictor_16x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
+
+void aom_paeth_predictor_16x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x4 aom_paeth_predictor_16x4_c
+
+void aom_paeth_predictor_16x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x64 aom_paeth_predictor_16x64_c
+
+void aom_paeth_predictor_16x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
+
+void aom_paeth_predictor_2x2_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
+
+void aom_paeth_predictor_32x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
+
+void aom_paeth_predictor_32x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
+
+void aom_paeth_predictor_32x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x64 aom_paeth_predictor_32x64_c
+
+void aom_paeth_predictor_32x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_32x8 aom_paeth_predictor_32x8_c
+
+void aom_paeth_predictor_4x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_4x16 aom_paeth_predictor_4x16_c
+
+void aom_paeth_predictor_4x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
+
+void aom_paeth_predictor_4x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
+
+void aom_paeth_predictor_64x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x16 aom_paeth_predictor_64x16_c
+
+void aom_paeth_predictor_64x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x32 aom_paeth_predictor_64x32_c
+
+void aom_paeth_predictor_64x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x64 aom_paeth_predictor_64x64_c
+
+void aom_paeth_predictor_8x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
+
+void aom_paeth_predictor_8x32_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x32 aom_paeth_predictor_8x32_c
+
+void aom_paeth_predictor_8x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
+
+void aom_paeth_predictor_8x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
+
+void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
+
+void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
+
+void aom_smooth_h_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x4 aom_smooth_h_predictor_16x4_c
+
+void aom_smooth_h_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x64 aom_smooth_h_predictor_16x64_c
+
+void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
+
+void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
+
+void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
+
+void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
+
+void aom_smooth_h_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x64 aom_smooth_h_predictor_32x64_c
+
+void aom_smooth_h_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_32x8 aom_smooth_h_predictor_32x8_c
+
+void aom_smooth_h_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_4x16 aom_smooth_h_predictor_4x16_c
+
+void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
+
+void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
+
+void aom_smooth_h_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x16 aom_smooth_h_predictor_64x16_c
+
+void aom_smooth_h_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x32 aom_smooth_h_predictor_64x32_c
+
+void aom_smooth_h_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x64 aom_smooth_h_predictor_64x64_c
+
+void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
+
+void aom_smooth_h_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x32 aom_smooth_h_predictor_8x32_c
+
+void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
+
+void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
+
+void aom_smooth_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
+
+void aom_smooth_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
+
+void aom_smooth_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x4 aom_smooth_predictor_16x4_c
+
+void aom_smooth_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x64 aom_smooth_predictor_16x64_c
+
+void aom_smooth_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
+
+void aom_smooth_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
+
+void aom_smooth_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
+
+void aom_smooth_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
+
+void aom_smooth_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x64 aom_smooth_predictor_32x64_c
+
+void aom_smooth_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_32x8 aom_smooth_predictor_32x8_c
+
+void aom_smooth_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_4x16 aom_smooth_predictor_4x16_c
+
+void aom_smooth_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
+
+void aom_smooth_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
+
+void aom_smooth_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x16 aom_smooth_predictor_64x16_c
+
+void aom_smooth_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x32 aom_smooth_predictor_64x32_c
+
+void aom_smooth_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x64 aom_smooth_predictor_64x64_c
+
+void aom_smooth_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
+
+void aom_smooth_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x32 aom_smooth_predictor_8x32_c
+
+void aom_smooth_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
+
+void aom_smooth_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
+
+void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
+
+void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
+
+void aom_smooth_v_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x4 aom_smooth_v_predictor_16x4_c
+
+void aom_smooth_v_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x64 aom_smooth_v_predictor_16x64_c
+
+void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
+
+void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
+
+void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
+
+void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
+
+void aom_smooth_v_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x64 aom_smooth_v_predictor_32x64_c
+
+void aom_smooth_v_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_32x8 aom_smooth_v_predictor_32x8_c
+
+void aom_smooth_v_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_4x16 aom_smooth_v_predictor_4x16_c
+
+void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
+
+void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
+
+void aom_smooth_v_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x16 aom_smooth_v_predictor_64x16_c
+
+void aom_smooth_v_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x32 aom_smooth_v_predictor_64x32_c
+
+void aom_smooth_v_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x64 aom_smooth_v_predictor_64x64_c
+
+void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
+
+void aom_smooth_v_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x32 aom_smooth_v_predictor_8x32_c
+
+void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
+
+void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
+
+void aom_v_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x16_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
+
+void aom_v_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x4 aom_v_predictor_16x4_c
+
+void aom_v_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x64 aom_v_predictor_16x64_c
+
+void aom_v_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
+
+void aom_v_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
+
+void aom_v_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
+
+void aom_v_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x32_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x64 aom_v_predictor_32x64_c
+
+void aom_v_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_32x8 aom_v_predictor_32x8_c
+
+void aom_v_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_4x16 aom_v_predictor_4x16_c
+
+void aom_v_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x4_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_4x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_v_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
+
+void aom_v_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x16 aom_v_predictor_64x16_c
+
+void aom_v_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x32 aom_v_predictor_64x32_c
+
+void aom_v_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x64 aom_v_predictor_64x64_c
+
+void aom_v_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
+
+void aom_v_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x32 aom_v_predictor_8x32_c
+
+void aom_v_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
+
+void aom_v_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x8_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_8x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void av1_round_shift_array_c(int32_t* arr, int size, int bit);
+void av1_round_shift_array_neon(int32_t* arr, int size, int bit);
+RTCD_EXTERN void (*av1_round_shift_array)(int32_t* arr, int size, int bit);
+
+void aom_dsp_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+#include "aom_ports/arm.h"
+static void setup_rtcd_internal(void) {
+  int flags = arm_cpu_caps();
+
+  (void)flags;
+
+  aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_c;
+  if (flags & HAS_NEON)
+    aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_neon;
+  aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_c;
+  if (flags & HAS_NEON)
+    aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_neon;
+  aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_c;
+  if (flags & HAS_NEON)
+    aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_neon;
+  aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_c;
+  if (flags & HAS_NEON)
+    aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_neon;
+  aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_c;
+  if (flags & HAS_NEON)
+    aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_neon;
+  aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_c;
+  if (flags & HAS_NEON)
+    aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_neon;
+  aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_c;
+  if (flags & HAS_NEON)
+    aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_neon;
+  aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_c;
+  if (flags & HAS_NEON)
+    aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_neon;
+  aom_dc_predictor_16x16 = aom_dc_predictor_16x16_c;
+  if (flags & HAS_NEON)
+    aom_dc_predictor_16x16 = aom_dc_predictor_16x16_neon;
+  aom_dc_predictor_32x32 = aom_dc_predictor_32x32_c;
+  if (flags & HAS_NEON)
+    aom_dc_predictor_32x32 = aom_dc_predictor_32x32_neon;
+  aom_dc_predictor_4x4 = aom_dc_predictor_4x4_c;
+  if (flags & HAS_NEON)
+    aom_dc_predictor_4x4 = aom_dc_predictor_4x4_neon;
+  aom_dc_predictor_8x8 = aom_dc_predictor_8x8_c;
+  if (flags & HAS_NEON)
+    aom_dc_predictor_8x8 = aom_dc_predictor_8x8_neon;
+  aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_c;
+  if (flags & HAS_NEON)
+    aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_neon;
+  aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_c;
+  if (flags & HAS_NEON)
+    aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_neon;
+  aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_c;
+  if (flags & HAS_NEON)
+    aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_neon;
+  aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_c;
+  if (flags & HAS_NEON)
+    aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_neon;
+  aom_h_predictor_16x16 = aom_h_predictor_16x16_c;
+  if (flags & HAS_NEON)
+    aom_h_predictor_16x16 = aom_h_predictor_16x16_neon;
+  aom_h_predictor_32x32 = aom_h_predictor_32x32_c;
+  if (flags & HAS_NEON)
+    aom_h_predictor_32x32 = aom_h_predictor_32x32_neon;
+  aom_h_predictor_4x4 = aom_h_predictor_4x4_c;
+  if (flags & HAS_NEON)
+    aom_h_predictor_4x4 = aom_h_predictor_4x4_neon;
+  aom_h_predictor_8x8 = aom_h_predictor_8x8_c;
+  if (flags & HAS_NEON)
+    aom_h_predictor_8x8 = aom_h_predictor_8x8_neon;
+  aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_c;
+  if (flags & HAS_NEON)
+    aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_neon;
+  aom_lpf_horizontal_6 = aom_lpf_horizontal_6_c;
+  if (flags & HAS_NEON)
+    aom_lpf_horizontal_6 = aom_lpf_horizontal_6_neon;
+  aom_lpf_horizontal_8 = aom_lpf_horizontal_8_c;
+  if (flags & HAS_NEON)
+    aom_lpf_horizontal_8 = aom_lpf_horizontal_8_neon;
+  aom_lpf_vertical_14 = aom_lpf_vertical_14_c;
+  if (flags & HAS_NEON)
+    aom_lpf_vertical_14 = aom_lpf_vertical_14_neon;
+  aom_lpf_vertical_8 = aom_lpf_vertical_8_c;
+  if (flags & HAS_NEON)
+    aom_lpf_vertical_8 = aom_lpf_vertical_8_neon;
+  aom_v_predictor_16x16 = aom_v_predictor_16x16_c;
+  if (flags & HAS_NEON)
+    aom_v_predictor_16x16 = aom_v_predictor_16x16_neon;
+  aom_v_predictor_32x32 = aom_v_predictor_32x32_c;
+  if (flags & HAS_NEON)
+    aom_v_predictor_32x32 = aom_v_predictor_32x32_neon;
+  aom_v_predictor_4x4 = aom_v_predictor_4x4_c;
+  if (flags & HAS_NEON)
+    aom_v_predictor_4x4 = aom_v_predictor_4x4_neon;
+  aom_v_predictor_8x8 = aom_v_predictor_8x8_c;
+  if (flags & HAS_NEON)
+    aom_v_predictor_8x8 = aom_v_predictor_8x8_neon;
+  av1_round_shift_array = av1_round_shift_array_c;
+  if (flags & HAS_NEON)
+    av1_round_shift_array = av1_round_shift_array_neon;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_scale_rtcd.h
similarity index 70%
copy from third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
copy to third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_scale_rtcd.h
index fbf3bde..ce01c830 100644
--- a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
+++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_scale_rtcd.h
@@ -1,3 +1,4 @@
+// This file is generated. Do not edit.
 #ifndef AOM_SCALE_RTCD_H_
 #define AOM_SCALE_RTCD_H_
 
@@ -13,13 +14,15 @@
 extern "C" {
 #endif
 
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                const int num_planes);
 #define aom_extend_frame_borders aom_extend_frame_borders_c
 
 void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
 #define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
 
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf,
+                                      const int num_planes);
 #define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
 
 void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
@@ -69,7 +72,8 @@
 #define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
 
 void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
+                           struct yv12_buffer_config* dst_bc,
+                           const int num_planes);
 #define aom_yv12_copy_frame aom_yv12_copy_frame_c
 
 void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
@@ -84,15 +88,42 @@
                        struct yv12_buffer_config* dst_ybc);
 #define aom_yv12_copy_y aom_yv12_copy_y_c
 
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                     const int num_planes);
 #define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
 
+void aom_yv12_partial_copy_u_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_u aom_yv12_partial_copy_u_c
+
+void aom_yv12_partial_copy_v_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_v aom_yv12_partial_copy_v_c
+
+void aom_yv12_partial_copy_y_c(const struct yv12_buffer_config* src_ybc,
+                               struct yv12_buffer_config* dst_ybc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_y aom_yv12_partial_copy_y_c
+
 void aom_scale_rtcd(void);
 
+#include "config/aom_config.h"
+
 #ifdef RTCD_C
-#include "aom_ports/x86.h"
+#include "aom_ports/arm.h"
 static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
+  int flags = arm_cpu_caps();
 
   (void)flags;
 }
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/av1_rtcd.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/av1_rtcd.h
new file mode 100644
index 0000000..7641ab3
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/av1_rtcd.h
@@ -0,0 +1,1171 @@
+// This file is generated. Do not edit.
+#ifndef AV1_RTCD_H_
+#define AV1_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * AV1
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/txfm_common.h"
+#include "av1/common/av1_txfm.h"
+#include "av1/common/common.h"
+#include "av1/common/convolve.h"
+#include "av1/common/enums.h"
+#include "av1/common/filter.h"
+#include "av1/common/odintrin.h"
+#include "av1/common/quant_common.h"
+#include "av1/common/restoration.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct txfm_param;
+struct aom_variance_vtable;
+struct search_site_config;
+struct yv12_buffer_config;
+
+/* Function pointers return by CfL functions */
+typedef void (*cfl_subsample_lbd_fn)(const uint8_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subsample_hbd_fn)(const uint16_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subtract_average_fn)(const uint16_t* src, int16_t* dst);
+
+typedef void (*cfl_predict_lbd_fn)(const int16_t* src,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3);
+
+typedef void (*cfl_predict_hbd_fn)(const int16_t* src,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3,
+                                   int bd);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void apply_selfguided_restoration_c(const uint8_t* dat,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    int eps,
+                                    const int* xqd,
+                                    uint8_t* dst,
+                                    int dst_stride,
+                                    int32_t* tmpbuf,
+                                    int bit_depth,
+                                    int highbd);
+#define apply_selfguided_restoration apply_selfguided_restoration_c
+
+void av1_build_compound_diffwtd_mask_c(uint8_t* mask,
+                                       DIFFWTD_MASK_TYPE mask_type,
+                                       const uint8_t* src0,
+                                       int src0_stride,
+                                       const uint8_t* src1,
+                                       int src1_stride,
+                                       int h,
+                                       int w);
+#define av1_build_compound_diffwtd_mask av1_build_compound_diffwtd_mask_c
+
+void av1_build_compound_diffwtd_mask_d16_c(uint8_t* mask,
+                                           DIFFWTD_MASK_TYPE mask_type,
+                                           const CONV_BUF_TYPE* src0,
+                                           int src0_stride,
+                                           const CONV_BUF_TYPE* src1,
+                                           int src1_stride,
+                                           int h,
+                                           int w,
+                                           ConvolveParams* conv_params,
+                                           int bd);
+#define av1_build_compound_diffwtd_mask_d16 \
+  av1_build_compound_diffwtd_mask_d16_c
+
+void av1_build_compound_diffwtd_mask_highbd_c(uint8_t* mask,
+                                              DIFFWTD_MASK_TYPE mask_type,
+                                              const uint8_t* src0,
+                                              int src0_stride,
+                                              const uint8_t* src1,
+                                              int src1_stride,
+                                              int h,
+                                              int w,
+                                              int bd);
+#define av1_build_compound_diffwtd_mask_highbd \
+  av1_build_compound_diffwtd_mask_highbd_c
+
+void av1_convolve_2d_copy_sr_c(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_neon(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_copy_sr)(const uint8_t* src,
+                                            int src_stride,
+                                            uint8_t* dst,
+                                            int dst_stride,
+                                            int w,
+                                            int h,
+                                            InterpFilterParams* filter_params_x,
+                                            InterpFilterParams* filter_params_y,
+                                            const int subpel_x_q4,
+                                            const int subpel_y_q4,
+                                            ConvolveParams* conv_params);
+
+void av1_convolve_2d_scale_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_qn,
+                             const int x_step_qn,
+                             const int subpel_y_q4,
+                             const int y_step_qn,
+                             ConvolveParams* conv_params);
+#define av1_convolve_2d_scale av1_convolve_2d_scale_c
+
+void av1_convolve_2d_sr_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_convolve_2d_sr_neon(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_sr)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_convolve_horiz_rs_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             const int16_t* x_filters,
+                             int x0_qn,
+                             int x_step_qn);
+#define av1_convolve_horiz_rs av1_convolve_horiz_rs_c
+
+void av1_convolve_x_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_x_sr_neon(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_x_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_convolve_y_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_y_sr_neon(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_y_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_dr_prediction_z1_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z1 av1_dr_prediction_z1_c
+
+void av1_dr_prediction_z2_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z2 av1_dr_prediction_z2_c
+
+void av1_dr_prediction_z3_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z3 av1_dr_prediction_z3_c
+
+void av1_filter_intra_edge_c(uint8_t* p, int sz, int strength);
+#define av1_filter_intra_edge av1_filter_intra_edge_c
+
+void av1_filter_intra_edge_high_c(uint16_t* p, int sz, int strength);
+#define av1_filter_intra_edge_high av1_filter_intra_edge_high_c
+
+void av1_filter_intra_predictor_c(uint8_t* dst,
+                                  ptrdiff_t stride,
+                                  TX_SIZE tx_size,
+                                  const uint8_t* above,
+                                  const uint8_t* left,
+                                  int mode);
+#define av1_filter_intra_predictor av1_filter_intra_predictor_c
+
+void av1_highbd_convolve8_c(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h,
+                            int bps);
+#define av1_highbd_convolve8 av1_highbd_convolve8_c
+
+void av1_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define av1_highbd_convolve8_horiz av1_highbd_convolve8_horiz_c
+
+void av1_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define av1_highbd_convolve8_vert av1_highbd_convolve8_vert_c
+
+void av1_highbd_convolve_2d_copy_sr_c(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+#define av1_highbd_convolve_2d_copy_sr av1_highbd_convolve_2d_copy_sr_c
+
+void av1_highbd_convolve_2d_scale_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int x_step_qn,
+                                    const int subpel_y_q4,
+                                    const int y_step_qn,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+#define av1_highbd_convolve_2d_scale av1_highbd_convolve_2d_scale_c
+
+void av1_highbd_convolve_2d_sr_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_convolve_2d_sr av1_highbd_convolve_2d_sr_c
+
+void av1_highbd_convolve_avg_c(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve_avg av1_highbd_convolve_avg_c
+
+void av1_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define av1_highbd_convolve_copy av1_highbd_convolve_copy_c
+
+void av1_highbd_convolve_horiz_rs_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    const int16_t* x_filters,
+                                    int x0_qn,
+                                    int x_step_qn,
+                                    int bd);
+#define av1_highbd_convolve_horiz_rs av1_highbd_convolve_horiz_rs_c
+
+void av1_highbd_convolve_x_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_x_sr av1_highbd_convolve_x_sr_c
+
+void av1_highbd_convolve_y_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_y_sr av1_highbd_convolve_y_sr_c
+
+void av1_highbd_dr_prediction_z1_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z1 av1_highbd_dr_prediction_z1_c
+
+void av1_highbd_dr_prediction_z2_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z2 av1_highbd_dr_prediction_z2_c
+
+void av1_highbd_dr_prediction_z3_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z3 av1_highbd_dr_prediction_z3_c
+
+void av1_highbd_iwht4x4_16_add_c(const tran_low_t* input,
+                                 uint8_t* dest,
+                                 int dest_stride,
+                                 int bd);
+#define av1_highbd_iwht4x4_16_add av1_highbd_iwht4x4_16_add_c
+
+void av1_highbd_iwht4x4_1_add_c(const tran_low_t* input,
+                                uint8_t* dest,
+                                int dest_stride,
+                                int bd);
+#define av1_highbd_iwht4x4_1_add av1_highbd_iwht4x4_1_add_c
+
+void av1_highbd_jnt_convolve_2d_c(const uint16_t* src,
+                                  int src_stride,
+                                  uint16_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params,
+                                  int bd);
+#define av1_highbd_jnt_convolve_2d av1_highbd_jnt_convolve_2d_c
+
+void av1_highbd_jnt_convolve_2d_copy_c(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+#define av1_highbd_jnt_convolve_2d_copy av1_highbd_jnt_convolve_2d_copy_c
+
+void av1_highbd_jnt_convolve_x_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_x av1_highbd_jnt_convolve_x_c
+
+void av1_highbd_jnt_convolve_y_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_y av1_highbd_jnt_convolve_y_c
+
+void av1_highbd_warp_affine_c(const int32_t* mat,
+                              const uint16_t* ref,
+                              int width,
+                              int height,
+                              int stride,
+                              uint16_t* pred,
+                              int p_col,
+                              int p_row,
+                              int p_width,
+                              int p_height,
+                              int p_stride,
+                              int subsampling_x,
+                              int subsampling_y,
+                              int bd,
+                              ConvolveParams* conv_params,
+                              int16_t alpha,
+                              int16_t beta,
+                              int16_t gamma,
+                              int16_t delta);
+#define av1_highbd_warp_affine av1_highbd_warp_affine_c
+
+void av1_highbd_wiener_convolve_add_src_c(const uint8_t* src,
+                                          ptrdiff_t src_stride,
+                                          uint8_t* dst,
+                                          ptrdiff_t dst_stride,
+                                          const int16_t* filter_x,
+                                          int x_step_q4,
+                                          const int16_t* filter_y,
+                                          int y_step_q4,
+                                          int w,
+                                          int h,
+                                          const ConvolveParams* conv_params,
+                                          int bps);
+#define av1_highbd_wiener_convolve_add_src av1_highbd_wiener_convolve_add_src_c
+
+void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x16 av1_inv_txfm2d_add_16x16_c
+
+void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
+
+void av1_inv_txfm2d_add_16x4_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x4 av1_inv_txfm2d_add_16x4_c
+
+void av1_inv_txfm2d_add_16x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x64 av1_inv_txfm2d_add_16x64_c
+
+void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
+
+void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
+
+void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x32 av1_inv_txfm2d_add_32x32_c
+
+void av1_inv_txfm2d_add_32x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x64 av1_inv_txfm2d_add_32x64_c
+
+void av1_inv_txfm2d_add_32x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_32x8 av1_inv_txfm2d_add_32x8_c
+
+void av1_inv_txfm2d_add_4x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_4x16 av1_inv_txfm2d_add_4x16_c
+
+void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x4 av1_inv_txfm2d_add_4x4_c
+
+void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
+
+void av1_inv_txfm2d_add_64x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x16 av1_inv_txfm2d_add_64x16_c
+
+void av1_inv_txfm2d_add_64x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x32 av1_inv_txfm2d_add_64x32_c
+
+void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
+
+void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
+
+void av1_inv_txfm2d_add_8x32_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x32 av1_inv_txfm2d_add_8x32_c
+
+void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
+
+void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x8 av1_inv_txfm2d_add_8x8_c
+
+void av1_inv_txfm_add_c(const tran_low_t* dqcoeff,
+                        uint8_t* dst,
+                        int stride,
+                        const TxfmParam* txfm_param);
+#define av1_inv_txfm_add av1_inv_txfm_add_c
+
+void av1_jnt_convolve_2d_c(const uint8_t* src,
+                           int src_stride,
+                           uint8_t* dst,
+                           int dst_stride,
+                           int w,
+                           int h,
+                           InterpFilterParams* filter_params_x,
+                           InterpFilterParams* filter_params_y,
+                           const int subpel_x_q4,
+                           const int subpel_y_q4,
+                           ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_neon(const uint8_t* src,
+                              int src_stride,
+                              uint8_t* dst,
+                              int dst_stride,
+                              int w,
+                              int h,
+                              InterpFilterParams* filter_params_x,
+                              InterpFilterParams* filter_params_y,
+                              const int subpel_x_q4,
+                              const int subpel_y_q4,
+                              ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d)(const uint8_t* src,
+                                        int src_stride,
+                                        uint8_t* dst,
+                                        int dst_stride,
+                                        int w,
+                                        int h,
+                                        InterpFilterParams* filter_params_x,
+                                        InterpFilterParams* filter_params_y,
+                                        const int subpel_x_q4,
+                                        const int subpel_y_q4,
+                                        ConvolveParams* conv_params);
+
+void av1_jnt_convolve_2d_copy_c(const uint8_t* src,
+                                int src_stride,
+                                uint8_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_neon(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d_copy)(
+    const uint8_t* src,
+    int src_stride,
+    uint8_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params);
+
+void av1_jnt_convolve_x_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_x_neon(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_x)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_jnt_convolve_y_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_y_neon(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_y)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_selfguided_restoration_c(const uint8_t* dgd8,
+                                  int width,
+                                  int height,
+                                  int dgd_stride,
+                                  int32_t* flt0,
+                                  int32_t* flt1,
+                                  int flt_stride,
+                                  int sgr_params_idx,
+                                  int bit_depth,
+                                  int highbd);
+#define av1_selfguided_restoration av1_selfguided_restoration_c
+
+void av1_upsample_intra_edge_c(uint8_t* p, int sz);
+#define av1_upsample_intra_edge av1_upsample_intra_edge_c
+
+void av1_upsample_intra_edge_high_c(uint16_t* p, int sz, int bd);
+#define av1_upsample_intra_edge_high av1_upsample_intra_edge_high_c
+
+void av1_warp_affine_c(const int32_t* mat,
+                       const uint8_t* ref,
+                       int width,
+                       int height,
+                       int stride,
+                       uint8_t* pred,
+                       int p_col,
+                       int p_row,
+                       int p_width,
+                       int p_height,
+                       int p_stride,
+                       int subsampling_x,
+                       int subsampling_y,
+                       ConvolveParams* conv_params,
+                       int16_t alpha,
+                       int16_t beta,
+                       int16_t gamma,
+                       int16_t delta);
+#define av1_warp_affine av1_warp_affine_c
+
+void av1_wiener_convolve_add_src_c(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_neon(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_wiener_convolve_add_src)(
+    const uint8_t* src,
+    ptrdiff_t src_stride,
+    uint8_t* dst,
+    ptrdiff_t dst_stride,
+    const int16_t* filter_x,
+    int x_step_q4,
+    const int16_t* filter_y,
+    int y_step_q4,
+    int w,
+    int h,
+    const ConvolveParams* conv_params);
+
+void cdef_filter_block_c(uint8_t* dst8,
+                         uint16_t* dst16,
+                         int dstride,
+                         const uint16_t* in,
+                         int pri_strength,
+                         int sec_strength,
+                         int dir,
+                         int pri_damping,
+                         int sec_damping,
+                         int bsize,
+                         int max,
+                         int coeff_shift);
+void cdef_filter_block_neon(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+RTCD_EXTERN void (*cdef_filter_block)(uint8_t* dst8,
+                                      uint16_t* dst16,
+                                      int dstride,
+                                      const uint16_t* in,
+                                      int pri_strength,
+                                      int sec_strength,
+                                      int dir,
+                                      int pri_damping,
+                                      int sec_damping,
+                                      int bsize,
+                                      int max,
+                                      int coeff_shift);
+
+int cdef_find_dir_c(const uint16_t* img,
+                    int stride,
+                    int32_t* var,
+                    int coeff_shift);
+int cdef_find_dir_neon(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+RTCD_EXTERN int (*cdef_find_dir)(const uint16_t* img,
+                                 int stride,
+                                 int32_t* var,
+                                 int coeff_shift);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_neon(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_420_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_neon(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_420_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_neon(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_422_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_neon(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_422_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_neon(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_444_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_neon(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_444_lbd)(
+    TX_SIZE tx_size);
+
+void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
+                                 int dstride,
+                                 const uint16_t* src,
+                                 int sstride,
+                                 int v,
+                                 int h);
+void copy_rect8_16bit_to_16bit_neon(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+RTCD_EXTERN void (*copy_rect8_16bit_to_16bit)(uint16_t* dst,
+                                              int dstride,
+                                              const uint16_t* src,
+                                              int sstride,
+                                              int v,
+                                              int h);
+
+void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
+                                int dstride,
+                                const uint8_t* src,
+                                int sstride,
+                                int v,
+                                int h);
+void copy_rect8_8bit_to_16bit_neon(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+RTCD_EXTERN void (*copy_rect8_8bit_to_16bit)(uint16_t* dst,
+                                             int dstride,
+                                             const uint8_t* src,
+                                             int sstride,
+                                             int v,
+                                             int h);
+
+cfl_predict_hbd_fn get_predict_hbd_fn_c(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_neon(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_hbd_fn (*get_predict_hbd_fn)(TX_SIZE tx_size);
+
+cfl_predict_lbd_fn get_predict_lbd_fn_c(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_neon(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_lbd_fn (*get_predict_lbd_fn)(TX_SIZE tx_size);
+
+cfl_subtract_average_fn get_subtract_average_fn_c(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_neon(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subtract_average_fn (*get_subtract_average_fn)(TX_SIZE tx_size);
+
+void av1_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+#include "aom_ports/arm.h"
+static void setup_rtcd_internal(void) {
+  int flags = arm_cpu_caps();
+
+  (void)flags;
+
+  av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_c;
+  if (flags & HAS_NEON)
+    av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_neon;
+  av1_convolve_2d_sr = av1_convolve_2d_sr_c;
+  if (flags & HAS_NEON)
+    av1_convolve_2d_sr = av1_convolve_2d_sr_neon;
+  av1_convolve_x_sr = av1_convolve_x_sr_c;
+  if (flags & HAS_NEON)
+    av1_convolve_x_sr = av1_convolve_x_sr_neon;
+  av1_convolve_y_sr = av1_convolve_y_sr_c;
+  if (flags & HAS_NEON)
+    av1_convolve_y_sr = av1_convolve_y_sr_neon;
+  av1_jnt_convolve_2d = av1_jnt_convolve_2d_c;
+  if (flags & HAS_NEON)
+    av1_jnt_convolve_2d = av1_jnt_convolve_2d_neon;
+  av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_c;
+  if (flags & HAS_NEON)
+    av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_neon;
+  av1_jnt_convolve_x = av1_jnt_convolve_x_c;
+  if (flags & HAS_NEON)
+    av1_jnt_convolve_x = av1_jnt_convolve_x_neon;
+  av1_jnt_convolve_y = av1_jnt_convolve_y_c;
+  if (flags & HAS_NEON)
+    av1_jnt_convolve_y = av1_jnt_convolve_y_neon;
+  av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_c;
+  if (flags & HAS_NEON)
+    av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_neon;
+  cdef_filter_block = cdef_filter_block_c;
+  if (flags & HAS_NEON)
+    cdef_filter_block = cdef_filter_block_neon;
+  cdef_find_dir = cdef_find_dir_c;
+  if (flags & HAS_NEON)
+    cdef_find_dir = cdef_find_dir_neon;
+  cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_c;
+  if (flags & HAS_NEON)
+    cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_neon;
+  cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_c;
+  if (flags & HAS_NEON)
+    cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_neon;
+  cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_c;
+  if (flags & HAS_NEON)
+    cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_neon;
+  cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_c;
+  if (flags & HAS_NEON)
+    cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_neon;
+  cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_c;
+  if (flags & HAS_NEON)
+    cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_neon;
+  cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_c;
+  if (flags & HAS_NEON)
+    cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_neon;
+  copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_c;
+  if (flags & HAS_NEON)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_neon;
+  copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_c;
+  if (flags & HAS_NEON)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_neon;
+  get_predict_hbd_fn = get_predict_hbd_fn_c;
+  if (flags & HAS_NEON)
+    get_predict_hbd_fn = get_predict_hbd_fn_neon;
+  get_predict_lbd_fn = get_predict_lbd_fn_c;
+  if (flags & HAS_NEON)
+    get_predict_lbd_fn = get_predict_lbd_fn_neon;
+  get_subtract_average_fn = get_subtract_average_fn_c;
+  if (flags & HAS_NEON)
+    get_subtract_average_fn = get_subtract_average_fn_neon;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm
new file mode 100644
index 0000000..54bbde96
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm
@@ -0,0 +1,73 @@
+;
+; Copyright (c) 2018, Alliance for Open Media. All rights reserved
+;
+; This source code is subject to the terms of the BSD 2 Clause License and
+; the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+; was not distributed with this source code in the LICENSE file, you can
+; obtain it at www.aomedia.org/license/software. If the Alliance for Open
+; Media Patent License 1.0 was not distributed with this source code in the
+; PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+;
+ARCH_ARM equ 1
+ARCH_MIPS equ 0
+ARCH_PPC equ 0
+ARCH_X86 equ 0
+ARCH_X86_64 equ 0
+CONFIG_ACCOUNTING equ 0
+CONFIG_ANALYZER equ 0
+CONFIG_AV1_DECODER equ 1
+CONFIG_AV1_ENCODER equ 0
+CONFIG_BIG_ENDIAN equ 0
+CONFIG_BITSTREAM_DEBUG equ 0
+CONFIG_COEFFICIENT_RANGE_CHECKING equ 0
+CONFIG_COLLECT_INTER_MODE_RD_STATS equ 1
+CONFIG_COLLECT_RD_STATS equ 0
+CONFIG_DEBUG equ 0
+CONFIG_DECODE_PERF_TESTS equ 0
+CONFIG_DIST_8X8 equ 1
+CONFIG_ENCODE_PERF_TESTS equ 0
+CONFIG_ENTROPY_STATS equ 0
+CONFIG_FILEOPTIONS equ 1
+CONFIG_FP_MB_STATS equ 0
+CONFIG_GCC equ 1
+CONFIG_GCOV equ 0
+CONFIG_GPROF equ 0
+CONFIG_INSPECTION equ 0
+CONFIG_INTERNAL_STATS equ 0
+CONFIG_INTER_STATS_ONLY equ 0
+CONFIG_LIBYUV equ 1
+CONFIG_LOWBITDEPTH equ 1
+CONFIG_MISMATCH_DEBUG equ 0
+CONFIG_MSVS equ 0
+CONFIG_MULTITHREAD equ 1
+CONFIG_OS_SUPPORT equ 1
+CONFIG_PIC equ 0
+CONFIG_RD_DEBUG equ 0
+CONFIG_RUNTIME_CPU_DETECT equ 0
+CONFIG_SHARED equ 0
+CONFIG_SIZE_LIMIT equ 1
+CONFIG_SPATIAL_RESAMPLING equ 1
+CONFIG_STATIC equ 1
+CONFIG_UNIT_TESTS equ 1
+CONFIG_WEBM_IO equ 1
+DECODE_HEIGHT_LIMIT equ 16384
+DECODE_WIDTH_LIMIT equ 16384
+HAVE_AVX equ 0
+HAVE_AVX2 equ 0
+HAVE_DSPR2 equ 0
+HAVE_FEXCEPT equ 1
+HAVE_MIPS32 equ 0
+HAVE_MIPS64 equ 0
+HAVE_MMX equ 0
+HAVE_MSA equ 0
+HAVE_NEON equ 1
+HAVE_PTHREAD_H equ 1
+HAVE_SSE equ 0
+HAVE_SSE2 equ 0
+HAVE_SSE3 equ 0
+HAVE_SSE4_1 equ 0
+HAVE_SSE4_2 equ 0
+HAVE_SSSE3 equ 0
+HAVE_UNISTD_H equ 1
+HAVE_VSX equ 0
+HAVE_WXWIDGETS equ 0
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.c b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.c
new file mode 100644
index 0000000..27a92cf
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2016, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#include "aom/aom_codec.h"
+static const char* const cfg = "-G \"Unix Makefiles\" -DCMAKE_TOOLCHAIN_FILE=\"/usr/local/google/home/johannkoenig/chromium/chromium/src/third_party/libaom/source/libaom/build/cmake/toolchains/armv7-linux-gcc.cmake\" -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=1 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=16384 -DDECODE_WIDTH_LIMIT=16384";
+const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h
new file mode 100644
index 0000000..4ce8acb
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#ifndef AOM_CONFIG_H_
+#define AOM_CONFIG_H_
+#define ARCH_ARM 1
+#define ARCH_MIPS 0
+#define ARCH_PPC 0
+#define ARCH_X86 0
+#define ARCH_X86_64 0
+#define CONFIG_ACCOUNTING 0
+#define CONFIG_ANALYZER 0
+#define CONFIG_AV1_DECODER 1
+#define CONFIG_AV1_ENCODER 0
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+#define CONFIG_COLLECT_RD_STATS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_DIST_8X8 1
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_ENTROPY_STATS 0
+#define CONFIG_FILEOPTIONS 1
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_GCC 1
+#define CONFIG_GCOV 0
+#define CONFIG_GPROF 0
+#define CONFIG_INSPECTION 0
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_INTER_STATS_ONLY 0
+#define CONFIG_LIBYUV 1
+#define CONFIG_LOWBITDEPTH 1
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_MSVS 0
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_PIC 0
+#define CONFIG_RD_DEBUG 0
+#define CONFIG_RUNTIME_CPU_DETECT 0
+#define CONFIG_SHARED 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_STATIC 1
+#define CONFIG_UNIT_TESTS 1
+#define CONFIG_WEBM_IO 1
+#define DECODE_HEIGHT_LIMIT 16384
+#define DECODE_WIDTH_LIMIT 16384
+#define HAVE_AVX 0
+#define HAVE_AVX2 0
+#define HAVE_DSPR2 0
+#define HAVE_FEXCEPT 1
+#define HAVE_MIPS32 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 0
+#define HAVE_MSA 0
+#define HAVE_NEON 1
+#define HAVE_PTHREAD_H 1
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define HAVE_SSE3 0
+#define HAVE_SSE4_1 0
+#define HAVE_SSE4_2 0
+#define HAVE_SSSE3 0
+#define HAVE_UNISTD_H 1
+#define HAVE_VSX 0
+#define HAVE_WXWIDGETS 0
+#define INLINE inline
+#endif /* AOM_CONFIG_H_ */
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h
new file mode 100644
index 0000000..6eb5587
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h
@@ -0,0 +1,3261 @@
+// This file is generated. Do not edit.
+#ifndef AOM_DSP_RTCD_H_
+#define AOM_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/aom_dsp_common.h"
+#include "av1/common/blockd.h"
+#include "av1/common/enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void aom_blend_a64_hmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_hmask aom_blend_a64_hmask_c
+
+void aom_blend_a64_mask_c(uint8_t* dst,
+                          uint32_t dst_stride,
+                          const uint8_t* src0,
+                          uint32_t src0_stride,
+                          const uint8_t* src1,
+                          uint32_t src1_stride,
+                          const uint8_t* mask,
+                          uint32_t mask_stride,
+                          int w,
+                          int h,
+                          int subx,
+                          int suby);
+#define aom_blend_a64_mask aom_blend_a64_mask_c
+
+void aom_blend_a64_vmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_vmask aom_blend_a64_vmask_c
+
+void aom_convolve8_horiz_c(const uint8_t* src,
+                           ptrdiff_t src_stride,
+                           uint8_t* dst,
+                           ptrdiff_t dst_stride,
+                           const int16_t* filter_x,
+                           int x_step_q4,
+                           const int16_t* filter_y,
+                           int y_step_q4,
+                           int w,
+                           int h);
+#define aom_convolve8_horiz aom_convolve8_horiz_c
+
+void aom_convolve8_vert_c(const uint8_t* src,
+                          ptrdiff_t src_stride,
+                          uint8_t* dst,
+                          ptrdiff_t dst_stride,
+                          const int16_t* filter_x,
+                          int x_step_q4,
+                          const int16_t* filter_y,
+                          int y_step_q4,
+                          int w,
+                          int h);
+#define aom_convolve8_vert aom_convolve8_vert_c
+
+void aom_convolve_copy_c(const uint8_t* src,
+                         ptrdiff_t src_stride,
+                         uint8_t* dst,
+                         ptrdiff_t dst_stride,
+                         const int16_t* filter_x,
+                         int x_step_q4,
+                         const int16_t* filter_y,
+                         int y_step_q4,
+                         int w,
+                         int h);
+#define aom_convolve_copy aom_convolve_copy_c
+
+void aom_dc_128_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x16_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_16x16 aom_dc_128_predictor_16x16_neon
+
+void aom_dc_128_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
+
+void aom_dc_128_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x4 aom_dc_128_predictor_16x4_c
+
+void aom_dc_128_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x64 aom_dc_128_predictor_16x64_c
+
+void aom_dc_128_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
+
+void aom_dc_128_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
+
+void aom_dc_128_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
+
+void aom_dc_128_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x32_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_32x32 aom_dc_128_predictor_32x32_neon
+
+void aom_dc_128_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x64 aom_dc_128_predictor_32x64_c
+
+void aom_dc_128_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_32x8 aom_dc_128_predictor_32x8_c
+
+void aom_dc_128_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_4x16 aom_dc_128_predictor_4x16_c
+
+void aom_dc_128_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x4_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_4x4 aom_dc_128_predictor_4x4_neon
+
+void aom_dc_128_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
+
+void aom_dc_128_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x16 aom_dc_128_predictor_64x16_c
+
+void aom_dc_128_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x32 aom_dc_128_predictor_64x32_c
+
+void aom_dc_128_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x64 aom_dc_128_predictor_64x64_c
+
+void aom_dc_128_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
+
+void aom_dc_128_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x32 aom_dc_128_predictor_8x32_c
+
+void aom_dc_128_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
+
+void aom_dc_128_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x8_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_8x8 aom_dc_128_predictor_8x8_neon
+
+void aom_dc_left_predictor_16x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x16_neon(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_16x16 aom_dc_left_predictor_16x16_neon
+
+void aom_dc_left_predictor_16x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
+
+void aom_dc_left_predictor_16x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x4 aom_dc_left_predictor_16x4_c
+
+void aom_dc_left_predictor_16x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x64 aom_dc_left_predictor_16x64_c
+
+void aom_dc_left_predictor_16x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
+
+void aom_dc_left_predictor_2x2_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
+
+void aom_dc_left_predictor_32x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
+
+void aom_dc_left_predictor_32x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x32_neon(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_32x32 aom_dc_left_predictor_32x32_neon
+
+void aom_dc_left_predictor_32x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x64 aom_dc_left_predictor_32x64_c
+
+void aom_dc_left_predictor_32x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_32x8 aom_dc_left_predictor_32x8_c
+
+void aom_dc_left_predictor_4x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_4x16 aom_dc_left_predictor_4x16_c
+
+void aom_dc_left_predictor_4x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x4_neon(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_4x4 aom_dc_left_predictor_4x4_neon
+
+void aom_dc_left_predictor_4x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
+
+void aom_dc_left_predictor_64x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x16 aom_dc_left_predictor_64x16_c
+
+void aom_dc_left_predictor_64x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x32 aom_dc_left_predictor_64x32_c
+
+void aom_dc_left_predictor_64x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x64 aom_dc_left_predictor_64x64_c
+
+void aom_dc_left_predictor_8x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
+
+void aom_dc_left_predictor_8x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x32 aom_dc_left_predictor_8x32_c
+
+void aom_dc_left_predictor_8x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
+
+void aom_dc_left_predictor_8x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x8_neon(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_8x8 aom_dc_left_predictor_8x8_neon
+
+void aom_dc_predictor_16x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x16_neon(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_16x16 aom_dc_predictor_16x16_neon
+
+void aom_dc_predictor_16x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
+
+void aom_dc_predictor_16x4_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x4 aom_dc_predictor_16x4_c
+
+void aom_dc_predictor_16x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x64 aom_dc_predictor_16x64_c
+
+void aom_dc_predictor_16x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
+
+void aom_dc_predictor_2x2_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
+
+void aom_dc_predictor_32x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
+
+void aom_dc_predictor_32x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x32_neon(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_32x32 aom_dc_predictor_32x32_neon
+
+void aom_dc_predictor_32x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x64 aom_dc_predictor_32x64_c
+
+void aom_dc_predictor_32x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_32x8 aom_dc_predictor_32x8_c
+
+void aom_dc_predictor_4x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_4x16 aom_dc_predictor_4x16_c
+
+void aom_dc_predictor_4x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x4_neon(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_4x4 aom_dc_predictor_4x4_neon
+
+void aom_dc_predictor_4x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
+
+void aom_dc_predictor_64x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x16 aom_dc_predictor_64x16_c
+
+void aom_dc_predictor_64x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x32 aom_dc_predictor_64x32_c
+
+void aom_dc_predictor_64x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x64 aom_dc_predictor_64x64_c
+
+void aom_dc_predictor_8x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
+
+void aom_dc_predictor_8x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x32 aom_dc_predictor_8x32_c
+
+void aom_dc_predictor_8x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
+
+void aom_dc_predictor_8x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x8_neon(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_8x8 aom_dc_predictor_8x8_neon
+
+void aom_dc_top_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x16_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_16x16 aom_dc_top_predictor_16x16_neon
+
+void aom_dc_top_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
+
+void aom_dc_top_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x4 aom_dc_top_predictor_16x4_c
+
+void aom_dc_top_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x64 aom_dc_top_predictor_16x64_c
+
+void aom_dc_top_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
+
+void aom_dc_top_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
+
+void aom_dc_top_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
+
+void aom_dc_top_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x32_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_32x32 aom_dc_top_predictor_32x32_neon
+
+void aom_dc_top_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x64 aom_dc_top_predictor_32x64_c
+
+void aom_dc_top_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_32x8 aom_dc_top_predictor_32x8_c
+
+void aom_dc_top_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_4x16 aom_dc_top_predictor_4x16_c
+
+void aom_dc_top_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x4_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_4x4 aom_dc_top_predictor_4x4_neon
+
+void aom_dc_top_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
+
+void aom_dc_top_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x16 aom_dc_top_predictor_64x16_c
+
+void aom_dc_top_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x32 aom_dc_top_predictor_64x32_c
+
+void aom_dc_top_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x64 aom_dc_top_predictor_64x64_c
+
+void aom_dc_top_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
+
+void aom_dc_top_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x32 aom_dc_top_predictor_8x32_c
+
+void aom_dc_top_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
+
+void aom_dc_top_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x8_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_8x8 aom_dc_top_predictor_8x8_neon
+
+void aom_h_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x16_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_16x16 aom_h_predictor_16x16_neon
+
+void aom_h_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
+
+void aom_h_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x4 aom_h_predictor_16x4_c
+
+void aom_h_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x64 aom_h_predictor_16x64_c
+
+void aom_h_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
+
+void aom_h_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
+
+void aom_h_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
+
+void aom_h_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x32_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_32x32 aom_h_predictor_32x32_neon
+
+void aom_h_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x64 aom_h_predictor_32x64_c
+
+void aom_h_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_32x8 aom_h_predictor_32x8_c
+
+void aom_h_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_4x16 aom_h_predictor_4x16_c
+
+void aom_h_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x4_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_4x4 aom_h_predictor_4x4_neon
+
+void aom_h_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
+
+void aom_h_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x16 aom_h_predictor_64x16_c
+
+void aom_h_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x32 aom_h_predictor_64x32_c
+
+void aom_h_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x64 aom_h_predictor_64x64_c
+
+void aom_h_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
+
+void aom_h_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x32 aom_h_predictor_8x32_c
+
+void aom_h_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
+
+void aom_h_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x8_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_8x8 aom_h_predictor_8x8_neon
+
+void aom_highbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                     uint32_t dst_stride,
+                                     const CONV_BUF_TYPE* src0,
+                                     uint32_t src0_stride,
+                                     const CONV_BUF_TYPE* src1,
+                                     uint32_t src1_stride,
+                                     const uint8_t* mask,
+                                     uint32_t mask_stride,
+                                     int w,
+                                     int h,
+                                     int subx,
+                                     int suby,
+                                     ConvolveParams* conv_params,
+                                     const int bd);
+#define aom_highbd_blend_a64_d16_mask aom_highbd_blend_a64_d16_mask_c
+
+void aom_highbd_blend_a64_hmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_hmask aom_highbd_blend_a64_hmask_c
+
+void aom_highbd_blend_a64_mask_c(uint8_t* dst,
+                                 uint32_t dst_stride,
+                                 const uint8_t* src0,
+                                 uint32_t src0_stride,
+                                 const uint8_t* src1,
+                                 uint32_t src1_stride,
+                                 const uint8_t* mask,
+                                 uint32_t mask_stride,
+                                 int w,
+                                 int h,
+                                 int subx,
+                                 int suby,
+                                 int bd);
+#define aom_highbd_blend_a64_mask aom_highbd_blend_a64_mask_c
+
+void aom_highbd_blend_a64_vmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_vmask aom_highbd_blend_a64_vmask_c
+
+void aom_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define aom_highbd_convolve8_horiz aom_highbd_convolve8_horiz_c
+
+void aom_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define aom_highbd_convolve8_vert aom_highbd_convolve8_vert_c
+
+void aom_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define aom_highbd_convolve_copy aom_highbd_convolve_copy_c
+
+void aom_highbd_dc_128_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x16 aom_highbd_dc_128_predictor_16x16_c
+
+void aom_highbd_dc_128_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x32 aom_highbd_dc_128_predictor_16x32_c
+
+void aom_highbd_dc_128_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x4 aom_highbd_dc_128_predictor_16x4_c
+
+void aom_highbd_dc_128_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x64 aom_highbd_dc_128_predictor_16x64_c
+
+void aom_highbd_dc_128_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x8 aom_highbd_dc_128_predictor_16x8_c
+
+void aom_highbd_dc_128_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_2x2 aom_highbd_dc_128_predictor_2x2_c
+
+void aom_highbd_dc_128_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x16 aom_highbd_dc_128_predictor_32x16_c
+
+void aom_highbd_dc_128_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x32 aom_highbd_dc_128_predictor_32x32_c
+
+void aom_highbd_dc_128_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x64 aom_highbd_dc_128_predictor_32x64_c
+
+void aom_highbd_dc_128_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_32x8 aom_highbd_dc_128_predictor_32x8_c
+
+void aom_highbd_dc_128_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_4x16 aom_highbd_dc_128_predictor_4x16_c
+
+void aom_highbd_dc_128_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x4 aom_highbd_dc_128_predictor_4x4_c
+
+void aom_highbd_dc_128_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x8 aom_highbd_dc_128_predictor_4x8_c
+
+void aom_highbd_dc_128_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x16 aom_highbd_dc_128_predictor_64x16_c
+
+void aom_highbd_dc_128_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x32 aom_highbd_dc_128_predictor_64x32_c
+
+void aom_highbd_dc_128_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x64 aom_highbd_dc_128_predictor_64x64_c
+
+void aom_highbd_dc_128_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x16 aom_highbd_dc_128_predictor_8x16_c
+
+void aom_highbd_dc_128_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x32 aom_highbd_dc_128_predictor_8x32_c
+
+void aom_highbd_dc_128_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x4 aom_highbd_dc_128_predictor_8x4_c
+
+void aom_highbd_dc_128_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x8 aom_highbd_dc_128_predictor_8x8_c
+
+void aom_highbd_dc_left_predictor_16x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x16 aom_highbd_dc_left_predictor_16x16_c
+
+void aom_highbd_dc_left_predictor_16x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x32 aom_highbd_dc_left_predictor_16x32_c
+
+void aom_highbd_dc_left_predictor_16x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x4 aom_highbd_dc_left_predictor_16x4_c
+
+void aom_highbd_dc_left_predictor_16x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x64 aom_highbd_dc_left_predictor_16x64_c
+
+void aom_highbd_dc_left_predictor_16x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x8 aom_highbd_dc_left_predictor_16x8_c
+
+void aom_highbd_dc_left_predictor_2x2_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_2x2 aom_highbd_dc_left_predictor_2x2_c
+
+void aom_highbd_dc_left_predictor_32x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x16 aom_highbd_dc_left_predictor_32x16_c
+
+void aom_highbd_dc_left_predictor_32x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x32 aom_highbd_dc_left_predictor_32x32_c
+
+void aom_highbd_dc_left_predictor_32x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x64 aom_highbd_dc_left_predictor_32x64_c
+
+void aom_highbd_dc_left_predictor_32x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_32x8 aom_highbd_dc_left_predictor_32x8_c
+
+void aom_highbd_dc_left_predictor_4x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_4x16 aom_highbd_dc_left_predictor_4x16_c
+
+void aom_highbd_dc_left_predictor_4x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x4 aom_highbd_dc_left_predictor_4x4_c
+
+void aom_highbd_dc_left_predictor_4x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x8 aom_highbd_dc_left_predictor_4x8_c
+
+void aom_highbd_dc_left_predictor_64x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x16 aom_highbd_dc_left_predictor_64x16_c
+
+void aom_highbd_dc_left_predictor_64x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x32 aom_highbd_dc_left_predictor_64x32_c
+
+void aom_highbd_dc_left_predictor_64x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x64 aom_highbd_dc_left_predictor_64x64_c
+
+void aom_highbd_dc_left_predictor_8x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x16 aom_highbd_dc_left_predictor_8x16_c
+
+void aom_highbd_dc_left_predictor_8x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x32 aom_highbd_dc_left_predictor_8x32_c
+
+void aom_highbd_dc_left_predictor_8x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x4 aom_highbd_dc_left_predictor_8x4_c
+
+void aom_highbd_dc_left_predictor_8x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x8 aom_highbd_dc_left_predictor_8x8_c
+
+void aom_highbd_dc_predictor_16x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x16 aom_highbd_dc_predictor_16x16_c
+
+void aom_highbd_dc_predictor_16x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x32 aom_highbd_dc_predictor_16x32_c
+
+void aom_highbd_dc_predictor_16x4_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x4 aom_highbd_dc_predictor_16x4_c
+
+void aom_highbd_dc_predictor_16x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x64 aom_highbd_dc_predictor_16x64_c
+
+void aom_highbd_dc_predictor_16x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x8 aom_highbd_dc_predictor_16x8_c
+
+void aom_highbd_dc_predictor_2x2_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_2x2 aom_highbd_dc_predictor_2x2_c
+
+void aom_highbd_dc_predictor_32x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x16 aom_highbd_dc_predictor_32x16_c
+
+void aom_highbd_dc_predictor_32x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x32 aom_highbd_dc_predictor_32x32_c
+
+void aom_highbd_dc_predictor_32x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x64 aom_highbd_dc_predictor_32x64_c
+
+void aom_highbd_dc_predictor_32x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_32x8 aom_highbd_dc_predictor_32x8_c
+
+void aom_highbd_dc_predictor_4x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_4x16 aom_highbd_dc_predictor_4x16_c
+
+void aom_highbd_dc_predictor_4x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x4 aom_highbd_dc_predictor_4x4_c
+
+void aom_highbd_dc_predictor_4x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x8 aom_highbd_dc_predictor_4x8_c
+
+void aom_highbd_dc_predictor_64x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x16 aom_highbd_dc_predictor_64x16_c
+
+void aom_highbd_dc_predictor_64x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x32 aom_highbd_dc_predictor_64x32_c
+
+void aom_highbd_dc_predictor_64x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x64 aom_highbd_dc_predictor_64x64_c
+
+void aom_highbd_dc_predictor_8x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x16 aom_highbd_dc_predictor_8x16_c
+
+void aom_highbd_dc_predictor_8x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x32 aom_highbd_dc_predictor_8x32_c
+
+void aom_highbd_dc_predictor_8x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x4 aom_highbd_dc_predictor_8x4_c
+
+void aom_highbd_dc_predictor_8x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x8 aom_highbd_dc_predictor_8x8_c
+
+void aom_highbd_dc_top_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x16 aom_highbd_dc_top_predictor_16x16_c
+
+void aom_highbd_dc_top_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x32 aom_highbd_dc_top_predictor_16x32_c
+
+void aom_highbd_dc_top_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x4 aom_highbd_dc_top_predictor_16x4_c
+
+void aom_highbd_dc_top_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x64 aom_highbd_dc_top_predictor_16x64_c
+
+void aom_highbd_dc_top_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x8 aom_highbd_dc_top_predictor_16x8_c
+
+void aom_highbd_dc_top_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_2x2 aom_highbd_dc_top_predictor_2x2_c
+
+void aom_highbd_dc_top_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x16 aom_highbd_dc_top_predictor_32x16_c
+
+void aom_highbd_dc_top_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x32 aom_highbd_dc_top_predictor_32x32_c
+
+void aom_highbd_dc_top_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x64 aom_highbd_dc_top_predictor_32x64_c
+
+void aom_highbd_dc_top_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_32x8 aom_highbd_dc_top_predictor_32x8_c
+
+void aom_highbd_dc_top_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_4x16 aom_highbd_dc_top_predictor_4x16_c
+
+void aom_highbd_dc_top_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x4 aom_highbd_dc_top_predictor_4x4_c
+
+void aom_highbd_dc_top_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x8 aom_highbd_dc_top_predictor_4x8_c
+
+void aom_highbd_dc_top_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x16 aom_highbd_dc_top_predictor_64x16_c
+
+void aom_highbd_dc_top_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x32 aom_highbd_dc_top_predictor_64x32_c
+
+void aom_highbd_dc_top_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x64 aom_highbd_dc_top_predictor_64x64_c
+
+void aom_highbd_dc_top_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x16 aom_highbd_dc_top_predictor_8x16_c
+
+void aom_highbd_dc_top_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x32 aom_highbd_dc_top_predictor_8x32_c
+
+void aom_highbd_dc_top_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x4 aom_highbd_dc_top_predictor_8x4_c
+
+void aom_highbd_dc_top_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x8 aom_highbd_dc_top_predictor_8x8_c
+
+void aom_highbd_h_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x16 aom_highbd_h_predictor_16x16_c
+
+void aom_highbd_h_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x32 aom_highbd_h_predictor_16x32_c
+
+void aom_highbd_h_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x4 aom_highbd_h_predictor_16x4_c
+
+void aom_highbd_h_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x64 aom_highbd_h_predictor_16x64_c
+
+void aom_highbd_h_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x8 aom_highbd_h_predictor_16x8_c
+
+void aom_highbd_h_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_2x2 aom_highbd_h_predictor_2x2_c
+
+void aom_highbd_h_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x16 aom_highbd_h_predictor_32x16_c
+
+void aom_highbd_h_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x32 aom_highbd_h_predictor_32x32_c
+
+void aom_highbd_h_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x64 aom_highbd_h_predictor_32x64_c
+
+void aom_highbd_h_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_32x8 aom_highbd_h_predictor_32x8_c
+
+void aom_highbd_h_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_4x16 aom_highbd_h_predictor_4x16_c
+
+void aom_highbd_h_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x4 aom_highbd_h_predictor_4x4_c
+
+void aom_highbd_h_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x8 aom_highbd_h_predictor_4x8_c
+
+void aom_highbd_h_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x16 aom_highbd_h_predictor_64x16_c
+
+void aom_highbd_h_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x32 aom_highbd_h_predictor_64x32_c
+
+void aom_highbd_h_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x64 aom_highbd_h_predictor_64x64_c
+
+void aom_highbd_h_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x16 aom_highbd_h_predictor_8x16_c
+
+void aom_highbd_h_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x32 aom_highbd_h_predictor_8x32_c
+
+void aom_highbd_h_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x4 aom_highbd_h_predictor_8x4_c
+
+void aom_highbd_h_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x8 aom_highbd_h_predictor_8x8_c
+
+void aom_highbd_lpf_horizontal_14_c(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_horizontal_14 aom_highbd_lpf_horizontal_14_c
+
+void aom_highbd_lpf_horizontal_14_dual_c(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limt1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+#define aom_highbd_lpf_horizontal_14_dual aom_highbd_lpf_horizontal_14_dual_c
+
+void aom_highbd_lpf_horizontal_4_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_4 aom_highbd_lpf_horizontal_4_c
+
+void aom_highbd_lpf_horizontal_4_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_4_dual aom_highbd_lpf_horizontal_4_dual_c
+
+void aom_highbd_lpf_horizontal_6_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_6 aom_highbd_lpf_horizontal_6_c
+
+void aom_highbd_lpf_horizontal_6_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_6_dual aom_highbd_lpf_horizontal_6_dual_c
+
+void aom_highbd_lpf_horizontal_8_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_8 aom_highbd_lpf_horizontal_8_c
+
+void aom_highbd_lpf_horizontal_8_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_8_dual aom_highbd_lpf_horizontal_8_dual_c
+
+void aom_highbd_lpf_vertical_14_c(uint16_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit,
+                                  const uint8_t* limit,
+                                  const uint8_t* thresh,
+                                  int bd);
+#define aom_highbd_lpf_vertical_14 aom_highbd_lpf_vertical_14_c
+
+void aom_highbd_lpf_vertical_14_dual_c(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit0,
+                                       const uint8_t* limit0,
+                                       const uint8_t* thresh0,
+                                       const uint8_t* blimit1,
+                                       const uint8_t* limit1,
+                                       const uint8_t* thresh1,
+                                       int bd);
+#define aom_highbd_lpf_vertical_14_dual aom_highbd_lpf_vertical_14_dual_c
+
+void aom_highbd_lpf_vertical_4_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_4 aom_highbd_lpf_vertical_4_c
+
+void aom_highbd_lpf_vertical_4_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_4_dual aom_highbd_lpf_vertical_4_dual_c
+
+void aom_highbd_lpf_vertical_6_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_6 aom_highbd_lpf_vertical_6_c
+
+void aom_highbd_lpf_vertical_6_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_6_dual aom_highbd_lpf_vertical_6_dual_c
+
+void aom_highbd_lpf_vertical_8_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_8 aom_highbd_lpf_vertical_8_c
+
+void aom_highbd_lpf_vertical_8_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_8_dual aom_highbd_lpf_vertical_8_dual_c
+
+void aom_highbd_paeth_predictor_16x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x16 aom_highbd_paeth_predictor_16x16_c
+
+void aom_highbd_paeth_predictor_16x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x32 aom_highbd_paeth_predictor_16x32_c
+
+void aom_highbd_paeth_predictor_16x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x4 aom_highbd_paeth_predictor_16x4_c
+
+void aom_highbd_paeth_predictor_16x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x64 aom_highbd_paeth_predictor_16x64_c
+
+void aom_highbd_paeth_predictor_16x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x8 aom_highbd_paeth_predictor_16x8_c
+
+void aom_highbd_paeth_predictor_2x2_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_2x2 aom_highbd_paeth_predictor_2x2_c
+
+void aom_highbd_paeth_predictor_32x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x16 aom_highbd_paeth_predictor_32x16_c
+
+void aom_highbd_paeth_predictor_32x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x32 aom_highbd_paeth_predictor_32x32_c
+
+void aom_highbd_paeth_predictor_32x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x64 aom_highbd_paeth_predictor_32x64_c
+
+void aom_highbd_paeth_predictor_32x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_32x8 aom_highbd_paeth_predictor_32x8_c
+
+void aom_highbd_paeth_predictor_4x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_4x16 aom_highbd_paeth_predictor_4x16_c
+
+void aom_highbd_paeth_predictor_4x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x4 aom_highbd_paeth_predictor_4x4_c
+
+void aom_highbd_paeth_predictor_4x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x8 aom_highbd_paeth_predictor_4x8_c
+
+void aom_highbd_paeth_predictor_64x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x16 aom_highbd_paeth_predictor_64x16_c
+
+void aom_highbd_paeth_predictor_64x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x32 aom_highbd_paeth_predictor_64x32_c
+
+void aom_highbd_paeth_predictor_64x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x64 aom_highbd_paeth_predictor_64x64_c
+
+void aom_highbd_paeth_predictor_8x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x16 aom_highbd_paeth_predictor_8x16_c
+
+void aom_highbd_paeth_predictor_8x32_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x32 aom_highbd_paeth_predictor_8x32_c
+
+void aom_highbd_paeth_predictor_8x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x4 aom_highbd_paeth_predictor_8x4_c
+
+void aom_highbd_paeth_predictor_8x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x8 aom_highbd_paeth_predictor_8x8_c
+
+void aom_highbd_smooth_h_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x16 \
+  aom_highbd_smooth_h_predictor_16x16_c
+
+void aom_highbd_smooth_h_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x32 \
+  aom_highbd_smooth_h_predictor_16x32_c
+
+void aom_highbd_smooth_h_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x4 aom_highbd_smooth_h_predictor_16x4_c
+
+void aom_highbd_smooth_h_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x64 \
+  aom_highbd_smooth_h_predictor_16x64_c
+
+void aom_highbd_smooth_h_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x8 aom_highbd_smooth_h_predictor_16x8_c
+
+void aom_highbd_smooth_h_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_2x2 aom_highbd_smooth_h_predictor_2x2_c
+
+void aom_highbd_smooth_h_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x16 \
+  aom_highbd_smooth_h_predictor_32x16_c
+
+void aom_highbd_smooth_h_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x32 \
+  aom_highbd_smooth_h_predictor_32x32_c
+
+void aom_highbd_smooth_h_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x64 \
+  aom_highbd_smooth_h_predictor_32x64_c
+
+void aom_highbd_smooth_h_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_32x8 aom_highbd_smooth_h_predictor_32x8_c
+
+void aom_highbd_smooth_h_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_4x16 aom_highbd_smooth_h_predictor_4x16_c
+
+void aom_highbd_smooth_h_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x4 aom_highbd_smooth_h_predictor_4x4_c
+
+void aom_highbd_smooth_h_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x8 aom_highbd_smooth_h_predictor_4x8_c
+
+void aom_highbd_smooth_h_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x16 \
+  aom_highbd_smooth_h_predictor_64x16_c
+
+void aom_highbd_smooth_h_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x32 \
+  aom_highbd_smooth_h_predictor_64x32_c
+
+void aom_highbd_smooth_h_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x64 \
+  aom_highbd_smooth_h_predictor_64x64_c
+
+void aom_highbd_smooth_h_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x16 aom_highbd_smooth_h_predictor_8x16_c
+
+void aom_highbd_smooth_h_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x32 aom_highbd_smooth_h_predictor_8x32_c
+
+void aom_highbd_smooth_h_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x4 aom_highbd_smooth_h_predictor_8x4_c
+
+void aom_highbd_smooth_h_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x8 aom_highbd_smooth_h_predictor_8x8_c
+
+void aom_highbd_smooth_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x16 aom_highbd_smooth_predictor_16x16_c
+
+void aom_highbd_smooth_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x32 aom_highbd_smooth_predictor_16x32_c
+
+void aom_highbd_smooth_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x4 aom_highbd_smooth_predictor_16x4_c
+
+void aom_highbd_smooth_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x64 aom_highbd_smooth_predictor_16x64_c
+
+void aom_highbd_smooth_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x8 aom_highbd_smooth_predictor_16x8_c
+
+void aom_highbd_smooth_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_2x2 aom_highbd_smooth_predictor_2x2_c
+
+void aom_highbd_smooth_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x16 aom_highbd_smooth_predictor_32x16_c
+
+void aom_highbd_smooth_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x32 aom_highbd_smooth_predictor_32x32_c
+
+void aom_highbd_smooth_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x64 aom_highbd_smooth_predictor_32x64_c
+
+void aom_highbd_smooth_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_32x8 aom_highbd_smooth_predictor_32x8_c
+
+void aom_highbd_smooth_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_4x16 aom_highbd_smooth_predictor_4x16_c
+
+void aom_highbd_smooth_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x4 aom_highbd_smooth_predictor_4x4_c
+
+void aom_highbd_smooth_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x8 aom_highbd_smooth_predictor_4x8_c
+
+void aom_highbd_smooth_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x16 aom_highbd_smooth_predictor_64x16_c
+
+void aom_highbd_smooth_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x32 aom_highbd_smooth_predictor_64x32_c
+
+void aom_highbd_smooth_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x64 aom_highbd_smooth_predictor_64x64_c
+
+void aom_highbd_smooth_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x16 aom_highbd_smooth_predictor_8x16_c
+
+void aom_highbd_smooth_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x32 aom_highbd_smooth_predictor_8x32_c
+
+void aom_highbd_smooth_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x4 aom_highbd_smooth_predictor_8x4_c
+
+void aom_highbd_smooth_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x8 aom_highbd_smooth_predictor_8x8_c
+
+void aom_highbd_smooth_v_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x16 \
+  aom_highbd_smooth_v_predictor_16x16_c
+
+void aom_highbd_smooth_v_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x32 \
+  aom_highbd_smooth_v_predictor_16x32_c
+
+void aom_highbd_smooth_v_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x4 aom_highbd_smooth_v_predictor_16x4_c
+
+void aom_highbd_smooth_v_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x64 \
+  aom_highbd_smooth_v_predictor_16x64_c
+
+void aom_highbd_smooth_v_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x8 aom_highbd_smooth_v_predictor_16x8_c
+
+void aom_highbd_smooth_v_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_2x2 aom_highbd_smooth_v_predictor_2x2_c
+
+void aom_highbd_smooth_v_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x16 \
+  aom_highbd_smooth_v_predictor_32x16_c
+
+void aom_highbd_smooth_v_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x32 \
+  aom_highbd_smooth_v_predictor_32x32_c
+
+void aom_highbd_smooth_v_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x64 \
+  aom_highbd_smooth_v_predictor_32x64_c
+
+void aom_highbd_smooth_v_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_32x8 aom_highbd_smooth_v_predictor_32x8_c
+
+void aom_highbd_smooth_v_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_4x16 aom_highbd_smooth_v_predictor_4x16_c
+
+void aom_highbd_smooth_v_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x4 aom_highbd_smooth_v_predictor_4x4_c
+
+void aom_highbd_smooth_v_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x8 aom_highbd_smooth_v_predictor_4x8_c
+
+void aom_highbd_smooth_v_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x16 \
+  aom_highbd_smooth_v_predictor_64x16_c
+
+void aom_highbd_smooth_v_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x32 \
+  aom_highbd_smooth_v_predictor_64x32_c
+
+void aom_highbd_smooth_v_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x64 \
+  aom_highbd_smooth_v_predictor_64x64_c
+
+void aom_highbd_smooth_v_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x16 aom_highbd_smooth_v_predictor_8x16_c
+
+void aom_highbd_smooth_v_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x32 aom_highbd_smooth_v_predictor_8x32_c
+
+void aom_highbd_smooth_v_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x4 aom_highbd_smooth_v_predictor_8x4_c
+
+void aom_highbd_smooth_v_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x8 aom_highbd_smooth_v_predictor_8x8_c
+
+void aom_highbd_v_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x16 aom_highbd_v_predictor_16x16_c
+
+void aom_highbd_v_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x32 aom_highbd_v_predictor_16x32_c
+
+void aom_highbd_v_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x4 aom_highbd_v_predictor_16x4_c
+
+void aom_highbd_v_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x64 aom_highbd_v_predictor_16x64_c
+
+void aom_highbd_v_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x8 aom_highbd_v_predictor_16x8_c
+
+void aom_highbd_v_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_2x2 aom_highbd_v_predictor_2x2_c
+
+void aom_highbd_v_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x16 aom_highbd_v_predictor_32x16_c
+
+void aom_highbd_v_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x32 aom_highbd_v_predictor_32x32_c
+
+void aom_highbd_v_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x64 aom_highbd_v_predictor_32x64_c
+
+void aom_highbd_v_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_32x8 aom_highbd_v_predictor_32x8_c
+
+void aom_highbd_v_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_4x16 aom_highbd_v_predictor_4x16_c
+
+void aom_highbd_v_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x4 aom_highbd_v_predictor_4x4_c
+
+void aom_highbd_v_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x8 aom_highbd_v_predictor_4x8_c
+
+void aom_highbd_v_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x16 aom_highbd_v_predictor_64x16_c
+
+void aom_highbd_v_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x32 aom_highbd_v_predictor_64x32_c
+
+void aom_highbd_v_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x64 aom_highbd_v_predictor_64x64_c
+
+void aom_highbd_v_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x16 aom_highbd_v_predictor_8x16_c
+
+void aom_highbd_v_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x32 aom_highbd_v_predictor_8x32_c
+
+void aom_highbd_v_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x4 aom_highbd_v_predictor_8x4_c
+
+void aom_highbd_v_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x8 aom_highbd_v_predictor_8x8_c
+
+void aom_lowbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                    uint32_t dst_stride,
+                                    const CONV_BUF_TYPE* src0,
+                                    uint32_t src0_stride,
+                                    const CONV_BUF_TYPE* src1,
+                                    uint32_t src1_stride,
+                                    const uint8_t* mask,
+                                    uint32_t mask_stride,
+                                    int w,
+                                    int h,
+                                    int subx,
+                                    int suby,
+                                    ConvolveParams* conv_params);
+void aom_lowbd_blend_a64_d16_mask_neon(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const CONV_BUF_TYPE* src0,
+                                       uint32_t src0_stride,
+                                       const CONV_BUF_TYPE* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       uint32_t mask_stride,
+                                       int w,
+                                       int h,
+                                       int subx,
+                                       int suby,
+                                       ConvolveParams* conv_params);
+#define aom_lowbd_blend_a64_d16_mask aom_lowbd_blend_a64_d16_mask_neon
+
+void aom_lpf_horizontal_14_c(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_horizontal_14 aom_lpf_horizontal_14_c
+
+void aom_lpf_horizontal_14_dual_c(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_horizontal_14_dual aom_lpf_horizontal_14_dual_c
+
+void aom_lpf_horizontal_4_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_c
+
+void aom_lpf_horizontal_4_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
+
+void aom_lpf_horizontal_6_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_6_neon(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_6 aom_lpf_horizontal_6_neon
+
+void aom_lpf_horizontal_6_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_6_dual aom_lpf_horizontal_6_dual_c
+
+void aom_lpf_horizontal_8_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_8_neon(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_8 aom_lpf_horizontal_8_neon
+
+void aom_lpf_horizontal_8_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
+
+void aom_lpf_vertical_14_c(uint8_t* s,
+                           int pitch,
+                           const uint8_t* blimit,
+                           const uint8_t* limit,
+                           const uint8_t* thresh);
+void aom_lpf_vertical_14_neon(uint8_t* s,
+                              int pitch,
+                              const uint8_t* blimit,
+                              const uint8_t* limit,
+                              const uint8_t* thresh);
+#define aom_lpf_vertical_14 aom_lpf_vertical_14_neon
+
+void aom_lpf_vertical_14_dual_c(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit0,
+                                const uint8_t* limit0,
+                                const uint8_t* thresh0,
+                                const uint8_t* blimit1,
+                                const uint8_t* limit1,
+                                const uint8_t* thresh1);
+#define aom_lpf_vertical_14_dual aom_lpf_vertical_14_dual_c
+
+void aom_lpf_vertical_4_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_4 aom_lpf_vertical_4_c
+
+void aom_lpf_vertical_4_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
+
+void aom_lpf_vertical_6_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_6 aom_lpf_vertical_6_c
+
+void aom_lpf_vertical_6_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_6_dual aom_lpf_vertical_6_dual_c
+
+void aom_lpf_vertical_8_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_8_neon(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_vertical_8 aom_lpf_vertical_8_neon
+
+void aom_lpf_vertical_8_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
+
+void aom_paeth_predictor_16x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
+
+void aom_paeth_predictor_16x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
+
+void aom_paeth_predictor_16x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x4 aom_paeth_predictor_16x4_c
+
+void aom_paeth_predictor_16x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x64 aom_paeth_predictor_16x64_c
+
+void aom_paeth_predictor_16x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
+
+void aom_paeth_predictor_2x2_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
+
+void aom_paeth_predictor_32x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
+
+void aom_paeth_predictor_32x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
+
+void aom_paeth_predictor_32x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x64 aom_paeth_predictor_32x64_c
+
+void aom_paeth_predictor_32x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_32x8 aom_paeth_predictor_32x8_c
+
+void aom_paeth_predictor_4x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_4x16 aom_paeth_predictor_4x16_c
+
+void aom_paeth_predictor_4x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
+
+void aom_paeth_predictor_4x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
+
+void aom_paeth_predictor_64x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x16 aom_paeth_predictor_64x16_c
+
+void aom_paeth_predictor_64x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x32 aom_paeth_predictor_64x32_c
+
+void aom_paeth_predictor_64x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x64 aom_paeth_predictor_64x64_c
+
+void aom_paeth_predictor_8x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
+
+void aom_paeth_predictor_8x32_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x32 aom_paeth_predictor_8x32_c
+
+void aom_paeth_predictor_8x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
+
+void aom_paeth_predictor_8x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
+
+void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
+
+void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
+
+void aom_smooth_h_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x4 aom_smooth_h_predictor_16x4_c
+
+void aom_smooth_h_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x64 aom_smooth_h_predictor_16x64_c
+
+void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
+
+void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
+
+void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
+
+void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
+
+void aom_smooth_h_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x64 aom_smooth_h_predictor_32x64_c
+
+void aom_smooth_h_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_32x8 aom_smooth_h_predictor_32x8_c
+
+void aom_smooth_h_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_4x16 aom_smooth_h_predictor_4x16_c
+
+void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
+
+void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
+
+void aom_smooth_h_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x16 aom_smooth_h_predictor_64x16_c
+
+void aom_smooth_h_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x32 aom_smooth_h_predictor_64x32_c
+
+void aom_smooth_h_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x64 aom_smooth_h_predictor_64x64_c
+
+void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
+
+void aom_smooth_h_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x32 aom_smooth_h_predictor_8x32_c
+
+void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
+
+void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
+
+void aom_smooth_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
+
+void aom_smooth_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
+
+void aom_smooth_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x4 aom_smooth_predictor_16x4_c
+
+void aom_smooth_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x64 aom_smooth_predictor_16x64_c
+
+void aom_smooth_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
+
+void aom_smooth_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
+
+void aom_smooth_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
+
+void aom_smooth_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
+
+void aom_smooth_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x64 aom_smooth_predictor_32x64_c
+
+void aom_smooth_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_32x8 aom_smooth_predictor_32x8_c
+
+void aom_smooth_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_4x16 aom_smooth_predictor_4x16_c
+
+void aom_smooth_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
+
+void aom_smooth_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
+
+void aom_smooth_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x16 aom_smooth_predictor_64x16_c
+
+void aom_smooth_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x32 aom_smooth_predictor_64x32_c
+
+void aom_smooth_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x64 aom_smooth_predictor_64x64_c
+
+void aom_smooth_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
+
+void aom_smooth_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x32 aom_smooth_predictor_8x32_c
+
+void aom_smooth_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
+
+void aom_smooth_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
+
+void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
+
+void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
+
+void aom_smooth_v_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x4 aom_smooth_v_predictor_16x4_c
+
+void aom_smooth_v_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x64 aom_smooth_v_predictor_16x64_c
+
+void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
+
+void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
+
+void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
+
+void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
+
+void aom_smooth_v_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x64 aom_smooth_v_predictor_32x64_c
+
+void aom_smooth_v_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_32x8 aom_smooth_v_predictor_32x8_c
+
+void aom_smooth_v_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_4x16 aom_smooth_v_predictor_4x16_c
+
+void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
+
+void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
+
+void aom_smooth_v_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x16 aom_smooth_v_predictor_64x16_c
+
+void aom_smooth_v_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x32 aom_smooth_v_predictor_64x32_c
+
+void aom_smooth_v_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x64 aom_smooth_v_predictor_64x64_c
+
+void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
+
+void aom_smooth_v_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x32 aom_smooth_v_predictor_8x32_c
+
+void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
+
+void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
+
+void aom_v_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x16_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_16x16 aom_v_predictor_16x16_neon
+
+void aom_v_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
+
+void aom_v_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x4 aom_v_predictor_16x4_c
+
+void aom_v_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x64 aom_v_predictor_16x64_c
+
+void aom_v_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
+
+void aom_v_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
+
+void aom_v_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
+
+void aom_v_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x32_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_32x32 aom_v_predictor_32x32_neon
+
+void aom_v_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x64 aom_v_predictor_32x64_c
+
+void aom_v_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_32x8 aom_v_predictor_32x8_c
+
+void aom_v_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_4x16 aom_v_predictor_4x16_c
+
+void aom_v_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x4_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_4x4 aom_v_predictor_4x4_neon
+
+void aom_v_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
+
+void aom_v_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x16 aom_v_predictor_64x16_c
+
+void aom_v_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x32 aom_v_predictor_64x32_c
+
+void aom_v_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x64 aom_v_predictor_64x64_c
+
+void aom_v_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
+
+void aom_v_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x32 aom_v_predictor_8x32_c
+
+void aom_v_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
+
+void aom_v_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x8_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_8x8 aom_v_predictor_8x8_neon
+
+void av1_round_shift_array_c(int32_t* arr, int size, int bit);
+void av1_round_shift_array_neon(int32_t* arr, int size, int bit);
+#define av1_round_shift_array av1_round_shift_array_neon
+
+void aom_dsp_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+#include "aom_ports/arm.h"
+static void setup_rtcd_internal(void) {
+  int flags = arm_cpu_caps();
+
+  (void)flags;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h b/third_party/libaom/source/config/linux/arm-neon/config/aom_scale_rtcd.h
similarity index 70%
copy from third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
copy to third_party/libaom/source/config/linux/arm-neon/config/aom_scale_rtcd.h
index fbf3bde..ce01c830 100644
--- a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
+++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_scale_rtcd.h
@@ -1,3 +1,4 @@
+// This file is generated. Do not edit.
 #ifndef AOM_SCALE_RTCD_H_
 #define AOM_SCALE_RTCD_H_
 
@@ -13,13 +14,15 @@
 extern "C" {
 #endif
 
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                const int num_planes);
 #define aom_extend_frame_borders aom_extend_frame_borders_c
 
 void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
 #define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
 
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf,
+                                      const int num_planes);
 #define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
 
 void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
@@ -69,7 +72,8 @@
 #define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
 
 void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
+                           struct yv12_buffer_config* dst_bc,
+                           const int num_planes);
 #define aom_yv12_copy_frame aom_yv12_copy_frame_c
 
 void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
@@ -84,15 +88,42 @@
                        struct yv12_buffer_config* dst_ybc);
 #define aom_yv12_copy_y aom_yv12_copy_y_c
 
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                     const int num_planes);
 #define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
 
+void aom_yv12_partial_copy_u_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_u aom_yv12_partial_copy_u_c
+
+void aom_yv12_partial_copy_v_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_v aom_yv12_partial_copy_v_c
+
+void aom_yv12_partial_copy_y_c(const struct yv12_buffer_config* src_ybc,
+                               struct yv12_buffer_config* dst_ybc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_y aom_yv12_partial_copy_y_c
+
 void aom_scale_rtcd(void);
 
+#include "config/aom_config.h"
+
 #ifdef RTCD_C
-#include "aom_ports/x86.h"
+#include "aom_ports/arm.h"
 static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
+  int flags = arm_cpu_caps();
 
   (void)flags;
 }
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/av1_rtcd.h b/third_party/libaom/source/config/linux/arm-neon/config/av1_rtcd.h
new file mode 100644
index 0000000..f35ba56
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm-neon/config/av1_rtcd.h
@@ -0,0 +1,982 @@
+// This file is generated. Do not edit.
+#ifndef AV1_RTCD_H_
+#define AV1_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * AV1
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/txfm_common.h"
+#include "av1/common/av1_txfm.h"
+#include "av1/common/common.h"
+#include "av1/common/convolve.h"
+#include "av1/common/enums.h"
+#include "av1/common/filter.h"
+#include "av1/common/odintrin.h"
+#include "av1/common/quant_common.h"
+#include "av1/common/restoration.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct txfm_param;
+struct aom_variance_vtable;
+struct search_site_config;
+struct yv12_buffer_config;
+
+/* Function pointers return by CfL functions */
+typedef void (*cfl_subsample_lbd_fn)(const uint8_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subsample_hbd_fn)(const uint16_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subtract_average_fn)(const uint16_t* src, int16_t* dst);
+
+typedef void (*cfl_predict_lbd_fn)(const int16_t* src,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3);
+
+typedef void (*cfl_predict_hbd_fn)(const int16_t* src,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3,
+                                   int bd);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void apply_selfguided_restoration_c(const uint8_t* dat,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    int eps,
+                                    const int* xqd,
+                                    uint8_t* dst,
+                                    int dst_stride,
+                                    int32_t* tmpbuf,
+                                    int bit_depth,
+                                    int highbd);
+#define apply_selfguided_restoration apply_selfguided_restoration_c
+
+void av1_build_compound_diffwtd_mask_c(uint8_t* mask,
+                                       DIFFWTD_MASK_TYPE mask_type,
+                                       const uint8_t* src0,
+                                       int src0_stride,
+                                       const uint8_t* src1,
+                                       int src1_stride,
+                                       int h,
+                                       int w);
+#define av1_build_compound_diffwtd_mask av1_build_compound_diffwtd_mask_c
+
+void av1_build_compound_diffwtd_mask_d16_c(uint8_t* mask,
+                                           DIFFWTD_MASK_TYPE mask_type,
+                                           const CONV_BUF_TYPE* src0,
+                                           int src0_stride,
+                                           const CONV_BUF_TYPE* src1,
+                                           int src1_stride,
+                                           int h,
+                                           int w,
+                                           ConvolveParams* conv_params,
+                                           int bd);
+#define av1_build_compound_diffwtd_mask_d16 \
+  av1_build_compound_diffwtd_mask_d16_c
+
+void av1_build_compound_diffwtd_mask_highbd_c(uint8_t* mask,
+                                              DIFFWTD_MASK_TYPE mask_type,
+                                              const uint8_t* src0,
+                                              int src0_stride,
+                                              const uint8_t* src1,
+                                              int src1_stride,
+                                              int h,
+                                              int w,
+                                              int bd);
+#define av1_build_compound_diffwtd_mask_highbd \
+  av1_build_compound_diffwtd_mask_highbd_c
+
+void av1_convolve_2d_copy_sr_c(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_neon(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+#define av1_convolve_2d_copy_sr av1_convolve_2d_copy_sr_neon
+
+void av1_convolve_2d_scale_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_qn,
+                             const int x_step_qn,
+                             const int subpel_y_q4,
+                             const int y_step_qn,
+                             ConvolveParams* conv_params);
+#define av1_convolve_2d_scale av1_convolve_2d_scale_c
+
+void av1_convolve_2d_sr_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_convolve_2d_sr_neon(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+#define av1_convolve_2d_sr av1_convolve_2d_sr_neon
+
+void av1_convolve_horiz_rs_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             const int16_t* x_filters,
+                             int x0_qn,
+                             int x_step_qn);
+#define av1_convolve_horiz_rs av1_convolve_horiz_rs_c
+
+void av1_convolve_x_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_x_sr_neon(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+#define av1_convolve_x_sr av1_convolve_x_sr_neon
+
+void av1_convolve_y_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_y_sr_neon(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+#define av1_convolve_y_sr av1_convolve_y_sr_neon
+
+void av1_dr_prediction_z1_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z1 av1_dr_prediction_z1_c
+
+void av1_dr_prediction_z2_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z2 av1_dr_prediction_z2_c
+
+void av1_dr_prediction_z3_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z3 av1_dr_prediction_z3_c
+
+void av1_filter_intra_edge_c(uint8_t* p, int sz, int strength);
+#define av1_filter_intra_edge av1_filter_intra_edge_c
+
+void av1_filter_intra_edge_high_c(uint16_t* p, int sz, int strength);
+#define av1_filter_intra_edge_high av1_filter_intra_edge_high_c
+
+void av1_filter_intra_predictor_c(uint8_t* dst,
+                                  ptrdiff_t stride,
+                                  TX_SIZE tx_size,
+                                  const uint8_t* above,
+                                  const uint8_t* left,
+                                  int mode);
+#define av1_filter_intra_predictor av1_filter_intra_predictor_c
+
+void av1_highbd_convolve8_c(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h,
+                            int bps);
+#define av1_highbd_convolve8 av1_highbd_convolve8_c
+
+void av1_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define av1_highbd_convolve8_horiz av1_highbd_convolve8_horiz_c
+
+void av1_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define av1_highbd_convolve8_vert av1_highbd_convolve8_vert_c
+
+void av1_highbd_convolve_2d_copy_sr_c(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+#define av1_highbd_convolve_2d_copy_sr av1_highbd_convolve_2d_copy_sr_c
+
+void av1_highbd_convolve_2d_scale_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int x_step_qn,
+                                    const int subpel_y_q4,
+                                    const int y_step_qn,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+#define av1_highbd_convolve_2d_scale av1_highbd_convolve_2d_scale_c
+
+void av1_highbd_convolve_2d_sr_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_convolve_2d_sr av1_highbd_convolve_2d_sr_c
+
+void av1_highbd_convolve_avg_c(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve_avg av1_highbd_convolve_avg_c
+
+void av1_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define av1_highbd_convolve_copy av1_highbd_convolve_copy_c
+
+void av1_highbd_convolve_horiz_rs_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    const int16_t* x_filters,
+                                    int x0_qn,
+                                    int x_step_qn,
+                                    int bd);
+#define av1_highbd_convolve_horiz_rs av1_highbd_convolve_horiz_rs_c
+
+void av1_highbd_convolve_x_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_x_sr av1_highbd_convolve_x_sr_c
+
+void av1_highbd_convolve_y_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_y_sr av1_highbd_convolve_y_sr_c
+
+void av1_highbd_dr_prediction_z1_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z1 av1_highbd_dr_prediction_z1_c
+
+void av1_highbd_dr_prediction_z2_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z2 av1_highbd_dr_prediction_z2_c
+
+void av1_highbd_dr_prediction_z3_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z3 av1_highbd_dr_prediction_z3_c
+
+void av1_highbd_iwht4x4_16_add_c(const tran_low_t* input,
+                                 uint8_t* dest,
+                                 int dest_stride,
+                                 int bd);
+#define av1_highbd_iwht4x4_16_add av1_highbd_iwht4x4_16_add_c
+
+void av1_highbd_iwht4x4_1_add_c(const tran_low_t* input,
+                                uint8_t* dest,
+                                int dest_stride,
+                                int bd);
+#define av1_highbd_iwht4x4_1_add av1_highbd_iwht4x4_1_add_c
+
+void av1_highbd_jnt_convolve_2d_c(const uint16_t* src,
+                                  int src_stride,
+                                  uint16_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params,
+                                  int bd);
+#define av1_highbd_jnt_convolve_2d av1_highbd_jnt_convolve_2d_c
+
+void av1_highbd_jnt_convolve_2d_copy_c(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+#define av1_highbd_jnt_convolve_2d_copy av1_highbd_jnt_convolve_2d_copy_c
+
+void av1_highbd_jnt_convolve_x_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_x av1_highbd_jnt_convolve_x_c
+
+void av1_highbd_jnt_convolve_y_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_y av1_highbd_jnt_convolve_y_c
+
+void av1_highbd_warp_affine_c(const int32_t* mat,
+                              const uint16_t* ref,
+                              int width,
+                              int height,
+                              int stride,
+                              uint16_t* pred,
+                              int p_col,
+                              int p_row,
+                              int p_width,
+                              int p_height,
+                              int p_stride,
+                              int subsampling_x,
+                              int subsampling_y,
+                              int bd,
+                              ConvolveParams* conv_params,
+                              int16_t alpha,
+                              int16_t beta,
+                              int16_t gamma,
+                              int16_t delta);
+#define av1_highbd_warp_affine av1_highbd_warp_affine_c
+
+void av1_highbd_wiener_convolve_add_src_c(const uint8_t* src,
+                                          ptrdiff_t src_stride,
+                                          uint8_t* dst,
+                                          ptrdiff_t dst_stride,
+                                          const int16_t* filter_x,
+                                          int x_step_q4,
+                                          const int16_t* filter_y,
+                                          int y_step_q4,
+                                          int w,
+                                          int h,
+                                          const ConvolveParams* conv_params,
+                                          int bps);
+#define av1_highbd_wiener_convolve_add_src av1_highbd_wiener_convolve_add_src_c
+
+void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x16 av1_inv_txfm2d_add_16x16_c
+
+void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
+
+void av1_inv_txfm2d_add_16x4_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x4 av1_inv_txfm2d_add_16x4_c
+
+void av1_inv_txfm2d_add_16x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x64 av1_inv_txfm2d_add_16x64_c
+
+void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
+
+void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
+
+void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x32 av1_inv_txfm2d_add_32x32_c
+
+void av1_inv_txfm2d_add_32x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x64 av1_inv_txfm2d_add_32x64_c
+
+void av1_inv_txfm2d_add_32x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_32x8 av1_inv_txfm2d_add_32x8_c
+
+void av1_inv_txfm2d_add_4x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_4x16 av1_inv_txfm2d_add_4x16_c
+
+void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x4 av1_inv_txfm2d_add_4x4_c
+
+void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
+
+void av1_inv_txfm2d_add_64x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x16 av1_inv_txfm2d_add_64x16_c
+
+void av1_inv_txfm2d_add_64x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x32 av1_inv_txfm2d_add_64x32_c
+
+void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
+
+void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
+
+void av1_inv_txfm2d_add_8x32_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x32 av1_inv_txfm2d_add_8x32_c
+
+void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
+
+void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x8 av1_inv_txfm2d_add_8x8_c
+
+void av1_inv_txfm_add_c(const tran_low_t* dqcoeff,
+                        uint8_t* dst,
+                        int stride,
+                        const TxfmParam* txfm_param);
+#define av1_inv_txfm_add av1_inv_txfm_add_c
+
+void av1_jnt_convolve_2d_c(const uint8_t* src,
+                           int src_stride,
+                           uint8_t* dst,
+                           int dst_stride,
+                           int w,
+                           int h,
+                           InterpFilterParams* filter_params_x,
+                           InterpFilterParams* filter_params_y,
+                           const int subpel_x_q4,
+                           const int subpel_y_q4,
+                           ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_neon(const uint8_t* src,
+                              int src_stride,
+                              uint8_t* dst,
+                              int dst_stride,
+                              int w,
+                              int h,
+                              InterpFilterParams* filter_params_x,
+                              InterpFilterParams* filter_params_y,
+                              const int subpel_x_q4,
+                              const int subpel_y_q4,
+                              ConvolveParams* conv_params);
+#define av1_jnt_convolve_2d av1_jnt_convolve_2d_neon
+
+void av1_jnt_convolve_2d_copy_c(const uint8_t* src,
+                                int src_stride,
+                                uint8_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_neon(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+#define av1_jnt_convolve_2d_copy av1_jnt_convolve_2d_copy_neon
+
+void av1_jnt_convolve_x_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_x_neon(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+#define av1_jnt_convolve_x av1_jnt_convolve_x_neon
+
+void av1_jnt_convolve_y_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_y_neon(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+#define av1_jnt_convolve_y av1_jnt_convolve_y_neon
+
+void av1_selfguided_restoration_c(const uint8_t* dgd8,
+                                  int width,
+                                  int height,
+                                  int dgd_stride,
+                                  int32_t* flt0,
+                                  int32_t* flt1,
+                                  int flt_stride,
+                                  int sgr_params_idx,
+                                  int bit_depth,
+                                  int highbd);
+#define av1_selfguided_restoration av1_selfguided_restoration_c
+
+void av1_upsample_intra_edge_c(uint8_t* p, int sz);
+#define av1_upsample_intra_edge av1_upsample_intra_edge_c
+
+void av1_upsample_intra_edge_high_c(uint16_t* p, int sz, int bd);
+#define av1_upsample_intra_edge_high av1_upsample_intra_edge_high_c
+
+void av1_warp_affine_c(const int32_t* mat,
+                       const uint8_t* ref,
+                       int width,
+                       int height,
+                       int stride,
+                       uint8_t* pred,
+                       int p_col,
+                       int p_row,
+                       int p_width,
+                       int p_height,
+                       int p_stride,
+                       int subsampling_x,
+                       int subsampling_y,
+                       ConvolveParams* conv_params,
+                       int16_t alpha,
+                       int16_t beta,
+                       int16_t gamma,
+                       int16_t delta);
+#define av1_warp_affine av1_warp_affine_c
+
+void av1_wiener_convolve_add_src_c(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_neon(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+#define av1_wiener_convolve_add_src av1_wiener_convolve_add_src_neon
+
+void cdef_filter_block_c(uint8_t* dst8,
+                         uint16_t* dst16,
+                         int dstride,
+                         const uint16_t* in,
+                         int pri_strength,
+                         int sec_strength,
+                         int dir,
+                         int pri_damping,
+                         int sec_damping,
+                         int bsize,
+                         int max,
+                         int coeff_shift);
+void cdef_filter_block_neon(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+#define cdef_filter_block cdef_filter_block_neon
+
+int cdef_find_dir_c(const uint16_t* img,
+                    int stride,
+                    int32_t* var,
+                    int coeff_shift);
+int cdef_find_dir_neon(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+#define cdef_find_dir cdef_find_dir_neon
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_420_hbd cfl_get_luma_subsampling_420_hbd_neon
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_420_lbd cfl_get_luma_subsampling_420_lbd_neon
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_422_hbd cfl_get_luma_subsampling_422_hbd_neon
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_422_lbd cfl_get_luma_subsampling_422_lbd_neon
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_444_hbd cfl_get_luma_subsampling_444_hbd_neon
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_444_lbd cfl_get_luma_subsampling_444_lbd_neon
+
+void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
+                                 int dstride,
+                                 const uint16_t* src,
+                                 int sstride,
+                                 int v,
+                                 int h);
+void copy_rect8_16bit_to_16bit_neon(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+#define copy_rect8_16bit_to_16bit copy_rect8_16bit_to_16bit_neon
+
+void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
+                                int dstride,
+                                const uint8_t* src,
+                                int sstride,
+                                int v,
+                                int h);
+void copy_rect8_8bit_to_16bit_neon(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+#define copy_rect8_8bit_to_16bit copy_rect8_8bit_to_16bit_neon
+
+cfl_predict_hbd_fn get_predict_hbd_fn_c(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_neon(TX_SIZE tx_size);
+#define get_predict_hbd_fn get_predict_hbd_fn_neon
+
+cfl_predict_lbd_fn get_predict_lbd_fn_c(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_neon(TX_SIZE tx_size);
+#define get_predict_lbd_fn get_predict_lbd_fn_neon
+
+cfl_subtract_average_fn get_subtract_average_fn_c(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_neon(TX_SIZE tx_size);
+#define get_subtract_average_fn get_subtract_average_fn_neon
+
+void av1_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+#include "aom_ports/arm.h"
+static void setup_rtcd_internal(void) {
+  int flags = arm_cpu_caps();
+
+  (void)flags;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.asm b/third_party/libaom/source/config/linux/arm/config/aom_config.asm
new file mode 100644
index 0000000..840f3a6
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm/config/aom_config.asm
@@ -0,0 +1,73 @@
+;
+; Copyright (c) 2018, Alliance for Open Media. All rights reserved
+;
+; This source code is subject to the terms of the BSD 2 Clause License and
+; the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+; was not distributed with this source code in the LICENSE file, you can
+; obtain it at www.aomedia.org/license/software. If the Alliance for Open
+; Media Patent License 1.0 was not distributed with this source code in the
+; PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+;
+ARCH_ARM equ 1
+ARCH_MIPS equ 0
+ARCH_PPC equ 0
+ARCH_X86 equ 0
+ARCH_X86_64 equ 0
+CONFIG_ACCOUNTING equ 0
+CONFIG_ANALYZER equ 0
+CONFIG_AV1_DECODER equ 1
+CONFIG_AV1_ENCODER equ 0
+CONFIG_BIG_ENDIAN equ 0
+CONFIG_BITSTREAM_DEBUG equ 0
+CONFIG_COEFFICIENT_RANGE_CHECKING equ 0
+CONFIG_COLLECT_INTER_MODE_RD_STATS equ 1
+CONFIG_COLLECT_RD_STATS equ 0
+CONFIG_DEBUG equ 0
+CONFIG_DECODE_PERF_TESTS equ 0
+CONFIG_DIST_8X8 equ 1
+CONFIG_ENCODE_PERF_TESTS equ 0
+CONFIG_ENTROPY_STATS equ 0
+CONFIG_FILEOPTIONS equ 1
+CONFIG_FP_MB_STATS equ 0
+CONFIG_GCC equ 1
+CONFIG_GCOV equ 0
+CONFIG_GPROF equ 0
+CONFIG_INSPECTION equ 0
+CONFIG_INTERNAL_STATS equ 0
+CONFIG_INTER_STATS_ONLY equ 0
+CONFIG_LIBYUV equ 1
+CONFIG_LOWBITDEPTH equ 1
+CONFIG_MISMATCH_DEBUG equ 0
+CONFIG_MSVS equ 0
+CONFIG_MULTITHREAD equ 1
+CONFIG_OS_SUPPORT equ 1
+CONFIG_PIC equ 0
+CONFIG_RD_DEBUG equ 0
+CONFIG_RUNTIME_CPU_DETECT equ 0
+CONFIG_SHARED equ 0
+CONFIG_SIZE_LIMIT equ 1
+CONFIG_SPATIAL_RESAMPLING equ 1
+CONFIG_STATIC equ 1
+CONFIG_UNIT_TESTS equ 1
+CONFIG_WEBM_IO equ 1
+DECODE_HEIGHT_LIMIT equ 16384
+DECODE_WIDTH_LIMIT equ 16384
+HAVE_AVX equ 0
+HAVE_AVX2 equ 0
+HAVE_DSPR2 equ 0
+HAVE_FEXCEPT equ 1
+HAVE_MIPS32 equ 0
+HAVE_MIPS64 equ 0
+HAVE_MMX equ 0
+HAVE_MSA equ 0
+HAVE_NEON equ 0
+HAVE_PTHREAD_H equ 1
+HAVE_SSE equ 0
+HAVE_SSE2 equ 0
+HAVE_SSE3 equ 0
+HAVE_SSE4_1 equ 0
+HAVE_SSE4_2 equ 0
+HAVE_SSSE3 equ 0
+HAVE_UNISTD_H equ 1
+HAVE_VSX equ 0
+HAVE_WXWIDGETS equ 0
diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.c b/third_party/libaom/source/config/linux/arm/config/aom_config.c
new file mode 100644
index 0000000..27a92cf
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm/config/aom_config.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2016, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#include "aom/aom_codec.h"
+static const char* const cfg = "-G \"Unix Makefiles\" -DCMAKE_TOOLCHAIN_FILE=\"/usr/local/google/home/johannkoenig/chromium/chromium/src/third_party/libaom/source/libaom/build/cmake/toolchains/armv7-linux-gcc.cmake\" -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=1 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=16384 -DDECODE_WIDTH_LIMIT=16384";
+const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.h b/third_party/libaom/source/config/linux/arm/config/aom_config.h
new file mode 100644
index 0000000..6077fcc
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm/config/aom_config.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#ifndef AOM_CONFIG_H_
+#define AOM_CONFIG_H_
+#define ARCH_ARM 1
+#define ARCH_MIPS 0
+#define ARCH_PPC 0
+#define ARCH_X86 0
+#define ARCH_X86_64 0
+#define CONFIG_ACCOUNTING 0
+#define CONFIG_ANALYZER 0
+#define CONFIG_AV1_DECODER 1
+#define CONFIG_AV1_ENCODER 0
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+#define CONFIG_COLLECT_RD_STATS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_DIST_8X8 1
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_ENTROPY_STATS 0
+#define CONFIG_FILEOPTIONS 1
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_GCC 1
+#define CONFIG_GCOV 0
+#define CONFIG_GPROF 0
+#define CONFIG_INSPECTION 0
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_INTER_STATS_ONLY 0
+#define CONFIG_LIBYUV 1
+#define CONFIG_LOWBITDEPTH 1
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_MSVS 0
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_PIC 0
+#define CONFIG_RD_DEBUG 0
+#define CONFIG_RUNTIME_CPU_DETECT 0
+#define CONFIG_SHARED 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_STATIC 1
+#define CONFIG_UNIT_TESTS 1
+#define CONFIG_WEBM_IO 1
+#define DECODE_HEIGHT_LIMIT 16384
+#define DECODE_WIDTH_LIMIT 16384
+#define HAVE_AVX 0
+#define HAVE_AVX2 0
+#define HAVE_DSPR2 0
+#define HAVE_FEXCEPT 1
+#define HAVE_MIPS32 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 0
+#define HAVE_MSA 0
+#define HAVE_NEON 0
+#define HAVE_PTHREAD_H 1
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define HAVE_SSE3 0
+#define HAVE_SSE4_1 0
+#define HAVE_SSE4_2 0
+#define HAVE_SSSE3 0
+#define HAVE_UNISTD_H 1
+#define HAVE_VSX 0
+#define HAVE_WXWIDGETS 0
+#define INLINE inline
+#endif /* AOM_CONFIG_H_ */
diff --git a/third_party/libaom/source/config/linux/arm/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm/config/aom_dsp_rtcd.h
new file mode 100644
index 0000000..5a51059
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm/config/aom_dsp_rtcd.h
@@ -0,0 +1,3131 @@
+// This file is generated. Do not edit.
+#ifndef AOM_DSP_RTCD_H_
+#define AOM_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/aom_dsp_common.h"
+#include "av1/common/blockd.h"
+#include "av1/common/enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void aom_blend_a64_hmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_hmask aom_blend_a64_hmask_c
+
+void aom_blend_a64_mask_c(uint8_t* dst,
+                          uint32_t dst_stride,
+                          const uint8_t* src0,
+                          uint32_t src0_stride,
+                          const uint8_t* src1,
+                          uint32_t src1_stride,
+                          const uint8_t* mask,
+                          uint32_t mask_stride,
+                          int w,
+                          int h,
+                          int subx,
+                          int suby);
+#define aom_blend_a64_mask aom_blend_a64_mask_c
+
+void aom_blend_a64_vmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_vmask aom_blend_a64_vmask_c
+
+void aom_convolve8_horiz_c(const uint8_t* src,
+                           ptrdiff_t src_stride,
+                           uint8_t* dst,
+                           ptrdiff_t dst_stride,
+                           const int16_t* filter_x,
+                           int x_step_q4,
+                           const int16_t* filter_y,
+                           int y_step_q4,
+                           int w,
+                           int h);
+#define aom_convolve8_horiz aom_convolve8_horiz_c
+
+void aom_convolve8_vert_c(const uint8_t* src,
+                          ptrdiff_t src_stride,
+                          uint8_t* dst,
+                          ptrdiff_t dst_stride,
+                          const int16_t* filter_x,
+                          int x_step_q4,
+                          const int16_t* filter_y,
+                          int y_step_q4,
+                          int w,
+                          int h);
+#define aom_convolve8_vert aom_convolve8_vert_c
+
+void aom_convolve_copy_c(const uint8_t* src,
+                         ptrdiff_t src_stride,
+                         uint8_t* dst,
+                         ptrdiff_t dst_stride,
+                         const int16_t* filter_x,
+                         int x_step_q4,
+                         const int16_t* filter_y,
+                         int y_step_q4,
+                         int w,
+                         int h);
+#define aom_convolve_copy aom_convolve_copy_c
+
+void aom_dc_128_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x16 aom_dc_128_predictor_16x16_c
+
+void aom_dc_128_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
+
+void aom_dc_128_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x4 aom_dc_128_predictor_16x4_c
+
+void aom_dc_128_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x64 aom_dc_128_predictor_16x64_c
+
+void aom_dc_128_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
+
+void aom_dc_128_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
+
+void aom_dc_128_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
+
+void aom_dc_128_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x32 aom_dc_128_predictor_32x32_c
+
+void aom_dc_128_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x64 aom_dc_128_predictor_32x64_c
+
+void aom_dc_128_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_32x8 aom_dc_128_predictor_32x8_c
+
+void aom_dc_128_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_4x16 aom_dc_128_predictor_4x16_c
+
+void aom_dc_128_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_4x4 aom_dc_128_predictor_4x4_c
+
+void aom_dc_128_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
+
+void aom_dc_128_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x16 aom_dc_128_predictor_64x16_c
+
+void aom_dc_128_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x32 aom_dc_128_predictor_64x32_c
+
+void aom_dc_128_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x64 aom_dc_128_predictor_64x64_c
+
+void aom_dc_128_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
+
+void aom_dc_128_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x32 aom_dc_128_predictor_8x32_c
+
+void aom_dc_128_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
+
+void aom_dc_128_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_8x8 aom_dc_128_predictor_8x8_c
+
+void aom_dc_left_predictor_16x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x16 aom_dc_left_predictor_16x16_c
+
+void aom_dc_left_predictor_16x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
+
+void aom_dc_left_predictor_16x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x4 aom_dc_left_predictor_16x4_c
+
+void aom_dc_left_predictor_16x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x64 aom_dc_left_predictor_16x64_c
+
+void aom_dc_left_predictor_16x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
+
+void aom_dc_left_predictor_2x2_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
+
+void aom_dc_left_predictor_32x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
+
+void aom_dc_left_predictor_32x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x32 aom_dc_left_predictor_32x32_c
+
+void aom_dc_left_predictor_32x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x64 aom_dc_left_predictor_32x64_c
+
+void aom_dc_left_predictor_32x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_32x8 aom_dc_left_predictor_32x8_c
+
+void aom_dc_left_predictor_4x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_4x16 aom_dc_left_predictor_4x16_c
+
+void aom_dc_left_predictor_4x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_4x4 aom_dc_left_predictor_4x4_c
+
+void aom_dc_left_predictor_4x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
+
+void aom_dc_left_predictor_64x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x16 aom_dc_left_predictor_64x16_c
+
+void aom_dc_left_predictor_64x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x32 aom_dc_left_predictor_64x32_c
+
+void aom_dc_left_predictor_64x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x64 aom_dc_left_predictor_64x64_c
+
+void aom_dc_left_predictor_8x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
+
+void aom_dc_left_predictor_8x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x32 aom_dc_left_predictor_8x32_c
+
+void aom_dc_left_predictor_8x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
+
+void aom_dc_left_predictor_8x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_8x8 aom_dc_left_predictor_8x8_c
+
+void aom_dc_predictor_16x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x16 aom_dc_predictor_16x16_c
+
+void aom_dc_predictor_16x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
+
+void aom_dc_predictor_16x4_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x4 aom_dc_predictor_16x4_c
+
+void aom_dc_predictor_16x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x64 aom_dc_predictor_16x64_c
+
+void aom_dc_predictor_16x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
+
+void aom_dc_predictor_2x2_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
+
+void aom_dc_predictor_32x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
+
+void aom_dc_predictor_32x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x32 aom_dc_predictor_32x32_c
+
+void aom_dc_predictor_32x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x64 aom_dc_predictor_32x64_c
+
+void aom_dc_predictor_32x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_32x8 aom_dc_predictor_32x8_c
+
+void aom_dc_predictor_4x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_4x16 aom_dc_predictor_4x16_c
+
+void aom_dc_predictor_4x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_4x4 aom_dc_predictor_4x4_c
+
+void aom_dc_predictor_4x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
+
+void aom_dc_predictor_64x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x16 aom_dc_predictor_64x16_c
+
+void aom_dc_predictor_64x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x32 aom_dc_predictor_64x32_c
+
+void aom_dc_predictor_64x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x64 aom_dc_predictor_64x64_c
+
+void aom_dc_predictor_8x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
+
+void aom_dc_predictor_8x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x32 aom_dc_predictor_8x32_c
+
+void aom_dc_predictor_8x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
+
+void aom_dc_predictor_8x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_8x8 aom_dc_predictor_8x8_c
+
+void aom_dc_top_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x16 aom_dc_top_predictor_16x16_c
+
+void aom_dc_top_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
+
+void aom_dc_top_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x4 aom_dc_top_predictor_16x4_c
+
+void aom_dc_top_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x64 aom_dc_top_predictor_16x64_c
+
+void aom_dc_top_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
+
+void aom_dc_top_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
+
+void aom_dc_top_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
+
+void aom_dc_top_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x32 aom_dc_top_predictor_32x32_c
+
+void aom_dc_top_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x64 aom_dc_top_predictor_32x64_c
+
+void aom_dc_top_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_32x8 aom_dc_top_predictor_32x8_c
+
+void aom_dc_top_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_4x16 aom_dc_top_predictor_4x16_c
+
+void aom_dc_top_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_4x4 aom_dc_top_predictor_4x4_c
+
+void aom_dc_top_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
+
+void aom_dc_top_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x16 aom_dc_top_predictor_64x16_c
+
+void aom_dc_top_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x32 aom_dc_top_predictor_64x32_c
+
+void aom_dc_top_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x64 aom_dc_top_predictor_64x64_c
+
+void aom_dc_top_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
+
+void aom_dc_top_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x32 aom_dc_top_predictor_8x32_c
+
+void aom_dc_top_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
+
+void aom_dc_top_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_8x8 aom_dc_top_predictor_8x8_c
+
+void aom_h_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x16 aom_h_predictor_16x16_c
+
+void aom_h_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
+
+void aom_h_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x4 aom_h_predictor_16x4_c
+
+void aom_h_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x64 aom_h_predictor_16x64_c
+
+void aom_h_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
+
+void aom_h_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
+
+void aom_h_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
+
+void aom_h_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x32 aom_h_predictor_32x32_c
+
+void aom_h_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x64 aom_h_predictor_32x64_c
+
+void aom_h_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_32x8 aom_h_predictor_32x8_c
+
+void aom_h_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_4x16 aom_h_predictor_4x16_c
+
+void aom_h_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_4x4 aom_h_predictor_4x4_c
+
+void aom_h_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
+
+void aom_h_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x16 aom_h_predictor_64x16_c
+
+void aom_h_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x32 aom_h_predictor_64x32_c
+
+void aom_h_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x64 aom_h_predictor_64x64_c
+
+void aom_h_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
+
+void aom_h_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x32 aom_h_predictor_8x32_c
+
+void aom_h_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
+
+void aom_h_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_8x8 aom_h_predictor_8x8_c
+
+void aom_highbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                     uint32_t dst_stride,
+                                     const CONV_BUF_TYPE* src0,
+                                     uint32_t src0_stride,
+                                     const CONV_BUF_TYPE* src1,
+                                     uint32_t src1_stride,
+                                     const uint8_t* mask,
+                                     uint32_t mask_stride,
+                                     int w,
+                                     int h,
+                                     int subx,
+                                     int suby,
+                                     ConvolveParams* conv_params,
+                                     const int bd);
+#define aom_highbd_blend_a64_d16_mask aom_highbd_blend_a64_d16_mask_c
+
+void aom_highbd_blend_a64_hmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_hmask aom_highbd_blend_a64_hmask_c
+
+void aom_highbd_blend_a64_mask_c(uint8_t* dst,
+                                 uint32_t dst_stride,
+                                 const uint8_t* src0,
+                                 uint32_t src0_stride,
+                                 const uint8_t* src1,
+                                 uint32_t src1_stride,
+                                 const uint8_t* mask,
+                                 uint32_t mask_stride,
+                                 int w,
+                                 int h,
+                                 int subx,
+                                 int suby,
+                                 int bd);
+#define aom_highbd_blend_a64_mask aom_highbd_blend_a64_mask_c
+
+void aom_highbd_blend_a64_vmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_vmask aom_highbd_blend_a64_vmask_c
+
+void aom_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define aom_highbd_convolve8_horiz aom_highbd_convolve8_horiz_c
+
+void aom_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define aom_highbd_convolve8_vert aom_highbd_convolve8_vert_c
+
+void aom_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define aom_highbd_convolve_copy aom_highbd_convolve_copy_c
+
+void aom_highbd_dc_128_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x16 aom_highbd_dc_128_predictor_16x16_c
+
+void aom_highbd_dc_128_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x32 aom_highbd_dc_128_predictor_16x32_c
+
+void aom_highbd_dc_128_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x4 aom_highbd_dc_128_predictor_16x4_c
+
+void aom_highbd_dc_128_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x64 aom_highbd_dc_128_predictor_16x64_c
+
+void aom_highbd_dc_128_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x8 aom_highbd_dc_128_predictor_16x8_c
+
+void aom_highbd_dc_128_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_2x2 aom_highbd_dc_128_predictor_2x2_c
+
+void aom_highbd_dc_128_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x16 aom_highbd_dc_128_predictor_32x16_c
+
+void aom_highbd_dc_128_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x32 aom_highbd_dc_128_predictor_32x32_c
+
+void aom_highbd_dc_128_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x64 aom_highbd_dc_128_predictor_32x64_c
+
+void aom_highbd_dc_128_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_32x8 aom_highbd_dc_128_predictor_32x8_c
+
+void aom_highbd_dc_128_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_4x16 aom_highbd_dc_128_predictor_4x16_c
+
+void aom_highbd_dc_128_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x4 aom_highbd_dc_128_predictor_4x4_c
+
+void aom_highbd_dc_128_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x8 aom_highbd_dc_128_predictor_4x8_c
+
+void aom_highbd_dc_128_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x16 aom_highbd_dc_128_predictor_64x16_c
+
+void aom_highbd_dc_128_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x32 aom_highbd_dc_128_predictor_64x32_c
+
+void aom_highbd_dc_128_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x64 aom_highbd_dc_128_predictor_64x64_c
+
+void aom_highbd_dc_128_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x16 aom_highbd_dc_128_predictor_8x16_c
+
+void aom_highbd_dc_128_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x32 aom_highbd_dc_128_predictor_8x32_c
+
+void aom_highbd_dc_128_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x4 aom_highbd_dc_128_predictor_8x4_c
+
+void aom_highbd_dc_128_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x8 aom_highbd_dc_128_predictor_8x8_c
+
+void aom_highbd_dc_left_predictor_16x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x16 aom_highbd_dc_left_predictor_16x16_c
+
+void aom_highbd_dc_left_predictor_16x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x32 aom_highbd_dc_left_predictor_16x32_c
+
+void aom_highbd_dc_left_predictor_16x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x4 aom_highbd_dc_left_predictor_16x4_c
+
+void aom_highbd_dc_left_predictor_16x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x64 aom_highbd_dc_left_predictor_16x64_c
+
+void aom_highbd_dc_left_predictor_16x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x8 aom_highbd_dc_left_predictor_16x8_c
+
+void aom_highbd_dc_left_predictor_2x2_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_2x2 aom_highbd_dc_left_predictor_2x2_c
+
+void aom_highbd_dc_left_predictor_32x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x16 aom_highbd_dc_left_predictor_32x16_c
+
+void aom_highbd_dc_left_predictor_32x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x32 aom_highbd_dc_left_predictor_32x32_c
+
+void aom_highbd_dc_left_predictor_32x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x64 aom_highbd_dc_left_predictor_32x64_c
+
+void aom_highbd_dc_left_predictor_32x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_32x8 aom_highbd_dc_left_predictor_32x8_c
+
+void aom_highbd_dc_left_predictor_4x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_4x16 aom_highbd_dc_left_predictor_4x16_c
+
+void aom_highbd_dc_left_predictor_4x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x4 aom_highbd_dc_left_predictor_4x4_c
+
+void aom_highbd_dc_left_predictor_4x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x8 aom_highbd_dc_left_predictor_4x8_c
+
+void aom_highbd_dc_left_predictor_64x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x16 aom_highbd_dc_left_predictor_64x16_c
+
+void aom_highbd_dc_left_predictor_64x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x32 aom_highbd_dc_left_predictor_64x32_c
+
+void aom_highbd_dc_left_predictor_64x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x64 aom_highbd_dc_left_predictor_64x64_c
+
+void aom_highbd_dc_left_predictor_8x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x16 aom_highbd_dc_left_predictor_8x16_c
+
+void aom_highbd_dc_left_predictor_8x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x32 aom_highbd_dc_left_predictor_8x32_c
+
+void aom_highbd_dc_left_predictor_8x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x4 aom_highbd_dc_left_predictor_8x4_c
+
+void aom_highbd_dc_left_predictor_8x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x8 aom_highbd_dc_left_predictor_8x8_c
+
+void aom_highbd_dc_predictor_16x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x16 aom_highbd_dc_predictor_16x16_c
+
+void aom_highbd_dc_predictor_16x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x32 aom_highbd_dc_predictor_16x32_c
+
+void aom_highbd_dc_predictor_16x4_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x4 aom_highbd_dc_predictor_16x4_c
+
+void aom_highbd_dc_predictor_16x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x64 aom_highbd_dc_predictor_16x64_c
+
+void aom_highbd_dc_predictor_16x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x8 aom_highbd_dc_predictor_16x8_c
+
+void aom_highbd_dc_predictor_2x2_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_2x2 aom_highbd_dc_predictor_2x2_c
+
+void aom_highbd_dc_predictor_32x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x16 aom_highbd_dc_predictor_32x16_c
+
+void aom_highbd_dc_predictor_32x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x32 aom_highbd_dc_predictor_32x32_c
+
+void aom_highbd_dc_predictor_32x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x64 aom_highbd_dc_predictor_32x64_c
+
+void aom_highbd_dc_predictor_32x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_32x8 aom_highbd_dc_predictor_32x8_c
+
+void aom_highbd_dc_predictor_4x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_4x16 aom_highbd_dc_predictor_4x16_c
+
+void aom_highbd_dc_predictor_4x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x4 aom_highbd_dc_predictor_4x4_c
+
+void aom_highbd_dc_predictor_4x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x8 aom_highbd_dc_predictor_4x8_c
+
+void aom_highbd_dc_predictor_64x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x16 aom_highbd_dc_predictor_64x16_c
+
+void aom_highbd_dc_predictor_64x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x32 aom_highbd_dc_predictor_64x32_c
+
+void aom_highbd_dc_predictor_64x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x64 aom_highbd_dc_predictor_64x64_c
+
+void aom_highbd_dc_predictor_8x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x16 aom_highbd_dc_predictor_8x16_c
+
+void aom_highbd_dc_predictor_8x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x32 aom_highbd_dc_predictor_8x32_c
+
+void aom_highbd_dc_predictor_8x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x4 aom_highbd_dc_predictor_8x4_c
+
+void aom_highbd_dc_predictor_8x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x8 aom_highbd_dc_predictor_8x8_c
+
+void aom_highbd_dc_top_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x16 aom_highbd_dc_top_predictor_16x16_c
+
+void aom_highbd_dc_top_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x32 aom_highbd_dc_top_predictor_16x32_c
+
+void aom_highbd_dc_top_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x4 aom_highbd_dc_top_predictor_16x4_c
+
+void aom_highbd_dc_top_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x64 aom_highbd_dc_top_predictor_16x64_c
+
+void aom_highbd_dc_top_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x8 aom_highbd_dc_top_predictor_16x8_c
+
+void aom_highbd_dc_top_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_2x2 aom_highbd_dc_top_predictor_2x2_c
+
+void aom_highbd_dc_top_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x16 aom_highbd_dc_top_predictor_32x16_c
+
+void aom_highbd_dc_top_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x32 aom_highbd_dc_top_predictor_32x32_c
+
+void aom_highbd_dc_top_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x64 aom_highbd_dc_top_predictor_32x64_c
+
+void aom_highbd_dc_top_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_32x8 aom_highbd_dc_top_predictor_32x8_c
+
+void aom_highbd_dc_top_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_4x16 aom_highbd_dc_top_predictor_4x16_c
+
+void aom_highbd_dc_top_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x4 aom_highbd_dc_top_predictor_4x4_c
+
+void aom_highbd_dc_top_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x8 aom_highbd_dc_top_predictor_4x8_c
+
+void aom_highbd_dc_top_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x16 aom_highbd_dc_top_predictor_64x16_c
+
+void aom_highbd_dc_top_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x32 aom_highbd_dc_top_predictor_64x32_c
+
+void aom_highbd_dc_top_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x64 aom_highbd_dc_top_predictor_64x64_c
+
+void aom_highbd_dc_top_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x16 aom_highbd_dc_top_predictor_8x16_c
+
+void aom_highbd_dc_top_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x32 aom_highbd_dc_top_predictor_8x32_c
+
+void aom_highbd_dc_top_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x4 aom_highbd_dc_top_predictor_8x4_c
+
+void aom_highbd_dc_top_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x8 aom_highbd_dc_top_predictor_8x8_c
+
+void aom_highbd_h_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x16 aom_highbd_h_predictor_16x16_c
+
+void aom_highbd_h_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x32 aom_highbd_h_predictor_16x32_c
+
+void aom_highbd_h_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x4 aom_highbd_h_predictor_16x4_c
+
+void aom_highbd_h_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x64 aom_highbd_h_predictor_16x64_c
+
+void aom_highbd_h_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x8 aom_highbd_h_predictor_16x8_c
+
+void aom_highbd_h_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_2x2 aom_highbd_h_predictor_2x2_c
+
+void aom_highbd_h_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x16 aom_highbd_h_predictor_32x16_c
+
+void aom_highbd_h_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x32 aom_highbd_h_predictor_32x32_c
+
+void aom_highbd_h_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x64 aom_highbd_h_predictor_32x64_c
+
+void aom_highbd_h_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_32x8 aom_highbd_h_predictor_32x8_c
+
+void aom_highbd_h_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_4x16 aom_highbd_h_predictor_4x16_c
+
+void aom_highbd_h_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x4 aom_highbd_h_predictor_4x4_c
+
+void aom_highbd_h_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x8 aom_highbd_h_predictor_4x8_c
+
+void aom_highbd_h_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x16 aom_highbd_h_predictor_64x16_c
+
+void aom_highbd_h_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x32 aom_highbd_h_predictor_64x32_c
+
+void aom_highbd_h_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x64 aom_highbd_h_predictor_64x64_c
+
+void aom_highbd_h_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x16 aom_highbd_h_predictor_8x16_c
+
+void aom_highbd_h_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x32 aom_highbd_h_predictor_8x32_c
+
+void aom_highbd_h_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x4 aom_highbd_h_predictor_8x4_c
+
+void aom_highbd_h_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x8 aom_highbd_h_predictor_8x8_c
+
+void aom_highbd_lpf_horizontal_14_c(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_horizontal_14 aom_highbd_lpf_horizontal_14_c
+
+void aom_highbd_lpf_horizontal_14_dual_c(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limt1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+#define aom_highbd_lpf_horizontal_14_dual aom_highbd_lpf_horizontal_14_dual_c
+
+void aom_highbd_lpf_horizontal_4_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_4 aom_highbd_lpf_horizontal_4_c
+
+void aom_highbd_lpf_horizontal_4_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_4_dual aom_highbd_lpf_horizontal_4_dual_c
+
+void aom_highbd_lpf_horizontal_6_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_6 aom_highbd_lpf_horizontal_6_c
+
+void aom_highbd_lpf_horizontal_6_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_6_dual aom_highbd_lpf_horizontal_6_dual_c
+
+void aom_highbd_lpf_horizontal_8_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_8 aom_highbd_lpf_horizontal_8_c
+
+void aom_highbd_lpf_horizontal_8_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_8_dual aom_highbd_lpf_horizontal_8_dual_c
+
+void aom_highbd_lpf_vertical_14_c(uint16_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit,
+                                  const uint8_t* limit,
+                                  const uint8_t* thresh,
+                                  int bd);
+#define aom_highbd_lpf_vertical_14 aom_highbd_lpf_vertical_14_c
+
+void aom_highbd_lpf_vertical_14_dual_c(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit0,
+                                       const uint8_t* limit0,
+                                       const uint8_t* thresh0,
+                                       const uint8_t* blimit1,
+                                       const uint8_t* limit1,
+                                       const uint8_t* thresh1,
+                                       int bd);
+#define aom_highbd_lpf_vertical_14_dual aom_highbd_lpf_vertical_14_dual_c
+
+void aom_highbd_lpf_vertical_4_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_4 aom_highbd_lpf_vertical_4_c
+
+void aom_highbd_lpf_vertical_4_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_4_dual aom_highbd_lpf_vertical_4_dual_c
+
+void aom_highbd_lpf_vertical_6_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_6 aom_highbd_lpf_vertical_6_c
+
+void aom_highbd_lpf_vertical_6_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_6_dual aom_highbd_lpf_vertical_6_dual_c
+
+void aom_highbd_lpf_vertical_8_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_8 aom_highbd_lpf_vertical_8_c
+
+void aom_highbd_lpf_vertical_8_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_8_dual aom_highbd_lpf_vertical_8_dual_c
+
+void aom_highbd_paeth_predictor_16x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x16 aom_highbd_paeth_predictor_16x16_c
+
+void aom_highbd_paeth_predictor_16x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x32 aom_highbd_paeth_predictor_16x32_c
+
+void aom_highbd_paeth_predictor_16x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x4 aom_highbd_paeth_predictor_16x4_c
+
+void aom_highbd_paeth_predictor_16x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x64 aom_highbd_paeth_predictor_16x64_c
+
+void aom_highbd_paeth_predictor_16x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x8 aom_highbd_paeth_predictor_16x8_c
+
+void aom_highbd_paeth_predictor_2x2_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_2x2 aom_highbd_paeth_predictor_2x2_c
+
+void aom_highbd_paeth_predictor_32x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x16 aom_highbd_paeth_predictor_32x16_c
+
+void aom_highbd_paeth_predictor_32x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x32 aom_highbd_paeth_predictor_32x32_c
+
+void aom_highbd_paeth_predictor_32x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x64 aom_highbd_paeth_predictor_32x64_c
+
+void aom_highbd_paeth_predictor_32x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_32x8 aom_highbd_paeth_predictor_32x8_c
+
+void aom_highbd_paeth_predictor_4x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_4x16 aom_highbd_paeth_predictor_4x16_c
+
+void aom_highbd_paeth_predictor_4x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x4 aom_highbd_paeth_predictor_4x4_c
+
+void aom_highbd_paeth_predictor_4x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x8 aom_highbd_paeth_predictor_4x8_c
+
+void aom_highbd_paeth_predictor_64x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x16 aom_highbd_paeth_predictor_64x16_c
+
+void aom_highbd_paeth_predictor_64x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x32 aom_highbd_paeth_predictor_64x32_c
+
+void aom_highbd_paeth_predictor_64x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x64 aom_highbd_paeth_predictor_64x64_c
+
+void aom_highbd_paeth_predictor_8x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x16 aom_highbd_paeth_predictor_8x16_c
+
+void aom_highbd_paeth_predictor_8x32_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x32 aom_highbd_paeth_predictor_8x32_c
+
+void aom_highbd_paeth_predictor_8x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x4 aom_highbd_paeth_predictor_8x4_c
+
+void aom_highbd_paeth_predictor_8x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x8 aom_highbd_paeth_predictor_8x8_c
+
+void aom_highbd_smooth_h_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x16 \
+  aom_highbd_smooth_h_predictor_16x16_c
+
+void aom_highbd_smooth_h_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x32 \
+  aom_highbd_smooth_h_predictor_16x32_c
+
+void aom_highbd_smooth_h_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x4 aom_highbd_smooth_h_predictor_16x4_c
+
+void aom_highbd_smooth_h_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x64 \
+  aom_highbd_smooth_h_predictor_16x64_c
+
+void aom_highbd_smooth_h_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x8 aom_highbd_smooth_h_predictor_16x8_c
+
+void aom_highbd_smooth_h_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_2x2 aom_highbd_smooth_h_predictor_2x2_c
+
+void aom_highbd_smooth_h_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x16 \
+  aom_highbd_smooth_h_predictor_32x16_c
+
+void aom_highbd_smooth_h_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x32 \
+  aom_highbd_smooth_h_predictor_32x32_c
+
+void aom_highbd_smooth_h_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x64 \
+  aom_highbd_smooth_h_predictor_32x64_c
+
+void aom_highbd_smooth_h_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_32x8 aom_highbd_smooth_h_predictor_32x8_c
+
+void aom_highbd_smooth_h_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_4x16 aom_highbd_smooth_h_predictor_4x16_c
+
+void aom_highbd_smooth_h_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x4 aom_highbd_smooth_h_predictor_4x4_c
+
+void aom_highbd_smooth_h_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x8 aom_highbd_smooth_h_predictor_4x8_c
+
+void aom_highbd_smooth_h_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x16 \
+  aom_highbd_smooth_h_predictor_64x16_c
+
+void aom_highbd_smooth_h_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x32 \
+  aom_highbd_smooth_h_predictor_64x32_c
+
+void aom_highbd_smooth_h_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x64 \
+  aom_highbd_smooth_h_predictor_64x64_c
+
+void aom_highbd_smooth_h_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x16 aom_highbd_smooth_h_predictor_8x16_c
+
+void aom_highbd_smooth_h_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x32 aom_highbd_smooth_h_predictor_8x32_c
+
+void aom_highbd_smooth_h_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x4 aom_highbd_smooth_h_predictor_8x4_c
+
+void aom_highbd_smooth_h_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x8 aom_highbd_smooth_h_predictor_8x8_c
+
+void aom_highbd_smooth_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x16 aom_highbd_smooth_predictor_16x16_c
+
+void aom_highbd_smooth_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x32 aom_highbd_smooth_predictor_16x32_c
+
+void aom_highbd_smooth_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x4 aom_highbd_smooth_predictor_16x4_c
+
+void aom_highbd_smooth_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x64 aom_highbd_smooth_predictor_16x64_c
+
+void aom_highbd_smooth_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x8 aom_highbd_smooth_predictor_16x8_c
+
+void aom_highbd_smooth_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_2x2 aom_highbd_smooth_predictor_2x2_c
+
+void aom_highbd_smooth_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x16 aom_highbd_smooth_predictor_32x16_c
+
+void aom_highbd_smooth_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x32 aom_highbd_smooth_predictor_32x32_c
+
+void aom_highbd_smooth_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x64 aom_highbd_smooth_predictor_32x64_c
+
+void aom_highbd_smooth_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_32x8 aom_highbd_smooth_predictor_32x8_c
+
+void aom_highbd_smooth_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_4x16 aom_highbd_smooth_predictor_4x16_c
+
+void aom_highbd_smooth_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x4 aom_highbd_smooth_predictor_4x4_c
+
+void aom_highbd_smooth_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x8 aom_highbd_smooth_predictor_4x8_c
+
+void aom_highbd_smooth_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x16 aom_highbd_smooth_predictor_64x16_c
+
+void aom_highbd_smooth_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x32 aom_highbd_smooth_predictor_64x32_c
+
+void aom_highbd_smooth_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x64 aom_highbd_smooth_predictor_64x64_c
+
+void aom_highbd_smooth_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x16 aom_highbd_smooth_predictor_8x16_c
+
+void aom_highbd_smooth_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x32 aom_highbd_smooth_predictor_8x32_c
+
+void aom_highbd_smooth_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x4 aom_highbd_smooth_predictor_8x4_c
+
+void aom_highbd_smooth_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x8 aom_highbd_smooth_predictor_8x8_c
+
+void aom_highbd_smooth_v_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x16 \
+  aom_highbd_smooth_v_predictor_16x16_c
+
+void aom_highbd_smooth_v_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x32 \
+  aom_highbd_smooth_v_predictor_16x32_c
+
+void aom_highbd_smooth_v_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x4 aom_highbd_smooth_v_predictor_16x4_c
+
+void aom_highbd_smooth_v_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x64 \
+  aom_highbd_smooth_v_predictor_16x64_c
+
+void aom_highbd_smooth_v_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x8 aom_highbd_smooth_v_predictor_16x8_c
+
+void aom_highbd_smooth_v_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_2x2 aom_highbd_smooth_v_predictor_2x2_c
+
+void aom_highbd_smooth_v_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x16 \
+  aom_highbd_smooth_v_predictor_32x16_c
+
+void aom_highbd_smooth_v_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x32 \
+  aom_highbd_smooth_v_predictor_32x32_c
+
+void aom_highbd_smooth_v_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x64 \
+  aom_highbd_smooth_v_predictor_32x64_c
+
+void aom_highbd_smooth_v_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_32x8 aom_highbd_smooth_v_predictor_32x8_c
+
+void aom_highbd_smooth_v_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_4x16 aom_highbd_smooth_v_predictor_4x16_c
+
+void aom_highbd_smooth_v_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x4 aom_highbd_smooth_v_predictor_4x4_c
+
+void aom_highbd_smooth_v_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x8 aom_highbd_smooth_v_predictor_4x8_c
+
+void aom_highbd_smooth_v_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x16 \
+  aom_highbd_smooth_v_predictor_64x16_c
+
+void aom_highbd_smooth_v_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x32 \
+  aom_highbd_smooth_v_predictor_64x32_c
+
+void aom_highbd_smooth_v_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x64 \
+  aom_highbd_smooth_v_predictor_64x64_c
+
+void aom_highbd_smooth_v_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x16 aom_highbd_smooth_v_predictor_8x16_c
+
+void aom_highbd_smooth_v_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x32 aom_highbd_smooth_v_predictor_8x32_c
+
+void aom_highbd_smooth_v_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x4 aom_highbd_smooth_v_predictor_8x4_c
+
+void aom_highbd_smooth_v_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x8 aom_highbd_smooth_v_predictor_8x8_c
+
+void aom_highbd_v_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x16 aom_highbd_v_predictor_16x16_c
+
+void aom_highbd_v_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x32 aom_highbd_v_predictor_16x32_c
+
+void aom_highbd_v_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x4 aom_highbd_v_predictor_16x4_c
+
+void aom_highbd_v_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x64 aom_highbd_v_predictor_16x64_c
+
+void aom_highbd_v_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x8 aom_highbd_v_predictor_16x8_c
+
+void aom_highbd_v_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_2x2 aom_highbd_v_predictor_2x2_c
+
+void aom_highbd_v_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x16 aom_highbd_v_predictor_32x16_c
+
+void aom_highbd_v_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x32 aom_highbd_v_predictor_32x32_c
+
+void aom_highbd_v_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x64 aom_highbd_v_predictor_32x64_c
+
+void aom_highbd_v_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_32x8 aom_highbd_v_predictor_32x8_c
+
+void aom_highbd_v_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_4x16 aom_highbd_v_predictor_4x16_c
+
+void aom_highbd_v_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x4 aom_highbd_v_predictor_4x4_c
+
+void aom_highbd_v_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x8 aom_highbd_v_predictor_4x8_c
+
+void aom_highbd_v_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x16 aom_highbd_v_predictor_64x16_c
+
+void aom_highbd_v_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x32 aom_highbd_v_predictor_64x32_c
+
+void aom_highbd_v_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x64 aom_highbd_v_predictor_64x64_c
+
+void aom_highbd_v_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x16 aom_highbd_v_predictor_8x16_c
+
+void aom_highbd_v_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x32 aom_highbd_v_predictor_8x32_c
+
+void aom_highbd_v_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x4 aom_highbd_v_predictor_8x4_c
+
+void aom_highbd_v_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x8 aom_highbd_v_predictor_8x8_c
+
+void aom_lowbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                    uint32_t dst_stride,
+                                    const CONV_BUF_TYPE* src0,
+                                    uint32_t src0_stride,
+                                    const CONV_BUF_TYPE* src1,
+                                    uint32_t src1_stride,
+                                    const uint8_t* mask,
+                                    uint32_t mask_stride,
+                                    int w,
+                                    int h,
+                                    int subx,
+                                    int suby,
+                                    ConvolveParams* conv_params);
+#define aom_lowbd_blend_a64_d16_mask aom_lowbd_blend_a64_d16_mask_c
+
+void aom_lpf_horizontal_14_c(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_horizontal_14 aom_lpf_horizontal_14_c
+
+void aom_lpf_horizontal_14_dual_c(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_horizontal_14_dual aom_lpf_horizontal_14_dual_c
+
+void aom_lpf_horizontal_4_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_c
+
+void aom_lpf_horizontal_4_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
+
+void aom_lpf_horizontal_6_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+#define aom_lpf_horizontal_6 aom_lpf_horizontal_6_c
+
+void aom_lpf_horizontal_6_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_6_dual aom_lpf_horizontal_6_dual_c
+
+void aom_lpf_horizontal_8_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+#define aom_lpf_horizontal_8 aom_lpf_horizontal_8_c
+
+void aom_lpf_horizontal_8_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
+
+void aom_lpf_vertical_14_c(uint8_t* s,
+                           int pitch,
+                           const uint8_t* blimit,
+                           const uint8_t* limit,
+                           const uint8_t* thresh);
+#define aom_lpf_vertical_14 aom_lpf_vertical_14_c
+
+void aom_lpf_vertical_14_dual_c(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit0,
+                                const uint8_t* limit0,
+                                const uint8_t* thresh0,
+                                const uint8_t* blimit1,
+                                const uint8_t* limit1,
+                                const uint8_t* thresh1);
+#define aom_lpf_vertical_14_dual aom_lpf_vertical_14_dual_c
+
+void aom_lpf_vertical_4_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_4 aom_lpf_vertical_4_c
+
+void aom_lpf_vertical_4_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
+
+void aom_lpf_vertical_6_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_6 aom_lpf_vertical_6_c
+
+void aom_lpf_vertical_6_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_6_dual aom_lpf_vertical_6_dual_c
+
+void aom_lpf_vertical_8_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_8 aom_lpf_vertical_8_c
+
+void aom_lpf_vertical_8_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
+
+void aom_paeth_predictor_16x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
+
+void aom_paeth_predictor_16x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
+
+void aom_paeth_predictor_16x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x4 aom_paeth_predictor_16x4_c
+
+void aom_paeth_predictor_16x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x64 aom_paeth_predictor_16x64_c
+
+void aom_paeth_predictor_16x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
+
+void aom_paeth_predictor_2x2_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
+
+void aom_paeth_predictor_32x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
+
+void aom_paeth_predictor_32x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
+
+void aom_paeth_predictor_32x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x64 aom_paeth_predictor_32x64_c
+
+void aom_paeth_predictor_32x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_32x8 aom_paeth_predictor_32x8_c
+
+void aom_paeth_predictor_4x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_4x16 aom_paeth_predictor_4x16_c
+
+void aom_paeth_predictor_4x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
+
+void aom_paeth_predictor_4x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
+
+void aom_paeth_predictor_64x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x16 aom_paeth_predictor_64x16_c
+
+void aom_paeth_predictor_64x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x32 aom_paeth_predictor_64x32_c
+
+void aom_paeth_predictor_64x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x64 aom_paeth_predictor_64x64_c
+
+void aom_paeth_predictor_8x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
+
+void aom_paeth_predictor_8x32_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x32 aom_paeth_predictor_8x32_c
+
+void aom_paeth_predictor_8x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
+
+void aom_paeth_predictor_8x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
+
+void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
+
+void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
+
+void aom_smooth_h_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x4 aom_smooth_h_predictor_16x4_c
+
+void aom_smooth_h_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x64 aom_smooth_h_predictor_16x64_c
+
+void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
+
+void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
+
+void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
+
+void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
+
+void aom_smooth_h_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x64 aom_smooth_h_predictor_32x64_c
+
+void aom_smooth_h_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_32x8 aom_smooth_h_predictor_32x8_c
+
+void aom_smooth_h_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_4x16 aom_smooth_h_predictor_4x16_c
+
+void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
+
+void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
+
+void aom_smooth_h_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x16 aom_smooth_h_predictor_64x16_c
+
+void aom_smooth_h_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x32 aom_smooth_h_predictor_64x32_c
+
+void aom_smooth_h_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x64 aom_smooth_h_predictor_64x64_c
+
+void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
+
+void aom_smooth_h_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x32 aom_smooth_h_predictor_8x32_c
+
+void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
+
+void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
+
+void aom_smooth_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
+
+void aom_smooth_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
+
+void aom_smooth_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x4 aom_smooth_predictor_16x4_c
+
+void aom_smooth_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x64 aom_smooth_predictor_16x64_c
+
+void aom_smooth_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
+
+void aom_smooth_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
+
+void aom_smooth_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
+
+void aom_smooth_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
+
+void aom_smooth_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x64 aom_smooth_predictor_32x64_c
+
+void aom_smooth_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_32x8 aom_smooth_predictor_32x8_c
+
+void aom_smooth_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_4x16 aom_smooth_predictor_4x16_c
+
+void aom_smooth_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
+
+void aom_smooth_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
+
+void aom_smooth_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x16 aom_smooth_predictor_64x16_c
+
+void aom_smooth_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x32 aom_smooth_predictor_64x32_c
+
+void aom_smooth_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x64 aom_smooth_predictor_64x64_c
+
+void aom_smooth_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
+
+void aom_smooth_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x32 aom_smooth_predictor_8x32_c
+
+void aom_smooth_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
+
+void aom_smooth_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
+
+void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
+
+void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
+
+void aom_smooth_v_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x4 aom_smooth_v_predictor_16x4_c
+
+void aom_smooth_v_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x64 aom_smooth_v_predictor_16x64_c
+
+void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
+
+void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
+
+void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
+
+void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
+
+void aom_smooth_v_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x64 aom_smooth_v_predictor_32x64_c
+
+void aom_smooth_v_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_32x8 aom_smooth_v_predictor_32x8_c
+
+void aom_smooth_v_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_4x16 aom_smooth_v_predictor_4x16_c
+
+void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
+
+void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
+
+void aom_smooth_v_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x16 aom_smooth_v_predictor_64x16_c
+
+void aom_smooth_v_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x32 aom_smooth_v_predictor_64x32_c
+
+void aom_smooth_v_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x64 aom_smooth_v_predictor_64x64_c
+
+void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
+
+void aom_smooth_v_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x32 aom_smooth_v_predictor_8x32_c
+
+void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
+
+void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
+
+void aom_v_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x16 aom_v_predictor_16x16_c
+
+void aom_v_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
+
+void aom_v_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x4 aom_v_predictor_16x4_c
+
+void aom_v_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x64 aom_v_predictor_16x64_c
+
+void aom_v_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
+
+void aom_v_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
+
+void aom_v_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
+
+void aom_v_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x32 aom_v_predictor_32x32_c
+
+void aom_v_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x64 aom_v_predictor_32x64_c
+
+void aom_v_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_32x8 aom_v_predictor_32x8_c
+
+void aom_v_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_4x16 aom_v_predictor_4x16_c
+
+void aom_v_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_4x4 aom_v_predictor_4x4_c
+
+void aom_v_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
+
+void aom_v_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x16 aom_v_predictor_64x16_c
+
+void aom_v_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x32 aom_v_predictor_64x32_c
+
+void aom_v_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x64 aom_v_predictor_64x64_c
+
+void aom_v_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
+
+void aom_v_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x32 aom_v_predictor_8x32_c
+
+void aom_v_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
+
+void aom_v_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_8x8 aom_v_predictor_8x8_c
+
+void av1_round_shift_array_c(int32_t* arr, int size, int bit);
+#define av1_round_shift_array av1_round_shift_array_c
+
+void aom_dsp_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+#include "aom_ports/arm.h"
+static void setup_rtcd_internal(void) {
+  int flags = arm_cpu_caps();
+
+  (void)flags;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h b/third_party/libaom/source/config/linux/arm/config/aom_scale_rtcd.h
similarity index 70%
copy from third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
copy to third_party/libaom/source/config/linux/arm/config/aom_scale_rtcd.h
index fbf3bde..ce01c830 100644
--- a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
+++ b/third_party/libaom/source/config/linux/arm/config/aom_scale_rtcd.h
@@ -1,3 +1,4 @@
+// This file is generated. Do not edit.
 #ifndef AOM_SCALE_RTCD_H_
 #define AOM_SCALE_RTCD_H_
 
@@ -13,13 +14,15 @@
 extern "C" {
 #endif
 
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                const int num_planes);
 #define aom_extend_frame_borders aom_extend_frame_borders_c
 
 void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
 #define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
 
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf,
+                                      const int num_planes);
 #define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
 
 void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
@@ -69,7 +72,8 @@
 #define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
 
 void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
+                           struct yv12_buffer_config* dst_bc,
+                           const int num_planes);
 #define aom_yv12_copy_frame aom_yv12_copy_frame_c
 
 void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
@@ -84,15 +88,42 @@
                        struct yv12_buffer_config* dst_ybc);
 #define aom_yv12_copy_y aom_yv12_copy_y_c
 
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                     const int num_planes);
 #define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
 
+void aom_yv12_partial_copy_u_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_u aom_yv12_partial_copy_u_c
+
+void aom_yv12_partial_copy_v_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_v aom_yv12_partial_copy_v_c
+
+void aom_yv12_partial_copy_y_c(const struct yv12_buffer_config* src_ybc,
+                               struct yv12_buffer_config* dst_ybc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_y aom_yv12_partial_copy_y_c
+
 void aom_scale_rtcd(void);
 
+#include "config/aom_config.h"
+
 #ifdef RTCD_C
-#include "aom_ports/x86.h"
+#include "aom_ports/arm.h"
 static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
+  int flags = arm_cpu_caps();
 
   (void)flags;
 }
diff --git a/third_party/libaom/source/config/linux/arm/config/av1_rtcd.h b/third_party/libaom/source/config/linux/arm/config/av1_rtcd.h
new file mode 100644
index 0000000..cddcc8b
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm/config/av1_rtcd.h
@@ -0,0 +1,846 @@
+// This file is generated. Do not edit.
+#ifndef AV1_RTCD_H_
+#define AV1_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * AV1
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/txfm_common.h"
+#include "av1/common/av1_txfm.h"
+#include "av1/common/common.h"
+#include "av1/common/convolve.h"
+#include "av1/common/enums.h"
+#include "av1/common/filter.h"
+#include "av1/common/odintrin.h"
+#include "av1/common/quant_common.h"
+#include "av1/common/restoration.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct txfm_param;
+struct aom_variance_vtable;
+struct search_site_config;
+struct yv12_buffer_config;
+
+/* Function pointers return by CfL functions */
+typedef void (*cfl_subsample_lbd_fn)(const uint8_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subsample_hbd_fn)(const uint16_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subtract_average_fn)(const uint16_t* src, int16_t* dst);
+
+typedef void (*cfl_predict_lbd_fn)(const int16_t* src,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3);
+
+typedef void (*cfl_predict_hbd_fn)(const int16_t* src,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3,
+                                   int bd);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void apply_selfguided_restoration_c(const uint8_t* dat,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    int eps,
+                                    const int* xqd,
+                                    uint8_t* dst,
+                                    int dst_stride,
+                                    int32_t* tmpbuf,
+                                    int bit_depth,
+                                    int highbd);
+#define apply_selfguided_restoration apply_selfguided_restoration_c
+
+void av1_build_compound_diffwtd_mask_c(uint8_t* mask,
+                                       DIFFWTD_MASK_TYPE mask_type,
+                                       const uint8_t* src0,
+                                       int src0_stride,
+                                       const uint8_t* src1,
+                                       int src1_stride,
+                                       int h,
+                                       int w);
+#define av1_build_compound_diffwtd_mask av1_build_compound_diffwtd_mask_c
+
+void av1_build_compound_diffwtd_mask_d16_c(uint8_t* mask,
+                                           DIFFWTD_MASK_TYPE mask_type,
+                                           const CONV_BUF_TYPE* src0,
+                                           int src0_stride,
+                                           const CONV_BUF_TYPE* src1,
+                                           int src1_stride,
+                                           int h,
+                                           int w,
+                                           ConvolveParams* conv_params,
+                                           int bd);
+#define av1_build_compound_diffwtd_mask_d16 \
+  av1_build_compound_diffwtd_mask_d16_c
+
+void av1_build_compound_diffwtd_mask_highbd_c(uint8_t* mask,
+                                              DIFFWTD_MASK_TYPE mask_type,
+                                              const uint8_t* src0,
+                                              int src0_stride,
+                                              const uint8_t* src1,
+                                              int src1_stride,
+                                              int h,
+                                              int w,
+                                              int bd);
+#define av1_build_compound_diffwtd_mask_highbd \
+  av1_build_compound_diffwtd_mask_highbd_c
+
+void av1_convolve_2d_copy_sr_c(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+#define av1_convolve_2d_copy_sr av1_convolve_2d_copy_sr_c
+
+void av1_convolve_2d_scale_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_qn,
+                             const int x_step_qn,
+                             const int subpel_y_q4,
+                             const int y_step_qn,
+                             ConvolveParams* conv_params);
+#define av1_convolve_2d_scale av1_convolve_2d_scale_c
+
+void av1_convolve_2d_sr_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+#define av1_convolve_2d_sr av1_convolve_2d_sr_c
+
+void av1_convolve_horiz_rs_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             const int16_t* x_filters,
+                             int x0_qn,
+                             int x_step_qn);
+#define av1_convolve_horiz_rs av1_convolve_horiz_rs_c
+
+void av1_convolve_x_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+#define av1_convolve_x_sr av1_convolve_x_sr_c
+
+void av1_convolve_y_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+#define av1_convolve_y_sr av1_convolve_y_sr_c
+
+void av1_dr_prediction_z1_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z1 av1_dr_prediction_z1_c
+
+void av1_dr_prediction_z2_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z2 av1_dr_prediction_z2_c
+
+void av1_dr_prediction_z3_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z3 av1_dr_prediction_z3_c
+
+void av1_filter_intra_edge_c(uint8_t* p, int sz, int strength);
+#define av1_filter_intra_edge av1_filter_intra_edge_c
+
+void av1_filter_intra_edge_high_c(uint16_t* p, int sz, int strength);
+#define av1_filter_intra_edge_high av1_filter_intra_edge_high_c
+
+void av1_filter_intra_predictor_c(uint8_t* dst,
+                                  ptrdiff_t stride,
+                                  TX_SIZE tx_size,
+                                  const uint8_t* above,
+                                  const uint8_t* left,
+                                  int mode);
+#define av1_filter_intra_predictor av1_filter_intra_predictor_c
+
+void av1_highbd_convolve8_c(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h,
+                            int bps);
+#define av1_highbd_convolve8 av1_highbd_convolve8_c
+
+void av1_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define av1_highbd_convolve8_horiz av1_highbd_convolve8_horiz_c
+
+void av1_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define av1_highbd_convolve8_vert av1_highbd_convolve8_vert_c
+
+void av1_highbd_convolve_2d_copy_sr_c(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+#define av1_highbd_convolve_2d_copy_sr av1_highbd_convolve_2d_copy_sr_c
+
+void av1_highbd_convolve_2d_scale_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int x_step_qn,
+                                    const int subpel_y_q4,
+                                    const int y_step_qn,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+#define av1_highbd_convolve_2d_scale av1_highbd_convolve_2d_scale_c
+
+void av1_highbd_convolve_2d_sr_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_convolve_2d_sr av1_highbd_convolve_2d_sr_c
+
+void av1_highbd_convolve_avg_c(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve_avg av1_highbd_convolve_avg_c
+
+void av1_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define av1_highbd_convolve_copy av1_highbd_convolve_copy_c
+
+void av1_highbd_convolve_horiz_rs_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    const int16_t* x_filters,
+                                    int x0_qn,
+                                    int x_step_qn,
+                                    int bd);
+#define av1_highbd_convolve_horiz_rs av1_highbd_convolve_horiz_rs_c
+
+void av1_highbd_convolve_x_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_x_sr av1_highbd_convolve_x_sr_c
+
+void av1_highbd_convolve_y_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_y_sr av1_highbd_convolve_y_sr_c
+
+void av1_highbd_dr_prediction_z1_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z1 av1_highbd_dr_prediction_z1_c
+
+void av1_highbd_dr_prediction_z2_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z2 av1_highbd_dr_prediction_z2_c
+
+void av1_highbd_dr_prediction_z3_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z3 av1_highbd_dr_prediction_z3_c
+
+void av1_highbd_iwht4x4_16_add_c(const tran_low_t* input,
+                                 uint8_t* dest,
+                                 int dest_stride,
+                                 int bd);
+#define av1_highbd_iwht4x4_16_add av1_highbd_iwht4x4_16_add_c
+
+void av1_highbd_iwht4x4_1_add_c(const tran_low_t* input,
+                                uint8_t* dest,
+                                int dest_stride,
+                                int bd);
+#define av1_highbd_iwht4x4_1_add av1_highbd_iwht4x4_1_add_c
+
+void av1_highbd_jnt_convolve_2d_c(const uint16_t* src,
+                                  int src_stride,
+                                  uint16_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params,
+                                  int bd);
+#define av1_highbd_jnt_convolve_2d av1_highbd_jnt_convolve_2d_c
+
+void av1_highbd_jnt_convolve_2d_copy_c(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+#define av1_highbd_jnt_convolve_2d_copy av1_highbd_jnt_convolve_2d_copy_c
+
+void av1_highbd_jnt_convolve_x_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_x av1_highbd_jnt_convolve_x_c
+
+void av1_highbd_jnt_convolve_y_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_y av1_highbd_jnt_convolve_y_c
+
+void av1_highbd_warp_affine_c(const int32_t* mat,
+                              const uint16_t* ref,
+                              int width,
+                              int height,
+                              int stride,
+                              uint16_t* pred,
+                              int p_col,
+                              int p_row,
+                              int p_width,
+                              int p_height,
+                              int p_stride,
+                              int subsampling_x,
+                              int subsampling_y,
+                              int bd,
+                              ConvolveParams* conv_params,
+                              int16_t alpha,
+                              int16_t beta,
+                              int16_t gamma,
+                              int16_t delta);
+#define av1_highbd_warp_affine av1_highbd_warp_affine_c
+
+void av1_highbd_wiener_convolve_add_src_c(const uint8_t* src,
+                                          ptrdiff_t src_stride,
+                                          uint8_t* dst,
+                                          ptrdiff_t dst_stride,
+                                          const int16_t* filter_x,
+                                          int x_step_q4,
+                                          const int16_t* filter_y,
+                                          int y_step_q4,
+                                          int w,
+                                          int h,
+                                          const ConvolveParams* conv_params,
+                                          int bps);
+#define av1_highbd_wiener_convolve_add_src av1_highbd_wiener_convolve_add_src_c
+
+void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x16 av1_inv_txfm2d_add_16x16_c
+
+void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
+
+void av1_inv_txfm2d_add_16x4_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x4 av1_inv_txfm2d_add_16x4_c
+
+void av1_inv_txfm2d_add_16x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x64 av1_inv_txfm2d_add_16x64_c
+
+void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
+
+void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
+
+void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x32 av1_inv_txfm2d_add_32x32_c
+
+void av1_inv_txfm2d_add_32x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x64 av1_inv_txfm2d_add_32x64_c
+
+void av1_inv_txfm2d_add_32x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_32x8 av1_inv_txfm2d_add_32x8_c
+
+void av1_inv_txfm2d_add_4x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_4x16 av1_inv_txfm2d_add_4x16_c
+
+void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x4 av1_inv_txfm2d_add_4x4_c
+
+void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
+
+void av1_inv_txfm2d_add_64x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x16 av1_inv_txfm2d_add_64x16_c
+
+void av1_inv_txfm2d_add_64x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x32 av1_inv_txfm2d_add_64x32_c
+
+void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
+
+void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
+
+void av1_inv_txfm2d_add_8x32_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x32 av1_inv_txfm2d_add_8x32_c
+
+void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
+
+void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x8 av1_inv_txfm2d_add_8x8_c
+
+void av1_inv_txfm_add_c(const tran_low_t* dqcoeff,
+                        uint8_t* dst,
+                        int stride,
+                        const TxfmParam* txfm_param);
+#define av1_inv_txfm_add av1_inv_txfm_add_c
+
+void av1_jnt_convolve_2d_c(const uint8_t* src,
+                           int src_stride,
+                           uint8_t* dst,
+                           int dst_stride,
+                           int w,
+                           int h,
+                           InterpFilterParams* filter_params_x,
+                           InterpFilterParams* filter_params_y,
+                           const int subpel_x_q4,
+                           const int subpel_y_q4,
+                           ConvolveParams* conv_params);
+#define av1_jnt_convolve_2d av1_jnt_convolve_2d_c
+
+void av1_jnt_convolve_2d_copy_c(const uint8_t* src,
+                                int src_stride,
+                                uint8_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params);
+#define av1_jnt_convolve_2d_copy av1_jnt_convolve_2d_copy_c
+
+void av1_jnt_convolve_x_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+#define av1_jnt_convolve_x av1_jnt_convolve_x_c
+
+void av1_jnt_convolve_y_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+#define av1_jnt_convolve_y av1_jnt_convolve_y_c
+
+void av1_selfguided_restoration_c(const uint8_t* dgd8,
+                                  int width,
+                                  int height,
+                                  int dgd_stride,
+                                  int32_t* flt0,
+                                  int32_t* flt1,
+                                  int flt_stride,
+                                  int sgr_params_idx,
+                                  int bit_depth,
+                                  int highbd);
+#define av1_selfguided_restoration av1_selfguided_restoration_c
+
+void av1_upsample_intra_edge_c(uint8_t* p, int sz);
+#define av1_upsample_intra_edge av1_upsample_intra_edge_c
+
+void av1_upsample_intra_edge_high_c(uint16_t* p, int sz, int bd);
+#define av1_upsample_intra_edge_high av1_upsample_intra_edge_high_c
+
+void av1_warp_affine_c(const int32_t* mat,
+                       const uint8_t* ref,
+                       int width,
+                       int height,
+                       int stride,
+                       uint8_t* pred,
+                       int p_col,
+                       int p_row,
+                       int p_width,
+                       int p_height,
+                       int p_stride,
+                       int subsampling_x,
+                       int subsampling_y,
+                       ConvolveParams* conv_params,
+                       int16_t alpha,
+                       int16_t beta,
+                       int16_t gamma,
+                       int16_t delta);
+#define av1_warp_affine av1_warp_affine_c
+
+void av1_wiener_convolve_add_src_c(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   const ConvolveParams* conv_params);
+#define av1_wiener_convolve_add_src av1_wiener_convolve_add_src_c
+
+void cdef_filter_block_c(uint8_t* dst8,
+                         uint16_t* dst16,
+                         int dstride,
+                         const uint16_t* in,
+                         int pri_strength,
+                         int sec_strength,
+                         int dir,
+                         int pri_damping,
+                         int sec_damping,
+                         int bsize,
+                         int max,
+                         int coeff_shift);
+#define cdef_filter_block cdef_filter_block_c
+
+int cdef_find_dir_c(const uint16_t* img,
+                    int stride,
+                    int32_t* var,
+                    int coeff_shift);
+#define cdef_find_dir cdef_find_dir_c
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_420_hbd cfl_get_luma_subsampling_420_hbd_c
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_420_lbd cfl_get_luma_subsampling_420_lbd_c
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_422_hbd cfl_get_luma_subsampling_422_hbd_c
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_422_lbd cfl_get_luma_subsampling_422_lbd_c
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_444_hbd cfl_get_luma_subsampling_444_hbd_c
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_444_lbd cfl_get_luma_subsampling_444_lbd_c
+
+void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
+                                 int dstride,
+                                 const uint16_t* src,
+                                 int sstride,
+                                 int v,
+                                 int h);
+#define copy_rect8_16bit_to_16bit copy_rect8_16bit_to_16bit_c
+
+void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
+                                int dstride,
+                                const uint8_t* src,
+                                int sstride,
+                                int v,
+                                int h);
+#define copy_rect8_8bit_to_16bit copy_rect8_8bit_to_16bit_c
+
+cfl_predict_hbd_fn get_predict_hbd_fn_c(TX_SIZE tx_size);
+#define get_predict_hbd_fn get_predict_hbd_fn_c
+
+cfl_predict_lbd_fn get_predict_lbd_fn_c(TX_SIZE tx_size);
+#define get_predict_lbd_fn get_predict_lbd_fn_c
+
+cfl_subtract_average_fn get_subtract_average_fn_c(TX_SIZE tx_size);
+#define get_subtract_average_fn get_subtract_average_fn_c
+
+void av1_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+#include "aom_ports/arm.h"
+static void setup_rtcd_internal(void) {
+  int flags = arm_cpu_caps();
+
+  (void)flags;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm b/third_party/libaom/source/config/linux/arm64/config/aom_config.asm
new file mode 100644
index 0000000..54bbde96
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm64/config/aom_config.asm
@@ -0,0 +1,73 @@
+;
+; Copyright (c) 2018, Alliance for Open Media. All rights reserved
+;
+; This source code is subject to the terms of the BSD 2 Clause License and
+; the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+; was not distributed with this source code in the LICENSE file, you can
+; obtain it at www.aomedia.org/license/software. If the Alliance for Open
+; Media Patent License 1.0 was not distributed with this source code in the
+; PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+;
+ARCH_ARM equ 1
+ARCH_MIPS equ 0
+ARCH_PPC equ 0
+ARCH_X86 equ 0
+ARCH_X86_64 equ 0
+CONFIG_ACCOUNTING equ 0
+CONFIG_ANALYZER equ 0
+CONFIG_AV1_DECODER equ 1
+CONFIG_AV1_ENCODER equ 0
+CONFIG_BIG_ENDIAN equ 0
+CONFIG_BITSTREAM_DEBUG equ 0
+CONFIG_COEFFICIENT_RANGE_CHECKING equ 0
+CONFIG_COLLECT_INTER_MODE_RD_STATS equ 1
+CONFIG_COLLECT_RD_STATS equ 0
+CONFIG_DEBUG equ 0
+CONFIG_DECODE_PERF_TESTS equ 0
+CONFIG_DIST_8X8 equ 1
+CONFIG_ENCODE_PERF_TESTS equ 0
+CONFIG_ENTROPY_STATS equ 0
+CONFIG_FILEOPTIONS equ 1
+CONFIG_FP_MB_STATS equ 0
+CONFIG_GCC equ 1
+CONFIG_GCOV equ 0
+CONFIG_GPROF equ 0
+CONFIG_INSPECTION equ 0
+CONFIG_INTERNAL_STATS equ 0
+CONFIG_INTER_STATS_ONLY equ 0
+CONFIG_LIBYUV equ 1
+CONFIG_LOWBITDEPTH equ 1
+CONFIG_MISMATCH_DEBUG equ 0
+CONFIG_MSVS equ 0
+CONFIG_MULTITHREAD equ 1
+CONFIG_OS_SUPPORT equ 1
+CONFIG_PIC equ 0
+CONFIG_RD_DEBUG equ 0
+CONFIG_RUNTIME_CPU_DETECT equ 0
+CONFIG_SHARED equ 0
+CONFIG_SIZE_LIMIT equ 1
+CONFIG_SPATIAL_RESAMPLING equ 1
+CONFIG_STATIC equ 1
+CONFIG_UNIT_TESTS equ 1
+CONFIG_WEBM_IO equ 1
+DECODE_HEIGHT_LIMIT equ 16384
+DECODE_WIDTH_LIMIT equ 16384
+HAVE_AVX equ 0
+HAVE_AVX2 equ 0
+HAVE_DSPR2 equ 0
+HAVE_FEXCEPT equ 1
+HAVE_MIPS32 equ 0
+HAVE_MIPS64 equ 0
+HAVE_MMX equ 0
+HAVE_MSA equ 0
+HAVE_NEON equ 1
+HAVE_PTHREAD_H equ 1
+HAVE_SSE equ 0
+HAVE_SSE2 equ 0
+HAVE_SSE3 equ 0
+HAVE_SSE4_1 equ 0
+HAVE_SSE4_2 equ 0
+HAVE_SSSE3 equ 0
+HAVE_UNISTD_H equ 1
+HAVE_VSX equ 0
+HAVE_WXWIDGETS equ 0
diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.c b/third_party/libaom/source/config/linux/arm64/config/aom_config.c
new file mode 100644
index 0000000..66ea6af
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm64/config/aom_config.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2016, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#include "aom/aom_codec.h"
+static const char* const cfg = "-G \"Unix Makefiles\" -DCMAKE_TOOLCHAIN_FILE=\"/usr/local/google/home/johannkoenig/chromium/chromium/src/third_party/libaom/source/libaom/build/cmake/toolchains/arm64-linux-gcc.cmake\" -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=1 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=16384 -DDECODE_WIDTH_LIMIT=16384";
+const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.h b/third_party/libaom/source/config/linux/arm64/config/aom_config.h
new file mode 100644
index 0000000..4ce8acb
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm64/config/aom_config.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#ifndef AOM_CONFIG_H_
+#define AOM_CONFIG_H_
+#define ARCH_ARM 1
+#define ARCH_MIPS 0
+#define ARCH_PPC 0
+#define ARCH_X86 0
+#define ARCH_X86_64 0
+#define CONFIG_ACCOUNTING 0
+#define CONFIG_ANALYZER 0
+#define CONFIG_AV1_DECODER 1
+#define CONFIG_AV1_ENCODER 0
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+#define CONFIG_COLLECT_RD_STATS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_DIST_8X8 1
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_ENTROPY_STATS 0
+#define CONFIG_FILEOPTIONS 1
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_GCC 1
+#define CONFIG_GCOV 0
+#define CONFIG_GPROF 0
+#define CONFIG_INSPECTION 0
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_INTER_STATS_ONLY 0
+#define CONFIG_LIBYUV 1
+#define CONFIG_LOWBITDEPTH 1
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_MSVS 0
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_PIC 0
+#define CONFIG_RD_DEBUG 0
+#define CONFIG_RUNTIME_CPU_DETECT 0
+#define CONFIG_SHARED 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_STATIC 1
+#define CONFIG_UNIT_TESTS 1
+#define CONFIG_WEBM_IO 1
+#define DECODE_HEIGHT_LIMIT 16384
+#define DECODE_WIDTH_LIMIT 16384
+#define HAVE_AVX 0
+#define HAVE_AVX2 0
+#define HAVE_DSPR2 0
+#define HAVE_FEXCEPT 1
+#define HAVE_MIPS32 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 0
+#define HAVE_MSA 0
+#define HAVE_NEON 1
+#define HAVE_PTHREAD_H 1
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define HAVE_SSE3 0
+#define HAVE_SSE4_1 0
+#define HAVE_SSE4_2 0
+#define HAVE_SSSE3 0
+#define HAVE_UNISTD_H 1
+#define HAVE_VSX 0
+#define HAVE_WXWIDGETS 0
+#define INLINE inline
+#endif /* AOM_CONFIG_H_ */
diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h
new file mode 100644
index 0000000..6eb5587
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h
@@ -0,0 +1,3261 @@
+// This file is generated. Do not edit.
+#ifndef AOM_DSP_RTCD_H_
+#define AOM_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/aom_dsp_common.h"
+#include "av1/common/blockd.h"
+#include "av1/common/enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void aom_blend_a64_hmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_hmask aom_blend_a64_hmask_c
+
+void aom_blend_a64_mask_c(uint8_t* dst,
+                          uint32_t dst_stride,
+                          const uint8_t* src0,
+                          uint32_t src0_stride,
+                          const uint8_t* src1,
+                          uint32_t src1_stride,
+                          const uint8_t* mask,
+                          uint32_t mask_stride,
+                          int w,
+                          int h,
+                          int subx,
+                          int suby);
+#define aom_blend_a64_mask aom_blend_a64_mask_c
+
+void aom_blend_a64_vmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_vmask aom_blend_a64_vmask_c
+
+void aom_convolve8_horiz_c(const uint8_t* src,
+                           ptrdiff_t src_stride,
+                           uint8_t* dst,
+                           ptrdiff_t dst_stride,
+                           const int16_t* filter_x,
+                           int x_step_q4,
+                           const int16_t* filter_y,
+                           int y_step_q4,
+                           int w,
+                           int h);
+#define aom_convolve8_horiz aom_convolve8_horiz_c
+
+void aom_convolve8_vert_c(const uint8_t* src,
+                          ptrdiff_t src_stride,
+                          uint8_t* dst,
+                          ptrdiff_t dst_stride,
+                          const int16_t* filter_x,
+                          int x_step_q4,
+                          const int16_t* filter_y,
+                          int y_step_q4,
+                          int w,
+                          int h);
+#define aom_convolve8_vert aom_convolve8_vert_c
+
+void aom_convolve_copy_c(const uint8_t* src,
+                         ptrdiff_t src_stride,
+                         uint8_t* dst,
+                         ptrdiff_t dst_stride,
+                         const int16_t* filter_x,
+                         int x_step_q4,
+                         const int16_t* filter_y,
+                         int y_step_q4,
+                         int w,
+                         int h);
+#define aom_convolve_copy aom_convolve_copy_c
+
+void aom_dc_128_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x16_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_16x16 aom_dc_128_predictor_16x16_neon
+
+void aom_dc_128_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
+
+void aom_dc_128_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x4 aom_dc_128_predictor_16x4_c
+
+void aom_dc_128_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x64 aom_dc_128_predictor_16x64_c
+
+void aom_dc_128_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
+
+void aom_dc_128_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
+
+void aom_dc_128_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
+
+void aom_dc_128_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x32_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_32x32 aom_dc_128_predictor_32x32_neon
+
+void aom_dc_128_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x64 aom_dc_128_predictor_32x64_c
+
+void aom_dc_128_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_32x8 aom_dc_128_predictor_32x8_c
+
+void aom_dc_128_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_4x16 aom_dc_128_predictor_4x16_c
+
+void aom_dc_128_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x4_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_4x4 aom_dc_128_predictor_4x4_neon
+
+void aom_dc_128_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
+
+void aom_dc_128_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x16 aom_dc_128_predictor_64x16_c
+
+void aom_dc_128_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x32 aom_dc_128_predictor_64x32_c
+
+void aom_dc_128_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x64 aom_dc_128_predictor_64x64_c
+
+void aom_dc_128_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
+
+void aom_dc_128_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x32 aom_dc_128_predictor_8x32_c
+
+void aom_dc_128_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
+
+void aom_dc_128_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x8_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_8x8 aom_dc_128_predictor_8x8_neon
+
+void aom_dc_left_predictor_16x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x16_neon(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_16x16 aom_dc_left_predictor_16x16_neon
+
+void aom_dc_left_predictor_16x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
+
+void aom_dc_left_predictor_16x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x4 aom_dc_left_predictor_16x4_c
+
+void aom_dc_left_predictor_16x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x64 aom_dc_left_predictor_16x64_c
+
+void aom_dc_left_predictor_16x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
+
+void aom_dc_left_predictor_2x2_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
+
+void aom_dc_left_predictor_32x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
+
+void aom_dc_left_predictor_32x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x32_neon(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_32x32 aom_dc_left_predictor_32x32_neon
+
+void aom_dc_left_predictor_32x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x64 aom_dc_left_predictor_32x64_c
+
+void aom_dc_left_predictor_32x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_32x8 aom_dc_left_predictor_32x8_c
+
+void aom_dc_left_predictor_4x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_4x16 aom_dc_left_predictor_4x16_c
+
+void aom_dc_left_predictor_4x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x4_neon(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_4x4 aom_dc_left_predictor_4x4_neon
+
+void aom_dc_left_predictor_4x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
+
+void aom_dc_left_predictor_64x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x16 aom_dc_left_predictor_64x16_c
+
+void aom_dc_left_predictor_64x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x32 aom_dc_left_predictor_64x32_c
+
+void aom_dc_left_predictor_64x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x64 aom_dc_left_predictor_64x64_c
+
+void aom_dc_left_predictor_8x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
+
+void aom_dc_left_predictor_8x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x32 aom_dc_left_predictor_8x32_c
+
+void aom_dc_left_predictor_8x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
+
+void aom_dc_left_predictor_8x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x8_neon(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_8x8 aom_dc_left_predictor_8x8_neon
+
+void aom_dc_predictor_16x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x16_neon(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_16x16 aom_dc_predictor_16x16_neon
+
+void aom_dc_predictor_16x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
+
+void aom_dc_predictor_16x4_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x4 aom_dc_predictor_16x4_c
+
+void aom_dc_predictor_16x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x64 aom_dc_predictor_16x64_c
+
+void aom_dc_predictor_16x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
+
+void aom_dc_predictor_2x2_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
+
+void aom_dc_predictor_32x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
+
+void aom_dc_predictor_32x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x32_neon(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_32x32 aom_dc_predictor_32x32_neon
+
+void aom_dc_predictor_32x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x64 aom_dc_predictor_32x64_c
+
+void aom_dc_predictor_32x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_32x8 aom_dc_predictor_32x8_c
+
+void aom_dc_predictor_4x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_4x16 aom_dc_predictor_4x16_c
+
+void aom_dc_predictor_4x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x4_neon(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_4x4 aom_dc_predictor_4x4_neon
+
+void aom_dc_predictor_4x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
+
+void aom_dc_predictor_64x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x16 aom_dc_predictor_64x16_c
+
+void aom_dc_predictor_64x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x32 aom_dc_predictor_64x32_c
+
+void aom_dc_predictor_64x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x64 aom_dc_predictor_64x64_c
+
+void aom_dc_predictor_8x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
+
+void aom_dc_predictor_8x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x32 aom_dc_predictor_8x32_c
+
+void aom_dc_predictor_8x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
+
+void aom_dc_predictor_8x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x8_neon(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_8x8 aom_dc_predictor_8x8_neon
+
+void aom_dc_top_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x16_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_16x16 aom_dc_top_predictor_16x16_neon
+
+void aom_dc_top_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
+
+void aom_dc_top_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x4 aom_dc_top_predictor_16x4_c
+
+void aom_dc_top_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x64 aom_dc_top_predictor_16x64_c
+
+void aom_dc_top_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
+
+void aom_dc_top_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
+
+void aom_dc_top_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
+
+void aom_dc_top_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x32_neon(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_32x32 aom_dc_top_predictor_32x32_neon
+
+void aom_dc_top_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x64 aom_dc_top_predictor_32x64_c
+
+void aom_dc_top_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_32x8 aom_dc_top_predictor_32x8_c
+
+void aom_dc_top_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_4x16 aom_dc_top_predictor_4x16_c
+
+void aom_dc_top_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x4_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_4x4 aom_dc_top_predictor_4x4_neon
+
+void aom_dc_top_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
+
+void aom_dc_top_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x16 aom_dc_top_predictor_64x16_c
+
+void aom_dc_top_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x32 aom_dc_top_predictor_64x32_c
+
+void aom_dc_top_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x64 aom_dc_top_predictor_64x64_c
+
+void aom_dc_top_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
+
+void aom_dc_top_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x32 aom_dc_top_predictor_8x32_c
+
+void aom_dc_top_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
+
+void aom_dc_top_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x8_neon(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_8x8 aom_dc_top_predictor_8x8_neon
+
+void aom_h_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x16_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_16x16 aom_h_predictor_16x16_neon
+
+void aom_h_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
+
+void aom_h_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x4 aom_h_predictor_16x4_c
+
+void aom_h_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x64 aom_h_predictor_16x64_c
+
+void aom_h_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
+
+void aom_h_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
+
+void aom_h_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
+
+void aom_h_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x32_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_32x32 aom_h_predictor_32x32_neon
+
+void aom_h_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x64 aom_h_predictor_32x64_c
+
+void aom_h_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_32x8 aom_h_predictor_32x8_c
+
+void aom_h_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_4x16 aom_h_predictor_4x16_c
+
+void aom_h_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x4_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_4x4 aom_h_predictor_4x4_neon
+
+void aom_h_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
+
+void aom_h_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x16 aom_h_predictor_64x16_c
+
+void aom_h_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x32 aom_h_predictor_64x32_c
+
+void aom_h_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x64 aom_h_predictor_64x64_c
+
+void aom_h_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
+
+void aom_h_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x32 aom_h_predictor_8x32_c
+
+void aom_h_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
+
+void aom_h_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x8_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_8x8 aom_h_predictor_8x8_neon
+
+void aom_highbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                     uint32_t dst_stride,
+                                     const CONV_BUF_TYPE* src0,
+                                     uint32_t src0_stride,
+                                     const CONV_BUF_TYPE* src1,
+                                     uint32_t src1_stride,
+                                     const uint8_t* mask,
+                                     uint32_t mask_stride,
+                                     int w,
+                                     int h,
+                                     int subx,
+                                     int suby,
+                                     ConvolveParams* conv_params,
+                                     const int bd);
+#define aom_highbd_blend_a64_d16_mask aom_highbd_blend_a64_d16_mask_c
+
+void aom_highbd_blend_a64_hmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_hmask aom_highbd_blend_a64_hmask_c
+
+void aom_highbd_blend_a64_mask_c(uint8_t* dst,
+                                 uint32_t dst_stride,
+                                 const uint8_t* src0,
+                                 uint32_t src0_stride,
+                                 const uint8_t* src1,
+                                 uint32_t src1_stride,
+                                 const uint8_t* mask,
+                                 uint32_t mask_stride,
+                                 int w,
+                                 int h,
+                                 int subx,
+                                 int suby,
+                                 int bd);
+#define aom_highbd_blend_a64_mask aom_highbd_blend_a64_mask_c
+
+void aom_highbd_blend_a64_vmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_vmask aom_highbd_blend_a64_vmask_c
+
+void aom_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define aom_highbd_convolve8_horiz aom_highbd_convolve8_horiz_c
+
+void aom_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define aom_highbd_convolve8_vert aom_highbd_convolve8_vert_c
+
+void aom_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define aom_highbd_convolve_copy aom_highbd_convolve_copy_c
+
+void aom_highbd_dc_128_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x16 aom_highbd_dc_128_predictor_16x16_c
+
+void aom_highbd_dc_128_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x32 aom_highbd_dc_128_predictor_16x32_c
+
+void aom_highbd_dc_128_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x4 aom_highbd_dc_128_predictor_16x4_c
+
+void aom_highbd_dc_128_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x64 aom_highbd_dc_128_predictor_16x64_c
+
+void aom_highbd_dc_128_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x8 aom_highbd_dc_128_predictor_16x8_c
+
+void aom_highbd_dc_128_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_2x2 aom_highbd_dc_128_predictor_2x2_c
+
+void aom_highbd_dc_128_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x16 aom_highbd_dc_128_predictor_32x16_c
+
+void aom_highbd_dc_128_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x32 aom_highbd_dc_128_predictor_32x32_c
+
+void aom_highbd_dc_128_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x64 aom_highbd_dc_128_predictor_32x64_c
+
+void aom_highbd_dc_128_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_32x8 aom_highbd_dc_128_predictor_32x8_c
+
+void aom_highbd_dc_128_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_4x16 aom_highbd_dc_128_predictor_4x16_c
+
+void aom_highbd_dc_128_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x4 aom_highbd_dc_128_predictor_4x4_c
+
+void aom_highbd_dc_128_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x8 aom_highbd_dc_128_predictor_4x8_c
+
+void aom_highbd_dc_128_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x16 aom_highbd_dc_128_predictor_64x16_c
+
+void aom_highbd_dc_128_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x32 aom_highbd_dc_128_predictor_64x32_c
+
+void aom_highbd_dc_128_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x64 aom_highbd_dc_128_predictor_64x64_c
+
+void aom_highbd_dc_128_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x16 aom_highbd_dc_128_predictor_8x16_c
+
+void aom_highbd_dc_128_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x32 aom_highbd_dc_128_predictor_8x32_c
+
+void aom_highbd_dc_128_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x4 aom_highbd_dc_128_predictor_8x4_c
+
+void aom_highbd_dc_128_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x8 aom_highbd_dc_128_predictor_8x8_c
+
+void aom_highbd_dc_left_predictor_16x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x16 aom_highbd_dc_left_predictor_16x16_c
+
+void aom_highbd_dc_left_predictor_16x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x32 aom_highbd_dc_left_predictor_16x32_c
+
+void aom_highbd_dc_left_predictor_16x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x4 aom_highbd_dc_left_predictor_16x4_c
+
+void aom_highbd_dc_left_predictor_16x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x64 aom_highbd_dc_left_predictor_16x64_c
+
+void aom_highbd_dc_left_predictor_16x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x8 aom_highbd_dc_left_predictor_16x8_c
+
+void aom_highbd_dc_left_predictor_2x2_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_2x2 aom_highbd_dc_left_predictor_2x2_c
+
+void aom_highbd_dc_left_predictor_32x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x16 aom_highbd_dc_left_predictor_32x16_c
+
+void aom_highbd_dc_left_predictor_32x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x32 aom_highbd_dc_left_predictor_32x32_c
+
+void aom_highbd_dc_left_predictor_32x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x64 aom_highbd_dc_left_predictor_32x64_c
+
+void aom_highbd_dc_left_predictor_32x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_32x8 aom_highbd_dc_left_predictor_32x8_c
+
+void aom_highbd_dc_left_predictor_4x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_4x16 aom_highbd_dc_left_predictor_4x16_c
+
+void aom_highbd_dc_left_predictor_4x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x4 aom_highbd_dc_left_predictor_4x4_c
+
+void aom_highbd_dc_left_predictor_4x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x8 aom_highbd_dc_left_predictor_4x8_c
+
+void aom_highbd_dc_left_predictor_64x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x16 aom_highbd_dc_left_predictor_64x16_c
+
+void aom_highbd_dc_left_predictor_64x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x32 aom_highbd_dc_left_predictor_64x32_c
+
+void aom_highbd_dc_left_predictor_64x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x64 aom_highbd_dc_left_predictor_64x64_c
+
+void aom_highbd_dc_left_predictor_8x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x16 aom_highbd_dc_left_predictor_8x16_c
+
+void aom_highbd_dc_left_predictor_8x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x32 aom_highbd_dc_left_predictor_8x32_c
+
+void aom_highbd_dc_left_predictor_8x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x4 aom_highbd_dc_left_predictor_8x4_c
+
+void aom_highbd_dc_left_predictor_8x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x8 aom_highbd_dc_left_predictor_8x8_c
+
+void aom_highbd_dc_predictor_16x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x16 aom_highbd_dc_predictor_16x16_c
+
+void aom_highbd_dc_predictor_16x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x32 aom_highbd_dc_predictor_16x32_c
+
+void aom_highbd_dc_predictor_16x4_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x4 aom_highbd_dc_predictor_16x4_c
+
+void aom_highbd_dc_predictor_16x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x64 aom_highbd_dc_predictor_16x64_c
+
+void aom_highbd_dc_predictor_16x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x8 aom_highbd_dc_predictor_16x8_c
+
+void aom_highbd_dc_predictor_2x2_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_2x2 aom_highbd_dc_predictor_2x2_c
+
+void aom_highbd_dc_predictor_32x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x16 aom_highbd_dc_predictor_32x16_c
+
+void aom_highbd_dc_predictor_32x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x32 aom_highbd_dc_predictor_32x32_c
+
+void aom_highbd_dc_predictor_32x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x64 aom_highbd_dc_predictor_32x64_c
+
+void aom_highbd_dc_predictor_32x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_32x8 aom_highbd_dc_predictor_32x8_c
+
+void aom_highbd_dc_predictor_4x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_4x16 aom_highbd_dc_predictor_4x16_c
+
+void aom_highbd_dc_predictor_4x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x4 aom_highbd_dc_predictor_4x4_c
+
+void aom_highbd_dc_predictor_4x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x8 aom_highbd_dc_predictor_4x8_c
+
+void aom_highbd_dc_predictor_64x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x16 aom_highbd_dc_predictor_64x16_c
+
+void aom_highbd_dc_predictor_64x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x32 aom_highbd_dc_predictor_64x32_c
+
+void aom_highbd_dc_predictor_64x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x64 aom_highbd_dc_predictor_64x64_c
+
+void aom_highbd_dc_predictor_8x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x16 aom_highbd_dc_predictor_8x16_c
+
+void aom_highbd_dc_predictor_8x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x32 aom_highbd_dc_predictor_8x32_c
+
+void aom_highbd_dc_predictor_8x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x4 aom_highbd_dc_predictor_8x4_c
+
+void aom_highbd_dc_predictor_8x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x8 aom_highbd_dc_predictor_8x8_c
+
+void aom_highbd_dc_top_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x16 aom_highbd_dc_top_predictor_16x16_c
+
+void aom_highbd_dc_top_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x32 aom_highbd_dc_top_predictor_16x32_c
+
+void aom_highbd_dc_top_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x4 aom_highbd_dc_top_predictor_16x4_c
+
+void aom_highbd_dc_top_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x64 aom_highbd_dc_top_predictor_16x64_c
+
+void aom_highbd_dc_top_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x8 aom_highbd_dc_top_predictor_16x8_c
+
+void aom_highbd_dc_top_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_2x2 aom_highbd_dc_top_predictor_2x2_c
+
+void aom_highbd_dc_top_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x16 aom_highbd_dc_top_predictor_32x16_c
+
+void aom_highbd_dc_top_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x32 aom_highbd_dc_top_predictor_32x32_c
+
+void aom_highbd_dc_top_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x64 aom_highbd_dc_top_predictor_32x64_c
+
+void aom_highbd_dc_top_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_32x8 aom_highbd_dc_top_predictor_32x8_c
+
+void aom_highbd_dc_top_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_4x16 aom_highbd_dc_top_predictor_4x16_c
+
+void aom_highbd_dc_top_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x4 aom_highbd_dc_top_predictor_4x4_c
+
+void aom_highbd_dc_top_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x8 aom_highbd_dc_top_predictor_4x8_c
+
+void aom_highbd_dc_top_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x16 aom_highbd_dc_top_predictor_64x16_c
+
+void aom_highbd_dc_top_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x32 aom_highbd_dc_top_predictor_64x32_c
+
+void aom_highbd_dc_top_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x64 aom_highbd_dc_top_predictor_64x64_c
+
+void aom_highbd_dc_top_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x16 aom_highbd_dc_top_predictor_8x16_c
+
+void aom_highbd_dc_top_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x32 aom_highbd_dc_top_predictor_8x32_c
+
+void aom_highbd_dc_top_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x4 aom_highbd_dc_top_predictor_8x4_c
+
+void aom_highbd_dc_top_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x8 aom_highbd_dc_top_predictor_8x8_c
+
+void aom_highbd_h_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x16 aom_highbd_h_predictor_16x16_c
+
+void aom_highbd_h_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x32 aom_highbd_h_predictor_16x32_c
+
+void aom_highbd_h_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x4 aom_highbd_h_predictor_16x4_c
+
+void aom_highbd_h_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x64 aom_highbd_h_predictor_16x64_c
+
+void aom_highbd_h_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x8 aom_highbd_h_predictor_16x8_c
+
+void aom_highbd_h_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_2x2 aom_highbd_h_predictor_2x2_c
+
+void aom_highbd_h_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x16 aom_highbd_h_predictor_32x16_c
+
+void aom_highbd_h_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x32 aom_highbd_h_predictor_32x32_c
+
+void aom_highbd_h_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x64 aom_highbd_h_predictor_32x64_c
+
+void aom_highbd_h_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_32x8 aom_highbd_h_predictor_32x8_c
+
+void aom_highbd_h_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_4x16 aom_highbd_h_predictor_4x16_c
+
+void aom_highbd_h_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x4 aom_highbd_h_predictor_4x4_c
+
+void aom_highbd_h_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x8 aom_highbd_h_predictor_4x8_c
+
+void aom_highbd_h_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x16 aom_highbd_h_predictor_64x16_c
+
+void aom_highbd_h_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x32 aom_highbd_h_predictor_64x32_c
+
+void aom_highbd_h_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x64 aom_highbd_h_predictor_64x64_c
+
+void aom_highbd_h_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x16 aom_highbd_h_predictor_8x16_c
+
+void aom_highbd_h_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x32 aom_highbd_h_predictor_8x32_c
+
+void aom_highbd_h_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x4 aom_highbd_h_predictor_8x4_c
+
+void aom_highbd_h_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x8 aom_highbd_h_predictor_8x8_c
+
+void aom_highbd_lpf_horizontal_14_c(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_horizontal_14 aom_highbd_lpf_horizontal_14_c
+
+void aom_highbd_lpf_horizontal_14_dual_c(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limt1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+#define aom_highbd_lpf_horizontal_14_dual aom_highbd_lpf_horizontal_14_dual_c
+
+void aom_highbd_lpf_horizontal_4_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_4 aom_highbd_lpf_horizontal_4_c
+
+void aom_highbd_lpf_horizontal_4_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_4_dual aom_highbd_lpf_horizontal_4_dual_c
+
+void aom_highbd_lpf_horizontal_6_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_6 aom_highbd_lpf_horizontal_6_c
+
+void aom_highbd_lpf_horizontal_6_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_6_dual aom_highbd_lpf_horizontal_6_dual_c
+
+void aom_highbd_lpf_horizontal_8_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_8 aom_highbd_lpf_horizontal_8_c
+
+void aom_highbd_lpf_horizontal_8_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_8_dual aom_highbd_lpf_horizontal_8_dual_c
+
+void aom_highbd_lpf_vertical_14_c(uint16_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit,
+                                  const uint8_t* limit,
+                                  const uint8_t* thresh,
+                                  int bd);
+#define aom_highbd_lpf_vertical_14 aom_highbd_lpf_vertical_14_c
+
+void aom_highbd_lpf_vertical_14_dual_c(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit0,
+                                       const uint8_t* limit0,
+                                       const uint8_t* thresh0,
+                                       const uint8_t* blimit1,
+                                       const uint8_t* limit1,
+                                       const uint8_t* thresh1,
+                                       int bd);
+#define aom_highbd_lpf_vertical_14_dual aom_highbd_lpf_vertical_14_dual_c
+
+void aom_highbd_lpf_vertical_4_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_4 aom_highbd_lpf_vertical_4_c
+
+void aom_highbd_lpf_vertical_4_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_4_dual aom_highbd_lpf_vertical_4_dual_c
+
+void aom_highbd_lpf_vertical_6_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_6 aom_highbd_lpf_vertical_6_c
+
+void aom_highbd_lpf_vertical_6_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_6_dual aom_highbd_lpf_vertical_6_dual_c
+
+void aom_highbd_lpf_vertical_8_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_8 aom_highbd_lpf_vertical_8_c
+
+void aom_highbd_lpf_vertical_8_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_8_dual aom_highbd_lpf_vertical_8_dual_c
+
+void aom_highbd_paeth_predictor_16x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x16 aom_highbd_paeth_predictor_16x16_c
+
+void aom_highbd_paeth_predictor_16x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x32 aom_highbd_paeth_predictor_16x32_c
+
+void aom_highbd_paeth_predictor_16x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x4 aom_highbd_paeth_predictor_16x4_c
+
+void aom_highbd_paeth_predictor_16x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x64 aom_highbd_paeth_predictor_16x64_c
+
+void aom_highbd_paeth_predictor_16x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x8 aom_highbd_paeth_predictor_16x8_c
+
+void aom_highbd_paeth_predictor_2x2_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_2x2 aom_highbd_paeth_predictor_2x2_c
+
+void aom_highbd_paeth_predictor_32x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x16 aom_highbd_paeth_predictor_32x16_c
+
+void aom_highbd_paeth_predictor_32x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x32 aom_highbd_paeth_predictor_32x32_c
+
+void aom_highbd_paeth_predictor_32x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x64 aom_highbd_paeth_predictor_32x64_c
+
+void aom_highbd_paeth_predictor_32x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_32x8 aom_highbd_paeth_predictor_32x8_c
+
+void aom_highbd_paeth_predictor_4x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_4x16 aom_highbd_paeth_predictor_4x16_c
+
+void aom_highbd_paeth_predictor_4x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x4 aom_highbd_paeth_predictor_4x4_c
+
+void aom_highbd_paeth_predictor_4x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x8 aom_highbd_paeth_predictor_4x8_c
+
+void aom_highbd_paeth_predictor_64x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x16 aom_highbd_paeth_predictor_64x16_c
+
+void aom_highbd_paeth_predictor_64x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x32 aom_highbd_paeth_predictor_64x32_c
+
+void aom_highbd_paeth_predictor_64x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x64 aom_highbd_paeth_predictor_64x64_c
+
+void aom_highbd_paeth_predictor_8x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x16 aom_highbd_paeth_predictor_8x16_c
+
+void aom_highbd_paeth_predictor_8x32_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x32 aom_highbd_paeth_predictor_8x32_c
+
+void aom_highbd_paeth_predictor_8x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x4 aom_highbd_paeth_predictor_8x4_c
+
+void aom_highbd_paeth_predictor_8x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x8 aom_highbd_paeth_predictor_8x8_c
+
+void aom_highbd_smooth_h_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x16 \
+  aom_highbd_smooth_h_predictor_16x16_c
+
+void aom_highbd_smooth_h_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x32 \
+  aom_highbd_smooth_h_predictor_16x32_c
+
+void aom_highbd_smooth_h_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x4 aom_highbd_smooth_h_predictor_16x4_c
+
+void aom_highbd_smooth_h_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x64 \
+  aom_highbd_smooth_h_predictor_16x64_c
+
+void aom_highbd_smooth_h_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x8 aom_highbd_smooth_h_predictor_16x8_c
+
+void aom_highbd_smooth_h_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_2x2 aom_highbd_smooth_h_predictor_2x2_c
+
+void aom_highbd_smooth_h_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x16 \
+  aom_highbd_smooth_h_predictor_32x16_c
+
+void aom_highbd_smooth_h_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x32 \
+  aom_highbd_smooth_h_predictor_32x32_c
+
+void aom_highbd_smooth_h_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x64 \
+  aom_highbd_smooth_h_predictor_32x64_c
+
+void aom_highbd_smooth_h_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_32x8 aom_highbd_smooth_h_predictor_32x8_c
+
+void aom_highbd_smooth_h_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_4x16 aom_highbd_smooth_h_predictor_4x16_c
+
+void aom_highbd_smooth_h_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x4 aom_highbd_smooth_h_predictor_4x4_c
+
+void aom_highbd_smooth_h_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x8 aom_highbd_smooth_h_predictor_4x8_c
+
+void aom_highbd_smooth_h_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x16 \
+  aom_highbd_smooth_h_predictor_64x16_c
+
+void aom_highbd_smooth_h_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x32 \
+  aom_highbd_smooth_h_predictor_64x32_c
+
+void aom_highbd_smooth_h_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x64 \
+  aom_highbd_smooth_h_predictor_64x64_c
+
+void aom_highbd_smooth_h_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x16 aom_highbd_smooth_h_predictor_8x16_c
+
+void aom_highbd_smooth_h_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x32 aom_highbd_smooth_h_predictor_8x32_c
+
+void aom_highbd_smooth_h_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x4 aom_highbd_smooth_h_predictor_8x4_c
+
+void aom_highbd_smooth_h_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x8 aom_highbd_smooth_h_predictor_8x8_c
+
+void aom_highbd_smooth_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x16 aom_highbd_smooth_predictor_16x16_c
+
+void aom_highbd_smooth_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x32 aom_highbd_smooth_predictor_16x32_c
+
+void aom_highbd_smooth_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x4 aom_highbd_smooth_predictor_16x4_c
+
+void aom_highbd_smooth_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x64 aom_highbd_smooth_predictor_16x64_c
+
+void aom_highbd_smooth_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x8 aom_highbd_smooth_predictor_16x8_c
+
+void aom_highbd_smooth_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_2x2 aom_highbd_smooth_predictor_2x2_c
+
+void aom_highbd_smooth_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x16 aom_highbd_smooth_predictor_32x16_c
+
+void aom_highbd_smooth_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x32 aom_highbd_smooth_predictor_32x32_c
+
+void aom_highbd_smooth_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x64 aom_highbd_smooth_predictor_32x64_c
+
+void aom_highbd_smooth_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_32x8 aom_highbd_smooth_predictor_32x8_c
+
+void aom_highbd_smooth_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_4x16 aom_highbd_smooth_predictor_4x16_c
+
+void aom_highbd_smooth_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x4 aom_highbd_smooth_predictor_4x4_c
+
+void aom_highbd_smooth_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x8 aom_highbd_smooth_predictor_4x8_c
+
+void aom_highbd_smooth_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x16 aom_highbd_smooth_predictor_64x16_c
+
+void aom_highbd_smooth_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x32 aom_highbd_smooth_predictor_64x32_c
+
+void aom_highbd_smooth_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x64 aom_highbd_smooth_predictor_64x64_c
+
+void aom_highbd_smooth_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x16 aom_highbd_smooth_predictor_8x16_c
+
+void aom_highbd_smooth_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x32 aom_highbd_smooth_predictor_8x32_c
+
+void aom_highbd_smooth_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x4 aom_highbd_smooth_predictor_8x4_c
+
+void aom_highbd_smooth_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x8 aom_highbd_smooth_predictor_8x8_c
+
+void aom_highbd_smooth_v_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x16 \
+  aom_highbd_smooth_v_predictor_16x16_c
+
+void aom_highbd_smooth_v_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x32 \
+  aom_highbd_smooth_v_predictor_16x32_c
+
+void aom_highbd_smooth_v_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x4 aom_highbd_smooth_v_predictor_16x4_c
+
+void aom_highbd_smooth_v_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x64 \
+  aom_highbd_smooth_v_predictor_16x64_c
+
+void aom_highbd_smooth_v_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x8 aom_highbd_smooth_v_predictor_16x8_c
+
+void aom_highbd_smooth_v_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_2x2 aom_highbd_smooth_v_predictor_2x2_c
+
+void aom_highbd_smooth_v_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x16 \
+  aom_highbd_smooth_v_predictor_32x16_c
+
+void aom_highbd_smooth_v_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x32 \
+  aom_highbd_smooth_v_predictor_32x32_c
+
+void aom_highbd_smooth_v_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x64 \
+  aom_highbd_smooth_v_predictor_32x64_c
+
+void aom_highbd_smooth_v_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_32x8 aom_highbd_smooth_v_predictor_32x8_c
+
+void aom_highbd_smooth_v_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_4x16 aom_highbd_smooth_v_predictor_4x16_c
+
+void aom_highbd_smooth_v_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x4 aom_highbd_smooth_v_predictor_4x4_c
+
+void aom_highbd_smooth_v_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x8 aom_highbd_smooth_v_predictor_4x8_c
+
+void aom_highbd_smooth_v_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x16 \
+  aom_highbd_smooth_v_predictor_64x16_c
+
+void aom_highbd_smooth_v_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x32 \
+  aom_highbd_smooth_v_predictor_64x32_c
+
+void aom_highbd_smooth_v_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x64 \
+  aom_highbd_smooth_v_predictor_64x64_c
+
+void aom_highbd_smooth_v_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x16 aom_highbd_smooth_v_predictor_8x16_c
+
+void aom_highbd_smooth_v_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x32 aom_highbd_smooth_v_predictor_8x32_c
+
+void aom_highbd_smooth_v_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x4 aom_highbd_smooth_v_predictor_8x4_c
+
+void aom_highbd_smooth_v_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x8 aom_highbd_smooth_v_predictor_8x8_c
+
+void aom_highbd_v_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x16 aom_highbd_v_predictor_16x16_c
+
+void aom_highbd_v_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x32 aom_highbd_v_predictor_16x32_c
+
+void aom_highbd_v_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x4 aom_highbd_v_predictor_16x4_c
+
+void aom_highbd_v_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x64 aom_highbd_v_predictor_16x64_c
+
+void aom_highbd_v_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x8 aom_highbd_v_predictor_16x8_c
+
+void aom_highbd_v_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_2x2 aom_highbd_v_predictor_2x2_c
+
+void aom_highbd_v_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x16 aom_highbd_v_predictor_32x16_c
+
+void aom_highbd_v_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x32 aom_highbd_v_predictor_32x32_c
+
+void aom_highbd_v_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x64 aom_highbd_v_predictor_32x64_c
+
+void aom_highbd_v_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_32x8 aom_highbd_v_predictor_32x8_c
+
+void aom_highbd_v_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_4x16 aom_highbd_v_predictor_4x16_c
+
+void aom_highbd_v_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x4 aom_highbd_v_predictor_4x4_c
+
+void aom_highbd_v_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x8 aom_highbd_v_predictor_4x8_c
+
+void aom_highbd_v_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x16 aom_highbd_v_predictor_64x16_c
+
+void aom_highbd_v_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x32 aom_highbd_v_predictor_64x32_c
+
+void aom_highbd_v_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x64 aom_highbd_v_predictor_64x64_c
+
+void aom_highbd_v_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x16 aom_highbd_v_predictor_8x16_c
+
+void aom_highbd_v_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x32 aom_highbd_v_predictor_8x32_c
+
+void aom_highbd_v_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x4 aom_highbd_v_predictor_8x4_c
+
+void aom_highbd_v_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x8 aom_highbd_v_predictor_8x8_c
+
+void aom_lowbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                    uint32_t dst_stride,
+                                    const CONV_BUF_TYPE* src0,
+                                    uint32_t src0_stride,
+                                    const CONV_BUF_TYPE* src1,
+                                    uint32_t src1_stride,
+                                    const uint8_t* mask,
+                                    uint32_t mask_stride,
+                                    int w,
+                                    int h,
+                                    int subx,
+                                    int suby,
+                                    ConvolveParams* conv_params);
+void aom_lowbd_blend_a64_d16_mask_neon(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const CONV_BUF_TYPE* src0,
+                                       uint32_t src0_stride,
+                                       const CONV_BUF_TYPE* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       uint32_t mask_stride,
+                                       int w,
+                                       int h,
+                                       int subx,
+                                       int suby,
+                                       ConvolveParams* conv_params);
+#define aom_lowbd_blend_a64_d16_mask aom_lowbd_blend_a64_d16_mask_neon
+
+void aom_lpf_horizontal_14_c(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_horizontal_14 aom_lpf_horizontal_14_c
+
+void aom_lpf_horizontal_14_dual_c(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_horizontal_14_dual aom_lpf_horizontal_14_dual_c
+
+void aom_lpf_horizontal_4_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_c
+
+void aom_lpf_horizontal_4_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
+
+void aom_lpf_horizontal_6_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_6_neon(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_6 aom_lpf_horizontal_6_neon
+
+void aom_lpf_horizontal_6_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_6_dual aom_lpf_horizontal_6_dual_c
+
+void aom_lpf_horizontal_8_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_8_neon(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_8 aom_lpf_horizontal_8_neon
+
+void aom_lpf_horizontal_8_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
+
+void aom_lpf_vertical_14_c(uint8_t* s,
+                           int pitch,
+                           const uint8_t* blimit,
+                           const uint8_t* limit,
+                           const uint8_t* thresh);
+void aom_lpf_vertical_14_neon(uint8_t* s,
+                              int pitch,
+                              const uint8_t* blimit,
+                              const uint8_t* limit,
+                              const uint8_t* thresh);
+#define aom_lpf_vertical_14 aom_lpf_vertical_14_neon
+
+void aom_lpf_vertical_14_dual_c(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit0,
+                                const uint8_t* limit0,
+                                const uint8_t* thresh0,
+                                const uint8_t* blimit1,
+                                const uint8_t* limit1,
+                                const uint8_t* thresh1);
+#define aom_lpf_vertical_14_dual aom_lpf_vertical_14_dual_c
+
+void aom_lpf_vertical_4_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_4 aom_lpf_vertical_4_c
+
+void aom_lpf_vertical_4_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
+
+void aom_lpf_vertical_6_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_6 aom_lpf_vertical_6_c
+
+void aom_lpf_vertical_6_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_6_dual aom_lpf_vertical_6_dual_c
+
+void aom_lpf_vertical_8_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_8_neon(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_vertical_8 aom_lpf_vertical_8_neon
+
+void aom_lpf_vertical_8_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
+
+void aom_paeth_predictor_16x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
+
+void aom_paeth_predictor_16x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
+
+void aom_paeth_predictor_16x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x4 aom_paeth_predictor_16x4_c
+
+void aom_paeth_predictor_16x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x64 aom_paeth_predictor_16x64_c
+
+void aom_paeth_predictor_16x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
+
+void aom_paeth_predictor_2x2_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
+
+void aom_paeth_predictor_32x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
+
+void aom_paeth_predictor_32x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
+
+void aom_paeth_predictor_32x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x64 aom_paeth_predictor_32x64_c
+
+void aom_paeth_predictor_32x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_32x8 aom_paeth_predictor_32x8_c
+
+void aom_paeth_predictor_4x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_4x16 aom_paeth_predictor_4x16_c
+
+void aom_paeth_predictor_4x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
+
+void aom_paeth_predictor_4x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
+
+void aom_paeth_predictor_64x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x16 aom_paeth_predictor_64x16_c
+
+void aom_paeth_predictor_64x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x32 aom_paeth_predictor_64x32_c
+
+void aom_paeth_predictor_64x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x64 aom_paeth_predictor_64x64_c
+
+void aom_paeth_predictor_8x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
+
+void aom_paeth_predictor_8x32_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x32 aom_paeth_predictor_8x32_c
+
+void aom_paeth_predictor_8x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
+
+void aom_paeth_predictor_8x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
+
+void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
+
+void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
+
+void aom_smooth_h_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x4 aom_smooth_h_predictor_16x4_c
+
+void aom_smooth_h_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x64 aom_smooth_h_predictor_16x64_c
+
+void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
+
+void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
+
+void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
+
+void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
+
+void aom_smooth_h_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x64 aom_smooth_h_predictor_32x64_c
+
+void aom_smooth_h_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_32x8 aom_smooth_h_predictor_32x8_c
+
+void aom_smooth_h_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_4x16 aom_smooth_h_predictor_4x16_c
+
+void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
+
+void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
+
+void aom_smooth_h_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x16 aom_smooth_h_predictor_64x16_c
+
+void aom_smooth_h_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x32 aom_smooth_h_predictor_64x32_c
+
+void aom_smooth_h_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x64 aom_smooth_h_predictor_64x64_c
+
+void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
+
+void aom_smooth_h_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x32 aom_smooth_h_predictor_8x32_c
+
+void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
+
+void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
+
+void aom_smooth_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
+
+void aom_smooth_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
+
+void aom_smooth_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x4 aom_smooth_predictor_16x4_c
+
+void aom_smooth_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x64 aom_smooth_predictor_16x64_c
+
+void aom_smooth_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
+
+void aom_smooth_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
+
+void aom_smooth_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
+
+void aom_smooth_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
+
+void aom_smooth_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x64 aom_smooth_predictor_32x64_c
+
+void aom_smooth_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_32x8 aom_smooth_predictor_32x8_c
+
+void aom_smooth_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_4x16 aom_smooth_predictor_4x16_c
+
+void aom_smooth_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
+
+void aom_smooth_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
+
+void aom_smooth_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x16 aom_smooth_predictor_64x16_c
+
+void aom_smooth_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x32 aom_smooth_predictor_64x32_c
+
+void aom_smooth_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x64 aom_smooth_predictor_64x64_c
+
+void aom_smooth_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
+
+void aom_smooth_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x32 aom_smooth_predictor_8x32_c
+
+void aom_smooth_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
+
+void aom_smooth_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
+
+void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
+
+void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
+
+void aom_smooth_v_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x4 aom_smooth_v_predictor_16x4_c
+
+void aom_smooth_v_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x64 aom_smooth_v_predictor_16x64_c
+
+void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
+
+void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
+
+void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
+
+void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
+
+void aom_smooth_v_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x64 aom_smooth_v_predictor_32x64_c
+
+void aom_smooth_v_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_32x8 aom_smooth_v_predictor_32x8_c
+
+void aom_smooth_v_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_4x16 aom_smooth_v_predictor_4x16_c
+
+void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
+
+void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
+
+void aom_smooth_v_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x16 aom_smooth_v_predictor_64x16_c
+
+void aom_smooth_v_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x32 aom_smooth_v_predictor_64x32_c
+
+void aom_smooth_v_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x64 aom_smooth_v_predictor_64x64_c
+
+void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
+
+void aom_smooth_v_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x32 aom_smooth_v_predictor_8x32_c
+
+void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
+
+void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
+
+void aom_v_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x16_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_16x16 aom_v_predictor_16x16_neon
+
+void aom_v_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
+
+void aom_v_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x4 aom_v_predictor_16x4_c
+
+void aom_v_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x64 aom_v_predictor_16x64_c
+
+void aom_v_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
+
+void aom_v_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
+
+void aom_v_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
+
+void aom_v_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x32_neon(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_32x32 aom_v_predictor_32x32_neon
+
+void aom_v_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x64 aom_v_predictor_32x64_c
+
+void aom_v_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_32x8 aom_v_predictor_32x8_c
+
+void aom_v_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_4x16 aom_v_predictor_4x16_c
+
+void aom_v_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x4_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_4x4 aom_v_predictor_4x4_neon
+
+void aom_v_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
+
+void aom_v_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x16 aom_v_predictor_64x16_c
+
+void aom_v_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x32 aom_v_predictor_64x32_c
+
+void aom_v_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x64 aom_v_predictor_64x64_c
+
+void aom_v_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
+
+void aom_v_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x32 aom_v_predictor_8x32_c
+
+void aom_v_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
+
+void aom_v_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x8_neon(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_8x8 aom_v_predictor_8x8_neon
+
+void av1_round_shift_array_c(int32_t* arr, int size, int bit);
+void av1_round_shift_array_neon(int32_t* arr, int size, int bit);
+#define av1_round_shift_array av1_round_shift_array_neon
+
+void aom_dsp_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+#include "aom_ports/arm.h"
+static void setup_rtcd_internal(void) {
+  int flags = arm_cpu_caps();
+
+  (void)flags;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h b/third_party/libaom/source/config/linux/arm64/config/aom_scale_rtcd.h
similarity index 70%
copy from third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
copy to third_party/libaom/source/config/linux/arm64/config/aom_scale_rtcd.h
index fbf3bde..ce01c830 100644
--- a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
+++ b/third_party/libaom/source/config/linux/arm64/config/aom_scale_rtcd.h
@@ -1,3 +1,4 @@
+// This file is generated. Do not edit.
 #ifndef AOM_SCALE_RTCD_H_
 #define AOM_SCALE_RTCD_H_
 
@@ -13,13 +14,15 @@
 extern "C" {
 #endif
 
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                const int num_planes);
 #define aom_extend_frame_borders aom_extend_frame_borders_c
 
 void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
 #define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
 
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf,
+                                      const int num_planes);
 #define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
 
 void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
@@ -69,7 +72,8 @@
 #define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
 
 void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
+                           struct yv12_buffer_config* dst_bc,
+                           const int num_planes);
 #define aom_yv12_copy_frame aom_yv12_copy_frame_c
 
 void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
@@ -84,15 +88,42 @@
                        struct yv12_buffer_config* dst_ybc);
 #define aom_yv12_copy_y aom_yv12_copy_y_c
 
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                     const int num_planes);
 #define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
 
+void aom_yv12_partial_copy_u_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_u aom_yv12_partial_copy_u_c
+
+void aom_yv12_partial_copy_v_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_v aom_yv12_partial_copy_v_c
+
+void aom_yv12_partial_copy_y_c(const struct yv12_buffer_config* src_ybc,
+                               struct yv12_buffer_config* dst_ybc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_y aom_yv12_partial_copy_y_c
+
 void aom_scale_rtcd(void);
 
+#include "config/aom_config.h"
+
 #ifdef RTCD_C
-#include "aom_ports/x86.h"
+#include "aom_ports/arm.h"
 static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
+  int flags = arm_cpu_caps();
 
   (void)flags;
 }
diff --git a/third_party/libaom/source/config/linux/arm64/config/av1_rtcd.h b/third_party/libaom/source/config/linux/arm64/config/av1_rtcd.h
new file mode 100644
index 0000000..f35ba56
--- /dev/null
+++ b/third_party/libaom/source/config/linux/arm64/config/av1_rtcd.h
@@ -0,0 +1,982 @@
+// This file is generated. Do not edit.
+#ifndef AV1_RTCD_H_
+#define AV1_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * AV1
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/txfm_common.h"
+#include "av1/common/av1_txfm.h"
+#include "av1/common/common.h"
+#include "av1/common/convolve.h"
+#include "av1/common/enums.h"
+#include "av1/common/filter.h"
+#include "av1/common/odintrin.h"
+#include "av1/common/quant_common.h"
+#include "av1/common/restoration.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct txfm_param;
+struct aom_variance_vtable;
+struct search_site_config;
+struct yv12_buffer_config;
+
+/* Function pointers return by CfL functions */
+typedef void (*cfl_subsample_lbd_fn)(const uint8_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subsample_hbd_fn)(const uint16_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subtract_average_fn)(const uint16_t* src, int16_t* dst);
+
+typedef void (*cfl_predict_lbd_fn)(const int16_t* src,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3);
+
+typedef void (*cfl_predict_hbd_fn)(const int16_t* src,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3,
+                                   int bd);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void apply_selfguided_restoration_c(const uint8_t* dat,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    int eps,
+                                    const int* xqd,
+                                    uint8_t* dst,
+                                    int dst_stride,
+                                    int32_t* tmpbuf,
+                                    int bit_depth,
+                                    int highbd);
+#define apply_selfguided_restoration apply_selfguided_restoration_c
+
+void av1_build_compound_diffwtd_mask_c(uint8_t* mask,
+                                       DIFFWTD_MASK_TYPE mask_type,
+                                       const uint8_t* src0,
+                                       int src0_stride,
+                                       const uint8_t* src1,
+                                       int src1_stride,
+                                       int h,
+                                       int w);
+#define av1_build_compound_diffwtd_mask av1_build_compound_diffwtd_mask_c
+
+void av1_build_compound_diffwtd_mask_d16_c(uint8_t* mask,
+                                           DIFFWTD_MASK_TYPE mask_type,
+                                           const CONV_BUF_TYPE* src0,
+                                           int src0_stride,
+                                           const CONV_BUF_TYPE* src1,
+                                           int src1_stride,
+                                           int h,
+                                           int w,
+                                           ConvolveParams* conv_params,
+                                           int bd);
+#define av1_build_compound_diffwtd_mask_d16 \
+  av1_build_compound_diffwtd_mask_d16_c
+
+void av1_build_compound_diffwtd_mask_highbd_c(uint8_t* mask,
+                                              DIFFWTD_MASK_TYPE mask_type,
+                                              const uint8_t* src0,
+                                              int src0_stride,
+                                              const uint8_t* src1,
+                                              int src1_stride,
+                                              int h,
+                                              int w,
+                                              int bd);
+#define av1_build_compound_diffwtd_mask_highbd \
+  av1_build_compound_diffwtd_mask_highbd_c
+
+void av1_convolve_2d_copy_sr_c(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_neon(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+#define av1_convolve_2d_copy_sr av1_convolve_2d_copy_sr_neon
+
+void av1_convolve_2d_scale_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_qn,
+                             const int x_step_qn,
+                             const int subpel_y_q4,
+                             const int y_step_qn,
+                             ConvolveParams* conv_params);
+#define av1_convolve_2d_scale av1_convolve_2d_scale_c
+
+void av1_convolve_2d_sr_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_convolve_2d_sr_neon(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+#define av1_convolve_2d_sr av1_convolve_2d_sr_neon
+
+void av1_convolve_horiz_rs_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             const int16_t* x_filters,
+                             int x0_qn,
+                             int x_step_qn);
+#define av1_convolve_horiz_rs av1_convolve_horiz_rs_c
+
+void av1_convolve_x_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_x_sr_neon(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+#define av1_convolve_x_sr av1_convolve_x_sr_neon
+
+void av1_convolve_y_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_y_sr_neon(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+#define av1_convolve_y_sr av1_convolve_y_sr_neon
+
+void av1_dr_prediction_z1_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z1 av1_dr_prediction_z1_c
+
+void av1_dr_prediction_z2_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z2 av1_dr_prediction_z2_c
+
+void av1_dr_prediction_z3_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z3 av1_dr_prediction_z3_c
+
+void av1_filter_intra_edge_c(uint8_t* p, int sz, int strength);
+#define av1_filter_intra_edge av1_filter_intra_edge_c
+
+void av1_filter_intra_edge_high_c(uint16_t* p, int sz, int strength);
+#define av1_filter_intra_edge_high av1_filter_intra_edge_high_c
+
+void av1_filter_intra_predictor_c(uint8_t* dst,
+                                  ptrdiff_t stride,
+                                  TX_SIZE tx_size,
+                                  const uint8_t* above,
+                                  const uint8_t* left,
+                                  int mode);
+#define av1_filter_intra_predictor av1_filter_intra_predictor_c
+
+void av1_highbd_convolve8_c(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h,
+                            int bps);
+#define av1_highbd_convolve8 av1_highbd_convolve8_c
+
+void av1_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define av1_highbd_convolve8_horiz av1_highbd_convolve8_horiz_c
+
+void av1_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define av1_highbd_convolve8_vert av1_highbd_convolve8_vert_c
+
+void av1_highbd_convolve_2d_copy_sr_c(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+#define av1_highbd_convolve_2d_copy_sr av1_highbd_convolve_2d_copy_sr_c
+
+void av1_highbd_convolve_2d_scale_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int x_step_qn,
+                                    const int subpel_y_q4,
+                                    const int y_step_qn,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+#define av1_highbd_convolve_2d_scale av1_highbd_convolve_2d_scale_c
+
+void av1_highbd_convolve_2d_sr_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_convolve_2d_sr av1_highbd_convolve_2d_sr_c
+
+void av1_highbd_convolve_avg_c(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve_avg av1_highbd_convolve_avg_c
+
+void av1_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define av1_highbd_convolve_copy av1_highbd_convolve_copy_c
+
+void av1_highbd_convolve_horiz_rs_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    const int16_t* x_filters,
+                                    int x0_qn,
+                                    int x_step_qn,
+                                    int bd);
+#define av1_highbd_convolve_horiz_rs av1_highbd_convolve_horiz_rs_c
+
+void av1_highbd_convolve_x_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_x_sr av1_highbd_convolve_x_sr_c
+
+void av1_highbd_convolve_y_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_y_sr av1_highbd_convolve_y_sr_c
+
+void av1_highbd_dr_prediction_z1_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z1 av1_highbd_dr_prediction_z1_c
+
+void av1_highbd_dr_prediction_z2_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z2 av1_highbd_dr_prediction_z2_c
+
+void av1_highbd_dr_prediction_z3_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z3 av1_highbd_dr_prediction_z3_c
+
+void av1_highbd_iwht4x4_16_add_c(const tran_low_t* input,
+                                 uint8_t* dest,
+                                 int dest_stride,
+                                 int bd);
+#define av1_highbd_iwht4x4_16_add av1_highbd_iwht4x4_16_add_c
+
+void av1_highbd_iwht4x4_1_add_c(const tran_low_t* input,
+                                uint8_t* dest,
+                                int dest_stride,
+                                int bd);
+#define av1_highbd_iwht4x4_1_add av1_highbd_iwht4x4_1_add_c
+
+void av1_highbd_jnt_convolve_2d_c(const uint16_t* src,
+                                  int src_stride,
+                                  uint16_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params,
+                                  int bd);
+#define av1_highbd_jnt_convolve_2d av1_highbd_jnt_convolve_2d_c
+
+void av1_highbd_jnt_convolve_2d_copy_c(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+#define av1_highbd_jnt_convolve_2d_copy av1_highbd_jnt_convolve_2d_copy_c
+
+void av1_highbd_jnt_convolve_x_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_x av1_highbd_jnt_convolve_x_c
+
+void av1_highbd_jnt_convolve_y_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_y av1_highbd_jnt_convolve_y_c
+
+void av1_highbd_warp_affine_c(const int32_t* mat,
+                              const uint16_t* ref,
+                              int width,
+                              int height,
+                              int stride,
+                              uint16_t* pred,
+                              int p_col,
+                              int p_row,
+                              int p_width,
+                              int p_height,
+                              int p_stride,
+                              int subsampling_x,
+                              int subsampling_y,
+                              int bd,
+                              ConvolveParams* conv_params,
+                              int16_t alpha,
+                              int16_t beta,
+                              int16_t gamma,
+                              int16_t delta);
+#define av1_highbd_warp_affine av1_highbd_warp_affine_c
+
+void av1_highbd_wiener_convolve_add_src_c(const uint8_t* src,
+                                          ptrdiff_t src_stride,
+                                          uint8_t* dst,
+                                          ptrdiff_t dst_stride,
+                                          const int16_t* filter_x,
+                                          int x_step_q4,
+                                          const int16_t* filter_y,
+                                          int y_step_q4,
+                                          int w,
+                                          int h,
+                                          const ConvolveParams* conv_params,
+                                          int bps);
+#define av1_highbd_wiener_convolve_add_src av1_highbd_wiener_convolve_add_src_c
+
+void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x16 av1_inv_txfm2d_add_16x16_c
+
+void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
+
+void av1_inv_txfm2d_add_16x4_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x4 av1_inv_txfm2d_add_16x4_c
+
+void av1_inv_txfm2d_add_16x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x64 av1_inv_txfm2d_add_16x64_c
+
+void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
+
+void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
+
+void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x32 av1_inv_txfm2d_add_32x32_c
+
+void av1_inv_txfm2d_add_32x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x64 av1_inv_txfm2d_add_32x64_c
+
+void av1_inv_txfm2d_add_32x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_32x8 av1_inv_txfm2d_add_32x8_c
+
+void av1_inv_txfm2d_add_4x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_4x16 av1_inv_txfm2d_add_4x16_c
+
+void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x4 av1_inv_txfm2d_add_4x4_c
+
+void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
+
+void av1_inv_txfm2d_add_64x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x16 av1_inv_txfm2d_add_64x16_c
+
+void av1_inv_txfm2d_add_64x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x32 av1_inv_txfm2d_add_64x32_c
+
+void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
+
+void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
+
+void av1_inv_txfm2d_add_8x32_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x32 av1_inv_txfm2d_add_8x32_c
+
+void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
+
+void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x8 av1_inv_txfm2d_add_8x8_c
+
+void av1_inv_txfm_add_c(const tran_low_t* dqcoeff,
+                        uint8_t* dst,
+                        int stride,
+                        const TxfmParam* txfm_param);
+#define av1_inv_txfm_add av1_inv_txfm_add_c
+
+void av1_jnt_convolve_2d_c(const uint8_t* src,
+                           int src_stride,
+                           uint8_t* dst,
+                           int dst_stride,
+                           int w,
+                           int h,
+                           InterpFilterParams* filter_params_x,
+                           InterpFilterParams* filter_params_y,
+                           const int subpel_x_q4,
+                           const int subpel_y_q4,
+                           ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_neon(const uint8_t* src,
+                              int src_stride,
+                              uint8_t* dst,
+                              int dst_stride,
+                              int w,
+                              int h,
+                              InterpFilterParams* filter_params_x,
+                              InterpFilterParams* filter_params_y,
+                              const int subpel_x_q4,
+                              const int subpel_y_q4,
+                              ConvolveParams* conv_params);
+#define av1_jnt_convolve_2d av1_jnt_convolve_2d_neon
+
+void av1_jnt_convolve_2d_copy_c(const uint8_t* src,
+                                int src_stride,
+                                uint8_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_neon(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+#define av1_jnt_convolve_2d_copy av1_jnt_convolve_2d_copy_neon
+
+void av1_jnt_convolve_x_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_x_neon(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+#define av1_jnt_convolve_x av1_jnt_convolve_x_neon
+
+void av1_jnt_convolve_y_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_y_neon(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+#define av1_jnt_convolve_y av1_jnt_convolve_y_neon
+
+void av1_selfguided_restoration_c(const uint8_t* dgd8,
+                                  int width,
+                                  int height,
+                                  int dgd_stride,
+                                  int32_t* flt0,
+                                  int32_t* flt1,
+                                  int flt_stride,
+                                  int sgr_params_idx,
+                                  int bit_depth,
+                                  int highbd);
+#define av1_selfguided_restoration av1_selfguided_restoration_c
+
+void av1_upsample_intra_edge_c(uint8_t* p, int sz);
+#define av1_upsample_intra_edge av1_upsample_intra_edge_c
+
+void av1_upsample_intra_edge_high_c(uint16_t* p, int sz, int bd);
+#define av1_upsample_intra_edge_high av1_upsample_intra_edge_high_c
+
+void av1_warp_affine_c(const int32_t* mat,
+                       const uint8_t* ref,
+                       int width,
+                       int height,
+                       int stride,
+                       uint8_t* pred,
+                       int p_col,
+                       int p_row,
+                       int p_width,
+                       int p_height,
+                       int p_stride,
+                       int subsampling_x,
+                       int subsampling_y,
+                       ConvolveParams* conv_params,
+                       int16_t alpha,
+                       int16_t beta,
+                       int16_t gamma,
+                       int16_t delta);
+#define av1_warp_affine av1_warp_affine_c
+
+void av1_wiener_convolve_add_src_c(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_neon(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+#define av1_wiener_convolve_add_src av1_wiener_convolve_add_src_neon
+
+void cdef_filter_block_c(uint8_t* dst8,
+                         uint16_t* dst16,
+                         int dstride,
+                         const uint16_t* in,
+                         int pri_strength,
+                         int sec_strength,
+                         int dir,
+                         int pri_damping,
+                         int sec_damping,
+                         int bsize,
+                         int max,
+                         int coeff_shift);
+void cdef_filter_block_neon(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+#define cdef_filter_block cdef_filter_block_neon
+
+int cdef_find_dir_c(const uint16_t* img,
+                    int stride,
+                    int32_t* var,
+                    int coeff_shift);
+int cdef_find_dir_neon(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+#define cdef_find_dir cdef_find_dir_neon
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_420_hbd cfl_get_luma_subsampling_420_hbd_neon
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_420_lbd cfl_get_luma_subsampling_420_lbd_neon
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_422_hbd cfl_get_luma_subsampling_422_hbd_neon
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_422_lbd cfl_get_luma_subsampling_422_lbd_neon
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_444_hbd cfl_get_luma_subsampling_444_hbd_neon
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_neon(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_444_lbd cfl_get_luma_subsampling_444_lbd_neon
+
+void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
+                                 int dstride,
+                                 const uint16_t* src,
+                                 int sstride,
+                                 int v,
+                                 int h);
+void copy_rect8_16bit_to_16bit_neon(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+#define copy_rect8_16bit_to_16bit copy_rect8_16bit_to_16bit_neon
+
+void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
+                                int dstride,
+                                const uint8_t* src,
+                                int sstride,
+                                int v,
+                                int h);
+void copy_rect8_8bit_to_16bit_neon(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+#define copy_rect8_8bit_to_16bit copy_rect8_8bit_to_16bit_neon
+
+cfl_predict_hbd_fn get_predict_hbd_fn_c(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_neon(TX_SIZE tx_size);
+#define get_predict_hbd_fn get_predict_hbd_fn_neon
+
+cfl_predict_lbd_fn get_predict_lbd_fn_c(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_neon(TX_SIZE tx_size);
+#define get_predict_lbd_fn get_predict_lbd_fn_neon
+
+cfl_subtract_average_fn get_subtract_average_fn_c(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_neon(TX_SIZE tx_size);
+#define get_subtract_average_fn get_subtract_average_fn_neon
+
+void av1_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+#include "aom_ports/arm.h"
+static void setup_rtcd_internal(void) {
+  int flags = arm_cpu_caps();
+
+  (void)flags;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/generic/aom_config.asm b/third_party/libaom/source/config/linux/generic/aom_config.asm
deleted file mode 100644
index 244ed501..0000000
--- a/third_party/libaom/source/config/linux/generic/aom_config.asm
+++ /dev/null
@@ -1,172 +0,0 @@
-@ This file was created from a .asm file
-@  using the ads2gas.pl script.
-	.equ DO1STROUNDING, 0
-.equ ARCH_ARM ,  0
-.equ ARCH_MIPS ,  0
-.equ ARCH_X86 ,  0
-.equ ARCH_X86_64 ,  0
-.equ HAVE_NEON ,  0
-.equ HAVE_NEON_ASM ,  0
-.equ HAVE_MIPS32 ,  0
-.equ HAVE_DSPR2 ,  0
-.equ HAVE_MSA ,  0
-.equ HAVE_MIPS64 ,  0
-.equ HAVE_MMX ,  0
-.equ HAVE_SSE ,  0
-.equ HAVE_SSE2 ,  0
-.equ HAVE_SSE3 ,  0
-.equ HAVE_SSSE3 ,  0
-.equ HAVE_SSE4_1 ,  0
-.equ HAVE_AVX ,  0
-.equ HAVE_AVX2 ,  0
-.equ HAVE_AOM_PORTS ,  1
-.equ HAVE_FEXCEPT ,  1
-.equ HAVE_PTHREAD_H ,  1
-.equ HAVE_UNISTD_H ,  1
-.equ HAVE_WXWIDGETS ,  0
-.equ CONFIG_DEPENDENCY_TRACKING ,  1
-.equ CONFIG_EXTERNAL_BUILD ,  1
-.equ CONFIG_INSTALL_DOCS ,  0
-.equ CONFIG_INSTALL_BINS ,  1
-.equ CONFIG_INSTALL_LIBS ,  1
-.equ CONFIG_INSTALL_SRCS ,  0
-.equ CONFIG_DEBUG ,  0
-.equ CONFIG_GPROF ,  0
-.equ CONFIG_GCOV ,  0
-.equ CONFIG_RVCT ,  0
-.equ CONFIG_GCC ,  1
-.equ CONFIG_MSVS ,  0
-.equ CONFIG_PIC ,  0
-.equ CONFIG_BIG_ENDIAN ,  0
-.equ CONFIG_CODEC_SRCS ,  0
-.equ CONFIG_DEBUG_LIBS ,  0
-.equ CONFIG_RUNTIME_CPU_DETECT ,  0
-.equ CONFIG_POSTPROC ,  1
-.equ CONFIG_MULTITHREAD ,  1
-.equ CONFIG_INTERNAL_STATS ,  0
-.equ CONFIG_AV1_ENCODER ,  0
-.equ CONFIG_AV1_DECODER ,  1
-.equ CONFIG_AV1 ,  1
-.equ CONFIG_STATIC_MSVCRT ,  0
-.equ CONFIG_SPATIAL_RESAMPLING ,  1
-.equ CONFIG_REALTIME_ONLY ,  1
-.equ CONFIG_SHARED ,  0
-.equ CONFIG_STATIC ,  1
-.equ CONFIG_SMALL ,  0
-.equ CONFIG_POSTPROC_VISUALIZER ,  0
-.equ CONFIG_OS_SUPPORT ,  1
-.equ CONFIG_UNIT_TESTS ,  1
-.equ CONFIG_WEBM_IO ,  1
-.equ CONFIG_LIBYUV ,  1
-.equ CONFIG_ACCOUNTING ,  0
-.equ CONFIG_INSPECTION ,  0
-.equ CONFIG_DECODE_PERF_TESTS ,  0
-.equ CONFIG_ENCODE_PERF_TESTS ,  0
-.equ CONFIG_COEFFICIENT_RANGE_CHECKING ,  0
-.equ CONFIG_LOWBITDEPTH ,  1
-.equ CONFIG_HIGHBITDEPTH ,  0
-.equ CONFIG_EXPERIMENTAL ,  0
-.equ CONFIG_SIZE_LIMIT ,  1
-.equ CONFIG_FP_MB_STATS ,  0
-.equ CONFIG_CDEF ,  1
-.equ CONFIG_CDEF_SINGLEPASS ,  0
-.equ CONFIG_VAR_TX ,  1
-.equ CONFIG_RECT_TX ,  1
-.equ CONFIG_RECT_TX_EXT ,  0
-.equ CONFIG_TPL_MV ,  0
-.equ CONFIG_DUAL_FILTER ,  1
-.equ CONFIG_CONVOLVE_ROUND ,  1
-.equ CONFIG_COMPOUND_ROUND ,  0
-.equ CONFIG_EXT_TX ,  1
-.equ CONFIG_DPCM_INTRA ,  0
-.equ CONFIG_TX64X64 ,  0
-.equ CONFIG_EXT_INTRA ,  1
-.equ CONFIG_INTRA_INTERP ,  0
-.equ CONFIG_FILTER_INTRA ,  0
-.equ CONFIG_INTRA_EDGE ,  0
-.equ CONFIG_INTRABC ,  0
-.equ CONFIG_EXT_INTER ,  1
-.equ CONFIG_INTERINTRA ,  1
-.equ CONFIG_WEDGE ,  1
-.equ CONFIG_COMPOUND_SEGMENT ,  1
-.equ CONFIG_EXT_REFS ,  1
-.equ CONFIG_SPEED_REFS ,  0
-.equ CONFIG_GF_GROUPS ,  0
-.equ CONFIG_GLOBAL_MOTION ,  1
-.equ CONFIG_NEW_QUANT ,  0
-.equ CONFIG_SUPERTX ,  0
-.equ CONFIG_ANS ,  0
-.equ CONFIG_LOOP_RESTORATION ,  0
-.equ CONFIG_EXT_PARTITION ,  0
-.equ CONFIG_EXT_PARTITION_TYPES ,  0
-.equ CONFIG_UNPOISON_PARTITION_CTX ,  0
-.equ CONFIG_EXT_TILE ,  0
-.equ CONFIG_MOTION_VAR ,  1
-.equ CONFIG_NCOBMC ,  0
-.equ CONFIG_WARPED_MOTION ,  1
-.equ CONFIG_Q_ADAPT_PROBS ,  0
-.equ CONFIG_BITSTREAM_DEBUG ,  0
-.equ CONFIG_INTER_STATS_ONLY ,  0
-.equ CONFIG_PALETTE_DELTA_ENCODING ,  0
-.equ CONFIG_RAWBITS ,  0
-.equ CONFIG_PVQ ,  0
-.equ CONFIG_CFL ,  0
-.equ CONFIG_XIPHRC ,  0
-.equ CONFIG_DCT_ONLY ,  0
-.equ CONFIG_DAALA_DCT4 ,  0
-.equ CONFIG_DAALA_DCT8 ,  0
-.equ CONFIG_DAALA_DCT16 ,  0
-.equ CONFIG_DAALA_DCT32 ,  0
-.equ CONFIG_DAALA_DCT64 ,  0
-.equ CONFIG_CB4X4 ,  1
-.equ CONFIG_CHROMA_2X2 ,  0
-.equ CONFIG_CHROMA_SUB8X8 ,  1
-.equ CONFIG_FRAME_SIZE ,  0
-.equ CONFIG_DELTA_Q ,  1
-.equ CONFIG_EXT_DELTA_Q ,  1
-.equ CONFIG_ADAPT_SCAN ,  0
-.equ CONFIG_FILTER_7BIT ,  1
-.equ CONFIG_PARALLEL_DEBLOCKING ,  1
-.equ CONFIG_LOOPFILTERING_ACROSS_TILES ,  1
-.equ CONFIG_TEMPMV_SIGNALING ,  1
-.equ CONFIG_RD_DEBUG ,  0
-.equ CONFIG_REFERENCE_BUFFER ,  1
-.equ CONFIG_COEF_INTERLEAVE ,  0
-.equ CONFIG_ENTROPY_STATS ,  0
-.equ CONFIG_MASKED_TX ,  0
-.equ CONFIG_DEPENDENT_HORZTILES ,  0
-.equ CONFIG_DIST_8X8 ,  1
-.equ CONFIG_TRIPRED ,  0
-.equ CONFIG_PALETTE_THROUGHPUT ,  1
-.equ CONFIG_REF_ADAPT ,  0
-.equ CONFIG_LV_MAP ,  0
-.equ CONFIG_TXK_SEL ,  0
-.equ CONFIG_MV_COMPRESS ,  1
-.equ CONFIG_SEGMENT_ZEROMV ,  0
-.equ CONFIG_FRAME_SUPERRES ,  0
-.equ CONFIG_NEW_MULTISYMBOL ,  0
-.equ CONFIG_COMPOUND_SINGLEREF ,  0
-.equ CONFIG_AOM_QM ,  1
-.equ CONFIG_ONE_SIDED_COMPOUND ,  1
-.equ CONFIG_EXT_COMP_REFS ,  1
-.equ CONFIG_SMOOTH_HV ,  1
-.equ CONFIG_VAR_REFS ,  0
-.equ CONFIG_RECT_INTRA_PRED ,  1
-.equ CONFIG_LGT ,  0
-.equ CONFIG_SBL_SYMBOL ,  0
-.equ CONFIG_NCOBMC_ADAPT_WEIGHT ,  0
-.equ CONFIG_BGSPRITE ,  0
-.equ CONFIG_VAR_TX_NO_TX_MODE ,  0
-.equ CONFIG_MRC_TX ,  0
-.equ CONFIG_LPF_DIRECT ,  0
-.equ CONFIG_LOOPFILTER_LEVEL ,  0
-.equ CONFIG_NO_FRAME_CONTEXT_SIGNALING ,  0
-.equ CONFIG_TXMG ,  0
-.equ CONFIG_HASH_ME ,  0
-.equ CONFIG_COLORSPACE_HEADERS ,  0
-.equ CONFIG_MFMV ,  0
-.equ CONFIG_JNT_COMP ,  0
-.equ CONFIG_ANALYZER ,  0
-.equ DECODE_WIDTH_LIMIT ,  16384
-.equ DECODE_HEIGHT_LIMIT ,  16384
-	.section	.note.GNU-stack,"",%progbits
diff --git a/third_party/libaom/source/config/linux/generic/aom_config.c b/third_party/libaom/source/config/linux/generic/aom_config.c
deleted file mode 100644
index 1366770..0000000
--- a/third_party/libaom/source/config/linux/generic/aom_config.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-#include "aom/aom_codec.h"
-static const char* const cfg = "--target=generic-gnu --enable-external-build --enable-postproc --disable-av1-encoder --size-limit=16384x16384 --enable-realtime-only --disable-install-docs --disable-highbitdepth";
-const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/generic/aom_config.h b/third_party/libaom/source/config/linux/generic/aom_config.h
deleted file mode 100644
index bb233fea..0000000
--- a/third_party/libaom/source/config/linux/generic/aom_config.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-/* This file automatically generated by configure. Do not edit! */
-#ifndef AOM_CONFIG_H
-#define AOM_CONFIG_H
-#define RESTRICT    
-#define INLINE      inline
-#define ARCH_ARM 0
-#define ARCH_MIPS 0
-#define ARCH_X86 0
-#define ARCH_X86_64 0
-#define HAVE_NEON 0
-#define HAVE_NEON_ASM 0
-#define HAVE_MIPS32 0
-#define HAVE_DSPR2 0
-#define HAVE_MSA 0
-#define HAVE_MIPS64 0
-#define HAVE_MMX 0
-#define HAVE_SSE 0
-#define HAVE_SSE2 0
-#define HAVE_SSE3 0
-#define HAVE_SSSE3 0
-#define HAVE_SSE4_1 0
-#define HAVE_AVX 0
-#define HAVE_AVX2 0
-#define HAVE_AOM_PORTS 1
-#define HAVE_FEXCEPT 1
-#define HAVE_PTHREAD_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_WXWIDGETS 0
-#define CONFIG_DEPENDENCY_TRACKING 1
-#define CONFIG_EXTERNAL_BUILD 1
-#define CONFIG_INSTALL_DOCS 0
-#define CONFIG_INSTALL_BINS 1
-#define CONFIG_INSTALL_LIBS 1
-#define CONFIG_INSTALL_SRCS 0
-#define CONFIG_DEBUG 0
-#define CONFIG_GPROF 0
-#define CONFIG_GCOV 0
-#define CONFIG_RVCT 0
-#define CONFIG_GCC 1
-#define CONFIG_MSVS 0
-#define CONFIG_PIC 0
-#define CONFIG_BIG_ENDIAN 0
-#define CONFIG_CODEC_SRCS 0
-#define CONFIG_DEBUG_LIBS 0
-#define CONFIG_RUNTIME_CPU_DETECT 0
-#define CONFIG_POSTPROC 1
-#define CONFIG_MULTITHREAD 1
-#define CONFIG_INTERNAL_STATS 0
-#define CONFIG_AV1_ENCODER 0
-#define CONFIG_AV1_DECODER 1
-#define CONFIG_AV1 1
-#define CONFIG_STATIC_MSVCRT 0
-#define CONFIG_SPATIAL_RESAMPLING 1
-#define CONFIG_REALTIME_ONLY 1
-#define CONFIG_SHARED 0
-#define CONFIG_STATIC 1
-#define CONFIG_SMALL 0
-#define CONFIG_POSTPROC_VISUALIZER 0
-#define CONFIG_OS_SUPPORT 1
-#define CONFIG_UNIT_TESTS 1
-#define CONFIG_WEBM_IO 1
-#define CONFIG_LIBYUV 1
-#define CONFIG_ACCOUNTING 0
-#define CONFIG_INSPECTION 0
-#define CONFIG_DECODE_PERF_TESTS 0
-#define CONFIG_ENCODE_PERF_TESTS 0
-#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
-#define CONFIG_LOWBITDEPTH 1
-#define CONFIG_HIGHBITDEPTH 0
-#define CONFIG_EXPERIMENTAL 0
-#define CONFIG_SIZE_LIMIT 1
-#define CONFIG_FP_MB_STATS 0
-#define CONFIG_CDEF 1
-#define CONFIG_CDEF_SINGLEPASS 0
-#define CONFIG_VAR_TX 1
-#define CONFIG_RECT_TX 1
-#define CONFIG_RECT_TX_EXT 0
-#define CONFIG_TPL_MV 0
-#define CONFIG_DUAL_FILTER 1
-#define CONFIG_CONVOLVE_ROUND 1
-#define CONFIG_COMPOUND_ROUND 0
-#define CONFIG_EXT_TX 1
-#define CONFIG_DPCM_INTRA 0
-#define CONFIG_TX64X64 0
-#define CONFIG_EXT_INTRA 1
-#define CONFIG_INTRA_INTERP 0
-#define CONFIG_FILTER_INTRA 0
-#define CONFIG_INTRA_EDGE 0
-#define CONFIG_INTRABC 0
-#define CONFIG_EXT_INTER 1
-#define CONFIG_INTERINTRA 1
-#define CONFIG_WEDGE 1
-#define CONFIG_COMPOUND_SEGMENT 1
-#define CONFIG_EXT_REFS 1
-#define CONFIG_SPEED_REFS 0
-#define CONFIG_GF_GROUPS 0
-#define CONFIG_GLOBAL_MOTION 1
-#define CONFIG_NEW_QUANT 0
-#define CONFIG_SUPERTX 0
-#define CONFIG_ANS 0
-#define CONFIG_LOOP_RESTORATION 0
-#define CONFIG_EXT_PARTITION 0
-#define CONFIG_EXT_PARTITION_TYPES 0
-#define CONFIG_UNPOISON_PARTITION_CTX 0
-#define CONFIG_EXT_TILE 0
-#define CONFIG_MOTION_VAR 1
-#define CONFIG_NCOBMC 0
-#define CONFIG_WARPED_MOTION 1
-#define CONFIG_Q_ADAPT_PROBS 0
-#define CONFIG_BITSTREAM_DEBUG 0
-#define CONFIG_INTER_STATS_ONLY 0
-#define CONFIG_PALETTE_DELTA_ENCODING 0
-#define CONFIG_RAWBITS 0
-#define CONFIG_PVQ 0
-#define CONFIG_CFL 0
-#define CONFIG_XIPHRC 0
-#define CONFIG_DCT_ONLY 0
-#define CONFIG_DAALA_DCT4 0
-#define CONFIG_DAALA_DCT8 0
-#define CONFIG_DAALA_DCT16 0
-#define CONFIG_DAALA_DCT32 0
-#define CONFIG_DAALA_DCT64 0
-#define CONFIG_CB4X4 1
-#define CONFIG_CHROMA_2X2 0
-#define CONFIG_CHROMA_SUB8X8 1
-#define CONFIG_FRAME_SIZE 0
-#define CONFIG_DELTA_Q 1
-#define CONFIG_EXT_DELTA_Q 1
-#define CONFIG_ADAPT_SCAN 0
-#define CONFIG_FILTER_7BIT 1
-#define CONFIG_PARALLEL_DEBLOCKING 1
-#define CONFIG_LOOPFILTERING_ACROSS_TILES 1
-#define CONFIG_TEMPMV_SIGNALING 1
-#define CONFIG_RD_DEBUG 0
-#define CONFIG_REFERENCE_BUFFER 1
-#define CONFIG_COEF_INTERLEAVE 0
-#define CONFIG_ENTROPY_STATS 0
-#define CONFIG_MASKED_TX 0
-#define CONFIG_DEPENDENT_HORZTILES 0
-#define CONFIG_DIST_8X8 1
-#define CONFIG_TRIPRED 0
-#define CONFIG_PALETTE_THROUGHPUT 1
-#define CONFIG_REF_ADAPT 0
-#define CONFIG_LV_MAP 0
-#define CONFIG_TXK_SEL 0
-#define CONFIG_MV_COMPRESS 1
-#define CONFIG_SEGMENT_ZEROMV 0
-#define CONFIG_FRAME_SUPERRES 0
-#define CONFIG_NEW_MULTISYMBOL 0
-#define CONFIG_COMPOUND_SINGLEREF 0
-#define CONFIG_AOM_QM 1
-#define CONFIG_ONE_SIDED_COMPOUND 1
-#define CONFIG_EXT_COMP_REFS 1
-#define CONFIG_SMOOTH_HV 1
-#define CONFIG_VAR_REFS 0
-#define CONFIG_RECT_INTRA_PRED 1
-#define CONFIG_LGT 0
-#define CONFIG_SBL_SYMBOL 0
-#define CONFIG_NCOBMC_ADAPT_WEIGHT 0
-#define CONFIG_BGSPRITE 0
-#define CONFIG_VAR_TX_NO_TX_MODE 0
-#define CONFIG_MRC_TX 0
-#define CONFIG_LPF_DIRECT 0
-#define CONFIG_LOOPFILTER_LEVEL 0
-#define CONFIG_NO_FRAME_CONTEXT_SIGNALING 0
-#define CONFIG_TXMG 0
-#define CONFIG_HASH_ME 0
-#define CONFIG_COLORSPACE_HEADERS 0
-#define CONFIG_MFMV 0
-#define CONFIG_JNT_COMP 0
-#define CONFIG_ANALYZER 0
-#define DECODE_WIDTH_LIMIT 16384
-#define DECODE_HEIGHT_LIMIT 16384
-#endif /* AOM_CONFIG_H */
diff --git a/third_party/libaom/source/config/linux/generic/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/generic/aom_dsp_rtcd.h
deleted file mode 100644
index 06eff885..0000000
--- a/third_party/libaom/source/config/linux/generic/aom_dsp_rtcd.h
+++ /dev/null
@@ -1,1575 +0,0 @@
-#ifndef AOM_DSP_RTCD_H_
-#define AOM_DSP_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * DSP
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/aom_dsp_common.h"
-#include "av1/common/enums.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_blend_a64_d32_mask_c(int32_t* dst,
-                              uint32_t dst_stride,
-                              const int32_t* src0,
-                              uint32_t src0_stride,
-                              const int32_t* src1,
-                              uint32_t src1_stride,
-                              const uint8_t* mask,
-                              uint32_t mask_stride,
-                              int h,
-                              int w,
-                              int suby,
-                              int subx);
-#define aom_blend_a64_d32_mask aom_blend_a64_d32_mask_c
-
-void aom_blend_a64_hmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-#define aom_blend_a64_hmask aom_blend_a64_hmask_c
-
-void aom_blend_a64_mask_c(uint8_t* dst,
-                          uint32_t dst_stride,
-                          const uint8_t* src0,
-                          uint32_t src0_stride,
-                          const uint8_t* src1,
-                          uint32_t src1_stride,
-                          const uint8_t* mask,
-                          uint32_t mask_stride,
-                          int h,
-                          int w,
-                          int suby,
-                          int subx);
-#define aom_blend_a64_mask aom_blend_a64_mask_c
-
-void aom_blend_a64_vmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-#define aom_blend_a64_vmask aom_blend_a64_vmask_c
-
-void aom_convolve8_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-#define aom_convolve8 aom_convolve8_c
-
-void aom_convolve8_avg_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-#define aom_convolve8_avg aom_convolve8_avg_c
-
-void aom_convolve8_avg_horiz_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-#define aom_convolve8_avg_horiz aom_convolve8_avg_horiz_c
-
-void aom_convolve8_avg_horiz_scale_c(const uint8_t* src,
-                                     ptrdiff_t src_stride,
-                                     uint8_t* dst,
-                                     ptrdiff_t dst_stride,
-                                     const int16_t* filter_x,
-                                     int subpel_x,
-                                     int x_step_q4,
-                                     const int16_t* filter_y,
-                                     int subpel_y,
-                                     int y_step_q4,
-                                     int w,
-                                     int h);
-#define aom_convolve8_avg_horiz_scale aom_convolve8_avg_horiz_scale_c
-
-void aom_convolve8_avg_scale_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int subpel_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int subpel_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-#define aom_convolve8_avg_scale aom_convolve8_avg_scale_c
-
-void aom_convolve8_avg_vert_c(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-#define aom_convolve8_avg_vert aom_convolve8_avg_vert_c
-
-void aom_convolve8_avg_vert_scale_c(const uint8_t* src,
-                                    ptrdiff_t src_stride,
-                                    uint8_t* dst,
-                                    ptrdiff_t dst_stride,
-                                    const int16_t* filter_x,
-                                    int subpel_x,
-                                    int x_step_q4,
-                                    const int16_t* filter_y,
-                                    int subpel_y,
-                                    int y_step_q4,
-                                    int w,
-                                    int h);
-#define aom_convolve8_avg_vert_scale aom_convolve8_avg_vert_scale_c
-
-void aom_convolve8_horiz_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_convolve8_horiz aom_convolve8_horiz_c
-
-void aom_convolve8_horiz_scale_c(const uint8_t* src,
-                                 ptrdiff_t src_stride,
-                                 uint8_t* dst,
-                                 ptrdiff_t dst_stride,
-                                 const int16_t* filter_x,
-                                 int subpel_x,
-                                 int x_step_q4,
-                                 const int16_t* filter_y,
-                                 int subpel_y,
-                                 int y_step_q4,
-                                 int w,
-                                 int h);
-#define aom_convolve8_horiz_scale aom_convolve8_horiz_scale_c
-
-void aom_convolve8_scale_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int subpel_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int subpel_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_convolve8_scale aom_convolve8_scale_c
-
-void aom_convolve8_vert_c(const uint8_t* src,
-                          ptrdiff_t src_stride,
-                          uint8_t* dst,
-                          ptrdiff_t dst_stride,
-                          const int16_t* filter_x,
-                          int x_step_q4,
-                          const int16_t* filter_y,
-                          int y_step_q4,
-                          int w,
-                          int h);
-#define aom_convolve8_vert aom_convolve8_vert_c
-
-void aom_convolve8_vert_scale_c(const uint8_t* src,
-                                ptrdiff_t src_stride,
-                                uint8_t* dst,
-                                ptrdiff_t dst_stride,
-                                const int16_t* filter_x,
-                                int subpel_x,
-                                int x_step_q4,
-                                const int16_t* filter_y,
-                                int subpel_y,
-                                int y_step_q4,
-                                int w,
-                                int h);
-#define aom_convolve8_vert_scale aom_convolve8_vert_scale_c
-
-void aom_convolve_avg_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-#define aom_convolve_avg aom_convolve_avg_c
-
-void aom_convolve_copy_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-#define aom_convolve_copy aom_convolve_copy_c
-
-void aom_d117_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x16 aom_d117_predictor_16x16_c
-
-void aom_d117_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x32 aom_d117_predictor_16x32_c
-
-void aom_d117_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_16x8 aom_d117_predictor_16x8_c
-
-void aom_d117_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_2x2 aom_d117_predictor_2x2_c
-
-void aom_d117_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x16 aom_d117_predictor_32x16_c
-
-void aom_d117_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x32 aom_d117_predictor_32x32_c
-
-void aom_d117_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x4 aom_d117_predictor_4x4_c
-
-void aom_d117_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x8 aom_d117_predictor_4x8_c
-
-void aom_d117_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_8x16 aom_d117_predictor_8x16_c
-
-void aom_d117_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x4 aom_d117_predictor_8x4_c
-
-void aom_d117_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x8 aom_d117_predictor_8x8_c
-
-void aom_d135_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x16 aom_d135_predictor_16x16_c
-
-void aom_d135_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x32 aom_d135_predictor_16x32_c
-
-void aom_d135_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_16x8 aom_d135_predictor_16x8_c
-
-void aom_d135_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_2x2 aom_d135_predictor_2x2_c
-
-void aom_d135_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x16 aom_d135_predictor_32x16_c
-
-void aom_d135_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x32 aom_d135_predictor_32x32_c
-
-void aom_d135_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x4 aom_d135_predictor_4x4_c
-
-void aom_d135_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x8 aom_d135_predictor_4x8_c
-
-void aom_d135_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_8x16 aom_d135_predictor_8x16_c
-
-void aom_d135_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x4 aom_d135_predictor_8x4_c
-
-void aom_d135_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x8 aom_d135_predictor_8x8_c
-
-void aom_d153_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_16x16 aom_d153_predictor_16x16_c
-
-void aom_d153_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_16x32 aom_d153_predictor_16x32_c
-
-void aom_d153_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_16x8 aom_d153_predictor_16x8_c
-
-void aom_d153_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_2x2 aom_d153_predictor_2x2_c
-
-void aom_d153_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_32x16 aom_d153_predictor_32x16_c
-
-void aom_d153_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_32x32 aom_d153_predictor_32x32_c
-
-void aom_d153_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_4x4 aom_d153_predictor_4x4_c
-
-void aom_d153_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_4x8 aom_d153_predictor_4x8_c
-
-void aom_d153_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_8x16 aom_d153_predictor_8x16_c
-
-void aom_d153_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_8x4 aom_d153_predictor_8x4_c
-
-void aom_d153_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_8x8 aom_d153_predictor_8x8_c
-
-void aom_d207e_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x16 aom_d207e_predictor_16x16_c
-
-void aom_d207e_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x32 aom_d207e_predictor_16x32_c
-
-void aom_d207e_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_16x8 aom_d207e_predictor_16x8_c
-
-void aom_d207e_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_2x2 aom_d207e_predictor_2x2_c
-
-void aom_d207e_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x16 aom_d207e_predictor_32x16_c
-
-void aom_d207e_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x32 aom_d207e_predictor_32x32_c
-
-void aom_d207e_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x4 aom_d207e_predictor_4x4_c
-
-void aom_d207e_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x8 aom_d207e_predictor_4x8_c
-
-void aom_d207e_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_8x16 aom_d207e_predictor_8x16_c
-
-void aom_d207e_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x4 aom_d207e_predictor_8x4_c
-
-void aom_d207e_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x8 aom_d207e_predictor_8x8_c
-
-void aom_d45e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x16 aom_d45e_predictor_16x16_c
-
-void aom_d45e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x32 aom_d45e_predictor_16x32_c
-
-void aom_d45e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_16x8 aom_d45e_predictor_16x8_c
-
-void aom_d45e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_2x2 aom_d45e_predictor_2x2_c
-
-void aom_d45e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x16 aom_d45e_predictor_32x16_c
-
-void aom_d45e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x32 aom_d45e_predictor_32x32_c
-
-void aom_d45e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x4 aom_d45e_predictor_4x4_c
-
-void aom_d45e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x8 aom_d45e_predictor_4x8_c
-
-void aom_d45e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_8x16 aom_d45e_predictor_8x16_c
-
-void aom_d45e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x4 aom_d45e_predictor_8x4_c
-
-void aom_d45e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x8 aom_d45e_predictor_8x8_c
-
-void aom_d63e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x16 aom_d63e_predictor_16x16_c
-
-void aom_d63e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x32 aom_d63e_predictor_16x32_c
-
-void aom_d63e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_16x8 aom_d63e_predictor_16x8_c
-
-void aom_d63e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_2x2 aom_d63e_predictor_2x2_c
-
-void aom_d63e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x16 aom_d63e_predictor_32x16_c
-
-void aom_d63e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x32 aom_d63e_predictor_32x32_c
-
-void aom_d63e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_4x4 aom_d63e_predictor_4x4_c
-
-void aom_d63e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_4x8 aom_d63e_predictor_4x8_c
-
-void aom_d63e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_8x16 aom_d63e_predictor_8x16_c
-
-void aom_d63e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x4 aom_d63e_predictor_8x4_c
-
-void aom_d63e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x8 aom_d63e_predictor_8x8_c
-
-void aom_dc_128_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_16x16 aom_dc_128_predictor_16x16_c
-
-void aom_dc_128_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
-
-void aom_dc_128_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
-
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
-void aom_dc_128_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
-
-void aom_dc_128_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_32x32 aom_dc_128_predictor_32x32_c
-
-void aom_dc_128_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_4x4 aom_dc_128_predictor_4x4_c
-
-void aom_dc_128_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
-
-void aom_dc_128_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
-
-void aom_dc_128_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
-
-void aom_dc_128_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_8x8 aom_dc_128_predictor_8x8_c
-
-void aom_dc_left_predictor_16x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_16x16 aom_dc_left_predictor_16x16_c
-
-void aom_dc_left_predictor_16x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
-
-void aom_dc_left_predictor_16x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
-
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
-void aom_dc_left_predictor_32x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
-
-void aom_dc_left_predictor_32x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_32x32 aom_dc_left_predictor_32x32_c
-
-void aom_dc_left_predictor_4x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_4x4 aom_dc_left_predictor_4x4_c
-
-void aom_dc_left_predictor_4x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
-
-void aom_dc_left_predictor_8x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
-
-void aom_dc_left_predictor_8x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
-
-void aom_dc_left_predictor_8x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_8x8 aom_dc_left_predictor_8x8_c
-
-void aom_dc_predictor_16x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_16x16 aom_dc_predictor_16x16_c
-
-void aom_dc_predictor_16x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
-
-void aom_dc_predictor_16x8_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
-
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
-void aom_dc_predictor_32x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
-
-void aom_dc_predictor_32x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_32x32 aom_dc_predictor_32x32_c
-
-void aom_dc_predictor_4x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_4x4 aom_dc_predictor_4x4_c
-
-void aom_dc_predictor_4x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
-
-void aom_dc_predictor_8x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
-
-void aom_dc_predictor_8x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
-
-void aom_dc_predictor_8x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_8x8 aom_dc_predictor_8x8_c
-
-void aom_dc_top_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_16x16 aom_dc_top_predictor_16x16_c
-
-void aom_dc_top_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
-
-void aom_dc_top_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
-
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
-void aom_dc_top_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
-
-void aom_dc_top_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_32x32 aom_dc_top_predictor_32x32_c
-
-void aom_dc_top_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_4x4 aom_dc_top_predictor_4x4_c
-
-void aom_dc_top_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
-
-void aom_dc_top_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
-
-void aom_dc_top_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
-
-void aom_dc_top_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_8x8 aom_dc_top_predictor_8x8_c
-
-void aom_h_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_16x16 aom_h_predictor_16x16_c
-
-void aom_h_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
-
-void aom_h_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
-
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
-void aom_h_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
-
-void aom_h_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_32x32 aom_h_predictor_32x32_c
-
-void aom_h_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_4x4 aom_h_predictor_4x4_c
-
-void aom_h_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
-
-void aom_h_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
-
-void aom_h_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
-
-void aom_h_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_8x8 aom_h_predictor_8x8_c
-
-void aom_highbd_iwht4x4_16_add_c(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride,
-                                 int bd);
-#define aom_highbd_iwht4x4_16_add aom_highbd_iwht4x4_16_add_c
-
-void aom_highbd_iwht4x4_1_add_c(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride,
-                                int bd);
-#define aom_highbd_iwht4x4_1_add aom_highbd_iwht4x4_1_add_c
-
-void aom_idct16x16_10_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-#define aom_idct16x16_10_add aom_idct16x16_10_add_c
-
-void aom_idct16x16_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-#define aom_idct16x16_1_add aom_idct16x16_1_add_c
-
-void aom_idct16x16_256_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-#define aom_idct16x16_256_add aom_idct16x16_256_add_c
-
-void aom_idct16x16_38_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-#define aom_idct16x16_38_add aom_idct16x16_38_add_c
-
-void aom_idct32x32_1024_add_c(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-#define aom_idct32x32_1024_add aom_idct32x32_1024_add_c
-
-void aom_idct32x32_135_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-#define aom_idct32x32_135_add aom_idct32x32_135_add_c
-
-void aom_idct32x32_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-#define aom_idct32x32_1_add aom_idct32x32_1_add_c
-
-void aom_idct32x32_34_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-#define aom_idct32x32_34_add aom_idct32x32_34_add_c
-
-void aom_idct4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-#define aom_idct4x4_16_add aom_idct4x4_16_add_c
-
-void aom_idct4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-#define aom_idct4x4_1_add aom_idct4x4_1_add_c
-
-void aom_idct8x8_12_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-#define aom_idct8x8_12_add aom_idct8x8_12_add_c
-
-void aom_idct8x8_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-#define aom_idct8x8_1_add aom_idct8x8_1_add_c
-
-void aom_idct8x8_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-#define aom_idct8x8_64_add aom_idct8x8_64_add_c
-
-void aom_iwht4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-#define aom_iwht4x4_16_add aom_iwht4x4_16_add_c
-
-void aom_iwht4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-#define aom_iwht4x4_1_add aom_iwht4x4_1_add_c
-
-void aom_lpf_horizontal_4_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_c
-
-void aom_lpf_horizontal_4_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
-
-void aom_lpf_horizontal_8_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-#define aom_lpf_horizontal_8 aom_lpf_horizontal_8_c
-
-void aom_lpf_horizontal_8_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
-
-void aom_lpf_horizontal_edge_16_c(uint8_t* s,
-                                  int pitch,
-                                  const uint8_t* blimit,
-                                  const uint8_t* limit,
-                                  const uint8_t* thresh);
-#define aom_lpf_horizontal_edge_16 aom_lpf_horizontal_edge_16_c
-
-void aom_lpf_horizontal_edge_8_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit,
-                                 const uint8_t* limit,
-                                 const uint8_t* thresh);
-#define aom_lpf_horizontal_edge_8 aom_lpf_horizontal_edge_8_c
-
-void aom_lpf_vertical_16_c(uint8_t* s,
-                           int pitch,
-                           const uint8_t* blimit,
-                           const uint8_t* limit,
-                           const uint8_t* thresh);
-#define aom_lpf_vertical_16 aom_lpf_vertical_16_c
-
-void aom_lpf_vertical_16_dual_c(uint8_t* s,
-                                int pitch,
-                                const uint8_t* blimit,
-                                const uint8_t* limit,
-                                const uint8_t* thresh);
-#define aom_lpf_vertical_16_dual aom_lpf_vertical_16_dual_c
-
-void aom_lpf_vertical_4_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-#define aom_lpf_vertical_4 aom_lpf_vertical_4_c
-
-void aom_lpf_vertical_4_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
-
-void aom_lpf_vertical_8_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-#define aom_lpf_vertical_8 aom_lpf_vertical_8_c
-
-void aom_lpf_vertical_8_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
-
-void aom_paeth_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
-
-void aom_paeth_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
-
-void aom_paeth_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
-
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
-void aom_paeth_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
-
-void aom_paeth_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
-
-void aom_paeth_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
-
-void aom_paeth_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
-
-void aom_paeth_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
-
-void aom_paeth_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
-
-void aom_paeth_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
-
-void aom_scaled_2d_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-#define aom_scaled_2d aom_scaled_2d_c
-
-void aom_scaled_avg_2d_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-#define aom_scaled_avg_2d aom_scaled_avg_2d_c
-
-void aom_scaled_avg_horiz_c(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-#define aom_scaled_avg_horiz aom_scaled_avg_horiz_c
-
-void aom_scaled_avg_vert_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_scaled_avg_vert aom_scaled_avg_vert_c
-
-void aom_scaled_horiz_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-#define aom_scaled_horiz aom_scaled_horiz_c
-
-void aom_scaled_vert_c(const uint8_t* src,
-                       ptrdiff_t src_stride,
-                       uint8_t* dst,
-                       ptrdiff_t dst_stride,
-                       const int16_t* filter_x,
-                       int x_step_q4,
-                       const int16_t* filter_y,
-                       int y_step_q4,
-                       int w,
-                       int h);
-#define aom_scaled_vert aom_scaled_vert_c
-
-void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
-
-void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
-
-void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
-
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
-void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
-
-void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
-
-void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
-
-void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
-
-void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
-
-void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
-
-void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
-
-void aom_smooth_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
-
-void aom_smooth_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
-
-void aom_smooth_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
-
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
-void aom_smooth_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
-
-void aom_smooth_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
-
-void aom_smooth_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
-
-void aom_smooth_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
-
-void aom_smooth_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
-
-void aom_smooth_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
-
-void aom_smooth_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
-
-void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
-
-void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
-
-void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
-
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
-void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
-
-void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
-
-void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
-
-void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
-
-void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
-
-void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
-
-void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
-
-void aom_v_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_16x16 aom_v_predictor_16x16_c
-
-void aom_v_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
-
-void aom_v_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
-
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
-void aom_v_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
-
-void aom_v_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_32x32 aom_v_predictor_32x32_c
-
-void aom_v_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_4x4 aom_v_predictor_4x4_c
-
-void aom_v_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
-
-void aom_v_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
-
-void aom_v_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
-
-void aom_v_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_8x8 aom_v_predictor_8x8_c
-
-void aom_dsp_rtcd(void);
-
-#include "aom_config.h"
-
-#ifdef RTCD_C
-static void setup_rtcd_internal(void) {}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/linux/generic/av1_rtcd.h b/third_party/libaom/source/config/linux/generic/av1_rtcd.h
deleted file mode 100644
index f5848a98..0000000
--- a/third_party/libaom/source/config/linux/generic/av1_rtcd.h
+++ /dev/null
@@ -1,398 +0,0 @@
-#ifndef AV1_RTCD_H_
-#define AV1_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * AV1
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/txfm_common.h"
-#include "av1/common/av1_txfm.h"
-#include "av1/common/common.h"
-#include "av1/common/convolve.h"
-#include "av1/common/enums.h"
-#include "av1/common/filter.h"
-#include "av1/common/odintrin.h"
-#include "av1/common/quant_common.h"
-
-struct macroblockd;
-
-/* Encoder forward decls */
-struct macroblock;
-struct txfm_param;
-struct aom_variance_vtable;
-struct search_site_config;
-struct mv;
-union int_mv;
-struct yv12_buffer_config;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_clpf_block_c(uint8_t* dst,
-                      const uint16_t* src,
-                      int dstride,
-                      int sstride,
-                      int sizex,
-                      int sizey,
-                      unsigned int strength,
-                      unsigned int bd);
-#define aom_clpf_block aom_clpf_block_c
-
-void aom_clpf_block_hbd_c(uint16_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-#define aom_clpf_block_hbd aom_clpf_block_hbd_c
-
-void aom_clpf_hblock_c(uint8_t* dst,
-                       const uint16_t* src,
-                       int dstride,
-                       int sstride,
-                       int sizex,
-                       int sizey,
-                       unsigned int strength,
-                       unsigned int bd);
-#define aom_clpf_hblock aom_clpf_hblock_c
-
-void aom_clpf_hblock_hbd_c(uint16_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-#define aom_clpf_hblock_hbd aom_clpf_hblock_hbd_c
-
-void av1_convolve_2d_c(const uint8_t* src,
-                       int src_stride,
-                       CONV_BUF_TYPE* dst,
-                       int dst_stride,
-                       int w,
-                       int h,
-                       InterpFilterParams* filter_params_x,
-                       InterpFilterParams* filter_params_y,
-                       const int subpel_x_q4,
-                       const int subpel_y_q4,
-                       ConvolveParams* conv_params);
-#define av1_convolve_2d av1_convolve_2d_c
-
-void av1_convolve_2d_scale_c(const uint8_t* src,
-                             int src_stride,
-                             CONV_BUF_TYPE* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             InterpFilterParams* filter_params_x,
-                             InterpFilterParams* filter_params_y,
-                             const int subpel_x_qn,
-                             const int x_step_qn,
-                             const int subpel_y_q4,
-                             const int y_step_qn,
-                             ConvolveParams* conv_params);
-#define av1_convolve_2d_scale av1_convolve_2d_scale_c
-
-void av1_convolve_horiz_c(const uint8_t* src,
-                          int src_stride,
-                          uint8_t* dst,
-                          int dst_stride,
-                          int w,
-                          int h,
-                          const InterpFilterParams fp,
-                          const int subpel_x_q4,
-                          int x_step_q4,
-                          ConvolveParams* conv_params);
-#define av1_convolve_horiz av1_convolve_horiz_c
-
-void av1_convolve_rounding_c(const int32_t* src,
-                             int src_stride,
-                             uint8_t* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             int bits);
-#define av1_convolve_rounding av1_convolve_rounding_c
-
-void av1_convolve_vert_c(const uint8_t* src,
-                         int src_stride,
-                         uint8_t* dst,
-                         int dst_stride,
-                         int w,
-                         int h,
-                         const InterpFilterParams fp,
-                         const int subpel_x_q4,
-                         int x_step_q4,
-                         ConvolveParams* conv_params);
-#define av1_convolve_vert av1_convolve_vert_c
-
-void av1_iht16x16_256_add_c(const tran_low_t* input,
-                            uint8_t* output,
-                            int pitch,
-                            const struct txfm_param* param);
-#define av1_iht16x16_256_add av1_iht16x16_256_add_c
-
-void av1_iht16x32_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht16x32_512_add av1_iht16x32_512_add_c
-
-void av1_iht16x4_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht16x4_64_add av1_iht16x4_64_add_c
-
-void av1_iht16x8_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht16x8_128_add av1_iht16x8_128_add_c
-
-void av1_iht32x16_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht32x16_512_add av1_iht32x16_512_add_c
-
-void av1_iht32x32_1024_add_c(const tran_low_t* input,
-                             uint8_t* output,
-                             int pitch,
-                             const struct txfm_param* param);
-#define av1_iht32x32_1024_add av1_iht32x32_1024_add_c
-
-void av1_iht32x8_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht32x8_256_add av1_iht32x8_256_add_c
-
-void av1_iht4x16_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht4x16_64_add av1_iht4x16_64_add_c
-
-void av1_iht4x4_16_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-#define av1_iht4x4_16_add av1_iht4x4_16_add_c
-
-void av1_iht4x8_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-#define av1_iht4x8_32_add av1_iht4x8_32_add_c
-
-void av1_iht8x16_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht8x16_128_add av1_iht8x16_128_add_c
-
-void av1_iht8x32_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht8x32_256_add av1_iht8x32_256_add_c
-
-void av1_iht8x4_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-#define av1_iht8x4_32_add av1_iht8x4_32_add_c
-
-void av1_iht8x8_64_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-#define av1_iht8x8_64_add av1_iht8x8_64_add_c
-
-void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_16x16 av1_inv_txfm2d_add_16x16_c
-
-void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
-
-void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
-
-void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
-
-void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_32x32 av1_inv_txfm2d_add_32x32_c
-
-void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_4x4 av1_inv_txfm2d_add_4x4_c
-
-void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
-
-void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
-
-void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
-
-void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
-
-void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_8x8 av1_inv_txfm2d_add_8x8_c
-
-void av1_lowbd_convolve_init_c(void);
-#define av1_lowbd_convolve_init av1_lowbd_convolve_init_c
-
-void av1_warp_affine_c(const int32_t* mat,
-                       const uint8_t* ref,
-                       int width,
-                       int height,
-                       int stride,
-                       uint8_t* pred,
-                       int p_col,
-                       int p_row,
-                       int p_width,
-                       int p_height,
-                       int p_stride,
-                       int subsampling_x,
-                       int subsampling_y,
-                       ConvolveParams* conv_params,
-                       int16_t alpha,
-                       int16_t beta,
-                       int16_t gamma,
-                       int16_t delta);
-#define av1_warp_affine av1_warp_affine_c
-
-void cdef_direction_4x4_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-#define cdef_direction_4x4 cdef_direction_4x4_c
-
-void cdef_direction_8x8_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-#define cdef_direction_8x8 cdef_direction_8x8_c
-
-int cdef_find_dir_c(const uint16_t* img,
-                    int stride,
-                    int32_t* var,
-                    int coeff_shift);
-#define cdef_find_dir cdef_find_dir_c
-
-void copy_4x4_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-#define copy_4x4_16bit_to_16bit copy_4x4_16bit_to_16bit_c
-
-void copy_4x4_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-#define copy_4x4_16bit_to_8bit copy_4x4_16bit_to_8bit_c
-
-void copy_8x8_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-#define copy_8x8_16bit_to_16bit copy_8x8_16bit_to_16bit_c
-
-void copy_8x8_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-#define copy_8x8_16bit_to_8bit copy_8x8_16bit_to_8bit_c
-
-void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride,
-                                 int v,
-                                 int h);
-#define copy_rect8_16bit_to_16bit copy_rect8_16bit_to_16bit_c
-
-void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
-                                int dstride,
-                                const uint8_t* src,
-                                int sstride,
-                                int v,
-                                int h);
-#define copy_rect8_8bit_to_16bit copy_rect8_8bit_to_16bit_c
-
-void av1_rtcd(void);
-
-#include "aom_config.h"
-
-#ifdef RTCD_C
-static void setup_rtcd_internal(void) {}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.asm b/third_party/libaom/source/config/linux/generic/config/aom_config.asm
new file mode 100644
index 0000000..e79c8f78
--- /dev/null
+++ b/third_party/libaom/source/config/linux/generic/config/aom_config.asm
@@ -0,0 +1,73 @@
+;
+; Copyright (c) 2018, Alliance for Open Media. All rights reserved
+;
+; This source code is subject to the terms of the BSD 2 Clause License and
+; the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+; was not distributed with this source code in the LICENSE file, you can
+; obtain it at www.aomedia.org/license/software. If the Alliance for Open
+; Media Patent License 1.0 was not distributed with this source code in the
+; PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+;
+ARCH_ARM equ 0
+ARCH_MIPS equ 0
+ARCH_PPC equ 0
+ARCH_X86 equ 0
+ARCH_X86_64 equ 0
+CONFIG_ACCOUNTING equ 0
+CONFIG_ANALYZER equ 0
+CONFIG_AV1_DECODER equ 1
+CONFIG_AV1_ENCODER equ 0
+CONFIG_BIG_ENDIAN equ 0
+CONFIG_BITSTREAM_DEBUG equ 0
+CONFIG_COEFFICIENT_RANGE_CHECKING equ 0
+CONFIG_COLLECT_INTER_MODE_RD_STATS equ 1
+CONFIG_COLLECT_RD_STATS equ 0
+CONFIG_DEBUG equ 0
+CONFIG_DECODE_PERF_TESTS equ 0
+CONFIG_DIST_8X8 equ 1
+CONFIG_ENCODE_PERF_TESTS equ 0
+CONFIG_ENTROPY_STATS equ 0
+CONFIG_FILEOPTIONS equ 1
+CONFIG_FP_MB_STATS equ 0
+CONFIG_GCC equ 1
+CONFIG_GCOV equ 0
+CONFIG_GPROF equ 0
+CONFIG_INSPECTION equ 0
+CONFIG_INTERNAL_STATS equ 0
+CONFIG_INTER_STATS_ONLY equ 0
+CONFIG_LIBYUV equ 1
+CONFIG_LOWBITDEPTH equ 1
+CONFIG_MISMATCH_DEBUG equ 0
+CONFIG_MSVS equ 0
+CONFIG_MULTITHREAD equ 1
+CONFIG_OS_SUPPORT equ 1
+CONFIG_PIC equ 0
+CONFIG_RD_DEBUG equ 0
+CONFIG_RUNTIME_CPU_DETECT equ 1
+CONFIG_SHARED equ 0
+CONFIG_SIZE_LIMIT equ 1
+CONFIG_SPATIAL_RESAMPLING equ 1
+CONFIG_STATIC equ 1
+CONFIG_UNIT_TESTS equ 1
+CONFIG_WEBM_IO equ 1
+DECODE_HEIGHT_LIMIT equ 16384
+DECODE_WIDTH_LIMIT equ 16384
+HAVE_AVX equ 0
+HAVE_AVX2 equ 0
+HAVE_DSPR2 equ 0
+HAVE_FEXCEPT equ 1
+HAVE_MIPS32 equ 0
+HAVE_MIPS64 equ 0
+HAVE_MMX equ 0
+HAVE_MSA equ 0
+HAVE_NEON equ 0
+HAVE_PTHREAD_H equ 1
+HAVE_SSE equ 0
+HAVE_SSE2 equ 0
+HAVE_SSE3 equ 0
+HAVE_SSE4_1 equ 0
+HAVE_SSE4_2 equ 0
+HAVE_SSSE3 equ 0
+HAVE_UNISTD_H equ 1
+HAVE_VSX equ 0
+HAVE_WXWIDGETS equ 0
diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.c b/third_party/libaom/source/config/linux/generic/config/aom_config.c
new file mode 100644
index 0000000..3b81b3c
--- /dev/null
+++ b/third_party/libaom/source/config/linux/generic/config/aom_config.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2016, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#include "aom/aom_codec.h"
+static const char* const cfg = "-G \"Unix Makefiles\" -DAOM_TARGET_CPU=generic -DAOM_TARGET_CPU=generic -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=1 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=16384 -DDECODE_WIDTH_LIMIT=16384";
+const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.h b/third_party/libaom/source/config/linux/generic/config/aom_config.h
new file mode 100644
index 0000000..cfad7f7
--- /dev/null
+++ b/third_party/libaom/source/config/linux/generic/config/aom_config.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#ifndef AOM_CONFIG_H_
+#define AOM_CONFIG_H_
+#define ARCH_ARM 0
+#define ARCH_MIPS 0
+#define ARCH_PPC 0
+#define ARCH_X86 0
+#define ARCH_X86_64 0
+#define CONFIG_ACCOUNTING 0
+#define CONFIG_ANALYZER 0
+#define CONFIG_AV1_DECODER 1
+#define CONFIG_AV1_ENCODER 0
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+#define CONFIG_COLLECT_RD_STATS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_DIST_8X8 1
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_ENTROPY_STATS 0
+#define CONFIG_FILEOPTIONS 1
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_GCC 1
+#define CONFIG_GCOV 0
+#define CONFIG_GPROF 0
+#define CONFIG_INSPECTION 0
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_INTER_STATS_ONLY 0
+#define CONFIG_LIBYUV 1
+#define CONFIG_LOWBITDEPTH 1
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_MSVS 0
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_PIC 0
+#define CONFIG_RD_DEBUG 0
+#define CONFIG_RUNTIME_CPU_DETECT 1
+#define CONFIG_SHARED 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_STATIC 1
+#define CONFIG_UNIT_TESTS 1
+#define CONFIG_WEBM_IO 1
+#define DECODE_HEIGHT_LIMIT 16384
+#define DECODE_WIDTH_LIMIT 16384
+#define HAVE_AVX 0
+#define HAVE_AVX2 0
+#define HAVE_DSPR2 0
+#define HAVE_FEXCEPT 1
+#define HAVE_MIPS32 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 0
+#define HAVE_MSA 0
+#define HAVE_NEON 0
+#define HAVE_PTHREAD_H 1
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define HAVE_SSE3 0
+#define HAVE_SSE4_1 0
+#define HAVE_SSE4_2 0
+#define HAVE_SSSE3 0
+#define HAVE_UNISTD_H 1
+#define HAVE_VSX 0
+#define HAVE_WXWIDGETS 0
+#define INLINE inline
+#endif /* AOM_CONFIG_H_ */
diff --git a/third_party/libaom/source/config/linux/generic/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/generic/config/aom_dsp_rtcd.h
new file mode 100644
index 0000000..07ca82e
--- /dev/null
+++ b/third_party/libaom/source/config/linux/generic/config/aom_dsp_rtcd.h
@@ -0,0 +1,3126 @@
+// This file is generated. Do not edit.
+#ifndef AOM_DSP_RTCD_H_
+#define AOM_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/aom_dsp_common.h"
+#include "av1/common/blockd.h"
+#include "av1/common/enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void aom_blend_a64_hmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_hmask aom_blend_a64_hmask_c
+
+void aom_blend_a64_mask_c(uint8_t* dst,
+                          uint32_t dst_stride,
+                          const uint8_t* src0,
+                          uint32_t src0_stride,
+                          const uint8_t* src1,
+                          uint32_t src1_stride,
+                          const uint8_t* mask,
+                          uint32_t mask_stride,
+                          int w,
+                          int h,
+                          int subx,
+                          int suby);
+#define aom_blend_a64_mask aom_blend_a64_mask_c
+
+void aom_blend_a64_vmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+#define aom_blend_a64_vmask aom_blend_a64_vmask_c
+
+void aom_convolve8_horiz_c(const uint8_t* src,
+                           ptrdiff_t src_stride,
+                           uint8_t* dst,
+                           ptrdiff_t dst_stride,
+                           const int16_t* filter_x,
+                           int x_step_q4,
+                           const int16_t* filter_y,
+                           int y_step_q4,
+                           int w,
+                           int h);
+#define aom_convolve8_horiz aom_convolve8_horiz_c
+
+void aom_convolve8_vert_c(const uint8_t* src,
+                          ptrdiff_t src_stride,
+                          uint8_t* dst,
+                          ptrdiff_t dst_stride,
+                          const int16_t* filter_x,
+                          int x_step_q4,
+                          const int16_t* filter_y,
+                          int y_step_q4,
+                          int w,
+                          int h);
+#define aom_convolve8_vert aom_convolve8_vert_c
+
+void aom_convolve_copy_c(const uint8_t* src,
+                         ptrdiff_t src_stride,
+                         uint8_t* dst,
+                         ptrdiff_t dst_stride,
+                         const int16_t* filter_x,
+                         int x_step_q4,
+                         const int16_t* filter_y,
+                         int y_step_q4,
+                         int w,
+                         int h);
+#define aom_convolve_copy aom_convolve_copy_c
+
+void aom_dc_128_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x16 aom_dc_128_predictor_16x16_c
+
+void aom_dc_128_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
+
+void aom_dc_128_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x4 aom_dc_128_predictor_16x4_c
+
+void aom_dc_128_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_16x64 aom_dc_128_predictor_16x64_c
+
+void aom_dc_128_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
+
+void aom_dc_128_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
+
+void aom_dc_128_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
+
+void aom_dc_128_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x32 aom_dc_128_predictor_32x32_c
+
+void aom_dc_128_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_32x64 aom_dc_128_predictor_32x64_c
+
+void aom_dc_128_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_32x8 aom_dc_128_predictor_32x8_c
+
+void aom_dc_128_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_4x16 aom_dc_128_predictor_4x16_c
+
+void aom_dc_128_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_4x4 aom_dc_128_predictor_4x4_c
+
+void aom_dc_128_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
+
+void aom_dc_128_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x16 aom_dc_128_predictor_64x16_c
+
+void aom_dc_128_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x32 aom_dc_128_predictor_64x32_c
+
+void aom_dc_128_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_128_predictor_64x64 aom_dc_128_predictor_64x64_c
+
+void aom_dc_128_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
+
+void aom_dc_128_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_128_predictor_8x32 aom_dc_128_predictor_8x32_c
+
+void aom_dc_128_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
+
+void aom_dc_128_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_8x8 aom_dc_128_predictor_8x8_c
+
+void aom_dc_left_predictor_16x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x16 aom_dc_left_predictor_16x16_c
+
+void aom_dc_left_predictor_16x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
+
+void aom_dc_left_predictor_16x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x4 aom_dc_left_predictor_16x4_c
+
+void aom_dc_left_predictor_16x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_16x64 aom_dc_left_predictor_16x64_c
+
+void aom_dc_left_predictor_16x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
+
+void aom_dc_left_predictor_2x2_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
+
+void aom_dc_left_predictor_32x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
+
+void aom_dc_left_predictor_32x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x32 aom_dc_left_predictor_32x32_c
+
+void aom_dc_left_predictor_32x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_32x64 aom_dc_left_predictor_32x64_c
+
+void aom_dc_left_predictor_32x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_32x8 aom_dc_left_predictor_32x8_c
+
+void aom_dc_left_predictor_4x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_4x16 aom_dc_left_predictor_4x16_c
+
+void aom_dc_left_predictor_4x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_4x4 aom_dc_left_predictor_4x4_c
+
+void aom_dc_left_predictor_4x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
+
+void aom_dc_left_predictor_64x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x16 aom_dc_left_predictor_64x16_c
+
+void aom_dc_left_predictor_64x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x32 aom_dc_left_predictor_64x32_c
+
+void aom_dc_left_predictor_64x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_left_predictor_64x64 aom_dc_left_predictor_64x64_c
+
+void aom_dc_left_predictor_8x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
+
+void aom_dc_left_predictor_8x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_left_predictor_8x32 aom_dc_left_predictor_8x32_c
+
+void aom_dc_left_predictor_8x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
+
+void aom_dc_left_predictor_8x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_8x8 aom_dc_left_predictor_8x8_c
+
+void aom_dc_predictor_16x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x16 aom_dc_predictor_16x16_c
+
+void aom_dc_predictor_16x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
+
+void aom_dc_predictor_16x4_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x4 aom_dc_predictor_16x4_c
+
+void aom_dc_predictor_16x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_16x64 aom_dc_predictor_16x64_c
+
+void aom_dc_predictor_16x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
+
+void aom_dc_predictor_2x2_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
+
+void aom_dc_predictor_32x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
+
+void aom_dc_predictor_32x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x32 aom_dc_predictor_32x32_c
+
+void aom_dc_predictor_32x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_32x64 aom_dc_predictor_32x64_c
+
+void aom_dc_predictor_32x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_32x8 aom_dc_predictor_32x8_c
+
+void aom_dc_predictor_4x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_4x16 aom_dc_predictor_4x16_c
+
+void aom_dc_predictor_4x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_4x4 aom_dc_predictor_4x4_c
+
+void aom_dc_predictor_4x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
+
+void aom_dc_predictor_64x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x16 aom_dc_predictor_64x16_c
+
+void aom_dc_predictor_64x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x32 aom_dc_predictor_64x32_c
+
+void aom_dc_predictor_64x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_dc_predictor_64x64 aom_dc_predictor_64x64_c
+
+void aom_dc_predictor_8x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
+
+void aom_dc_predictor_8x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_dc_predictor_8x32 aom_dc_predictor_8x32_c
+
+void aom_dc_predictor_8x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
+
+void aom_dc_predictor_8x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_8x8 aom_dc_predictor_8x8_c
+
+void aom_dc_top_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x16 aom_dc_top_predictor_16x16_c
+
+void aom_dc_top_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
+
+void aom_dc_top_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x4 aom_dc_top_predictor_16x4_c
+
+void aom_dc_top_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_16x64 aom_dc_top_predictor_16x64_c
+
+void aom_dc_top_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
+
+void aom_dc_top_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
+
+void aom_dc_top_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
+
+void aom_dc_top_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x32 aom_dc_top_predictor_32x32_c
+
+void aom_dc_top_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_32x64 aom_dc_top_predictor_32x64_c
+
+void aom_dc_top_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_32x8 aom_dc_top_predictor_32x8_c
+
+void aom_dc_top_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_4x16 aom_dc_top_predictor_4x16_c
+
+void aom_dc_top_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_4x4 aom_dc_top_predictor_4x4_c
+
+void aom_dc_top_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
+
+void aom_dc_top_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x16 aom_dc_top_predictor_64x16_c
+
+void aom_dc_top_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x32 aom_dc_top_predictor_64x32_c
+
+void aom_dc_top_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_dc_top_predictor_64x64 aom_dc_top_predictor_64x64_c
+
+void aom_dc_top_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
+
+void aom_dc_top_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_top_predictor_8x32 aom_dc_top_predictor_8x32_c
+
+void aom_dc_top_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
+
+void aom_dc_top_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_8x8 aom_dc_top_predictor_8x8_c
+
+void aom_h_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x16 aom_h_predictor_16x16_c
+
+void aom_h_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
+
+void aom_h_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x4 aom_h_predictor_16x4_c
+
+void aom_h_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_16x64 aom_h_predictor_16x64_c
+
+void aom_h_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
+
+void aom_h_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
+
+void aom_h_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
+
+void aom_h_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x32 aom_h_predictor_32x32_c
+
+void aom_h_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_32x64 aom_h_predictor_32x64_c
+
+void aom_h_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_32x8 aom_h_predictor_32x8_c
+
+void aom_h_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_4x16 aom_h_predictor_4x16_c
+
+void aom_h_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_4x4 aom_h_predictor_4x4_c
+
+void aom_h_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
+
+void aom_h_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x16 aom_h_predictor_64x16_c
+
+void aom_h_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x32 aom_h_predictor_64x32_c
+
+void aom_h_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_h_predictor_64x64 aom_h_predictor_64x64_c
+
+void aom_h_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
+
+void aom_h_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_h_predictor_8x32 aom_h_predictor_8x32_c
+
+void aom_h_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
+
+void aom_h_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_8x8 aom_h_predictor_8x8_c
+
+void aom_highbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                     uint32_t dst_stride,
+                                     const CONV_BUF_TYPE* src0,
+                                     uint32_t src0_stride,
+                                     const CONV_BUF_TYPE* src1,
+                                     uint32_t src1_stride,
+                                     const uint8_t* mask,
+                                     uint32_t mask_stride,
+                                     int w,
+                                     int h,
+                                     int subx,
+                                     int suby,
+                                     ConvolveParams* conv_params,
+                                     const int bd);
+#define aom_highbd_blend_a64_d16_mask aom_highbd_blend_a64_d16_mask_c
+
+void aom_highbd_blend_a64_hmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_hmask aom_highbd_blend_a64_hmask_c
+
+void aom_highbd_blend_a64_mask_c(uint8_t* dst,
+                                 uint32_t dst_stride,
+                                 const uint8_t* src0,
+                                 uint32_t src0_stride,
+                                 const uint8_t* src1,
+                                 uint32_t src1_stride,
+                                 const uint8_t* mask,
+                                 uint32_t mask_stride,
+                                 int w,
+                                 int h,
+                                 int subx,
+                                 int suby,
+                                 int bd);
+#define aom_highbd_blend_a64_mask aom_highbd_blend_a64_mask_c
+
+void aom_highbd_blend_a64_vmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+#define aom_highbd_blend_a64_vmask aom_highbd_blend_a64_vmask_c
+
+void aom_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define aom_highbd_convolve8_horiz aom_highbd_convolve8_horiz_c
+
+void aom_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define aom_highbd_convolve8_vert aom_highbd_convolve8_vert_c
+
+void aom_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define aom_highbd_convolve_copy aom_highbd_convolve_copy_c
+
+void aom_highbd_dc_128_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x16 aom_highbd_dc_128_predictor_16x16_c
+
+void aom_highbd_dc_128_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x32 aom_highbd_dc_128_predictor_16x32_c
+
+void aom_highbd_dc_128_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x4 aom_highbd_dc_128_predictor_16x4_c
+
+void aom_highbd_dc_128_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x64 aom_highbd_dc_128_predictor_16x64_c
+
+void aom_highbd_dc_128_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x8 aom_highbd_dc_128_predictor_16x8_c
+
+void aom_highbd_dc_128_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_2x2 aom_highbd_dc_128_predictor_2x2_c
+
+void aom_highbd_dc_128_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x16 aom_highbd_dc_128_predictor_32x16_c
+
+void aom_highbd_dc_128_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x32 aom_highbd_dc_128_predictor_32x32_c
+
+void aom_highbd_dc_128_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x64 aom_highbd_dc_128_predictor_32x64_c
+
+void aom_highbd_dc_128_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_32x8 aom_highbd_dc_128_predictor_32x8_c
+
+void aom_highbd_dc_128_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_4x16 aom_highbd_dc_128_predictor_4x16_c
+
+void aom_highbd_dc_128_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x4 aom_highbd_dc_128_predictor_4x4_c
+
+void aom_highbd_dc_128_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_4x8 aom_highbd_dc_128_predictor_4x8_c
+
+void aom_highbd_dc_128_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x16 aom_highbd_dc_128_predictor_64x16_c
+
+void aom_highbd_dc_128_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x32 aom_highbd_dc_128_predictor_64x32_c
+
+void aom_highbd_dc_128_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x64 aom_highbd_dc_128_predictor_64x64_c
+
+void aom_highbd_dc_128_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x16 aom_highbd_dc_128_predictor_8x16_c
+
+void aom_highbd_dc_128_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x32 aom_highbd_dc_128_predictor_8x32_c
+
+void aom_highbd_dc_128_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x4 aom_highbd_dc_128_predictor_8x4_c
+
+void aom_highbd_dc_128_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_8x8 aom_highbd_dc_128_predictor_8x8_c
+
+void aom_highbd_dc_left_predictor_16x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x16 aom_highbd_dc_left_predictor_16x16_c
+
+void aom_highbd_dc_left_predictor_16x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x32 aom_highbd_dc_left_predictor_16x32_c
+
+void aom_highbd_dc_left_predictor_16x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x4 aom_highbd_dc_left_predictor_16x4_c
+
+void aom_highbd_dc_left_predictor_16x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x64 aom_highbd_dc_left_predictor_16x64_c
+
+void aom_highbd_dc_left_predictor_16x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x8 aom_highbd_dc_left_predictor_16x8_c
+
+void aom_highbd_dc_left_predictor_2x2_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_2x2 aom_highbd_dc_left_predictor_2x2_c
+
+void aom_highbd_dc_left_predictor_32x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x16 aom_highbd_dc_left_predictor_32x16_c
+
+void aom_highbd_dc_left_predictor_32x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x32 aom_highbd_dc_left_predictor_32x32_c
+
+void aom_highbd_dc_left_predictor_32x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x64 aom_highbd_dc_left_predictor_32x64_c
+
+void aom_highbd_dc_left_predictor_32x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_32x8 aom_highbd_dc_left_predictor_32x8_c
+
+void aom_highbd_dc_left_predictor_4x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_4x16 aom_highbd_dc_left_predictor_4x16_c
+
+void aom_highbd_dc_left_predictor_4x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x4 aom_highbd_dc_left_predictor_4x4_c
+
+void aom_highbd_dc_left_predictor_4x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_4x8 aom_highbd_dc_left_predictor_4x8_c
+
+void aom_highbd_dc_left_predictor_64x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x16 aom_highbd_dc_left_predictor_64x16_c
+
+void aom_highbd_dc_left_predictor_64x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x32 aom_highbd_dc_left_predictor_64x32_c
+
+void aom_highbd_dc_left_predictor_64x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x64 aom_highbd_dc_left_predictor_64x64_c
+
+void aom_highbd_dc_left_predictor_8x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x16 aom_highbd_dc_left_predictor_8x16_c
+
+void aom_highbd_dc_left_predictor_8x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x32 aom_highbd_dc_left_predictor_8x32_c
+
+void aom_highbd_dc_left_predictor_8x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x4 aom_highbd_dc_left_predictor_8x4_c
+
+void aom_highbd_dc_left_predictor_8x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_8x8 aom_highbd_dc_left_predictor_8x8_c
+
+void aom_highbd_dc_predictor_16x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x16 aom_highbd_dc_predictor_16x16_c
+
+void aom_highbd_dc_predictor_16x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x32 aom_highbd_dc_predictor_16x32_c
+
+void aom_highbd_dc_predictor_16x4_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x4 aom_highbd_dc_predictor_16x4_c
+
+void aom_highbd_dc_predictor_16x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x64 aom_highbd_dc_predictor_16x64_c
+
+void aom_highbd_dc_predictor_16x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x8 aom_highbd_dc_predictor_16x8_c
+
+void aom_highbd_dc_predictor_2x2_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_2x2 aom_highbd_dc_predictor_2x2_c
+
+void aom_highbd_dc_predictor_32x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x16 aom_highbd_dc_predictor_32x16_c
+
+void aom_highbd_dc_predictor_32x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x32 aom_highbd_dc_predictor_32x32_c
+
+void aom_highbd_dc_predictor_32x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x64 aom_highbd_dc_predictor_32x64_c
+
+void aom_highbd_dc_predictor_32x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_32x8 aom_highbd_dc_predictor_32x8_c
+
+void aom_highbd_dc_predictor_4x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_4x16 aom_highbd_dc_predictor_4x16_c
+
+void aom_highbd_dc_predictor_4x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x4 aom_highbd_dc_predictor_4x4_c
+
+void aom_highbd_dc_predictor_4x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_4x8 aom_highbd_dc_predictor_4x8_c
+
+void aom_highbd_dc_predictor_64x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x16 aom_highbd_dc_predictor_64x16_c
+
+void aom_highbd_dc_predictor_64x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x32 aom_highbd_dc_predictor_64x32_c
+
+void aom_highbd_dc_predictor_64x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x64 aom_highbd_dc_predictor_64x64_c
+
+void aom_highbd_dc_predictor_8x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x16 aom_highbd_dc_predictor_8x16_c
+
+void aom_highbd_dc_predictor_8x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x32 aom_highbd_dc_predictor_8x32_c
+
+void aom_highbd_dc_predictor_8x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x4 aom_highbd_dc_predictor_8x4_c
+
+void aom_highbd_dc_predictor_8x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_8x8 aom_highbd_dc_predictor_8x8_c
+
+void aom_highbd_dc_top_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x16 aom_highbd_dc_top_predictor_16x16_c
+
+void aom_highbd_dc_top_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x32 aom_highbd_dc_top_predictor_16x32_c
+
+void aom_highbd_dc_top_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x4 aom_highbd_dc_top_predictor_16x4_c
+
+void aom_highbd_dc_top_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x64 aom_highbd_dc_top_predictor_16x64_c
+
+void aom_highbd_dc_top_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x8 aom_highbd_dc_top_predictor_16x8_c
+
+void aom_highbd_dc_top_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_2x2 aom_highbd_dc_top_predictor_2x2_c
+
+void aom_highbd_dc_top_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x16 aom_highbd_dc_top_predictor_32x16_c
+
+void aom_highbd_dc_top_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x32 aom_highbd_dc_top_predictor_32x32_c
+
+void aom_highbd_dc_top_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x64 aom_highbd_dc_top_predictor_32x64_c
+
+void aom_highbd_dc_top_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_32x8 aom_highbd_dc_top_predictor_32x8_c
+
+void aom_highbd_dc_top_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_4x16 aom_highbd_dc_top_predictor_4x16_c
+
+void aom_highbd_dc_top_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x4 aom_highbd_dc_top_predictor_4x4_c
+
+void aom_highbd_dc_top_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_4x8 aom_highbd_dc_top_predictor_4x8_c
+
+void aom_highbd_dc_top_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x16 aom_highbd_dc_top_predictor_64x16_c
+
+void aom_highbd_dc_top_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x32 aom_highbd_dc_top_predictor_64x32_c
+
+void aom_highbd_dc_top_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x64 aom_highbd_dc_top_predictor_64x64_c
+
+void aom_highbd_dc_top_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x16 aom_highbd_dc_top_predictor_8x16_c
+
+void aom_highbd_dc_top_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x32 aom_highbd_dc_top_predictor_8x32_c
+
+void aom_highbd_dc_top_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x4 aom_highbd_dc_top_predictor_8x4_c
+
+void aom_highbd_dc_top_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_8x8 aom_highbd_dc_top_predictor_8x8_c
+
+void aom_highbd_h_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x16 aom_highbd_h_predictor_16x16_c
+
+void aom_highbd_h_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x32 aom_highbd_h_predictor_16x32_c
+
+void aom_highbd_h_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x4 aom_highbd_h_predictor_16x4_c
+
+void aom_highbd_h_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x64 aom_highbd_h_predictor_16x64_c
+
+void aom_highbd_h_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x8 aom_highbd_h_predictor_16x8_c
+
+void aom_highbd_h_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_2x2 aom_highbd_h_predictor_2x2_c
+
+void aom_highbd_h_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x16 aom_highbd_h_predictor_32x16_c
+
+void aom_highbd_h_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x32 aom_highbd_h_predictor_32x32_c
+
+void aom_highbd_h_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x64 aom_highbd_h_predictor_32x64_c
+
+void aom_highbd_h_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_32x8 aom_highbd_h_predictor_32x8_c
+
+void aom_highbd_h_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_4x16 aom_highbd_h_predictor_4x16_c
+
+void aom_highbd_h_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x4 aom_highbd_h_predictor_4x4_c
+
+void aom_highbd_h_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_4x8 aom_highbd_h_predictor_4x8_c
+
+void aom_highbd_h_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x16 aom_highbd_h_predictor_64x16_c
+
+void aom_highbd_h_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x32 aom_highbd_h_predictor_64x32_c
+
+void aom_highbd_h_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x64 aom_highbd_h_predictor_64x64_c
+
+void aom_highbd_h_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x16 aom_highbd_h_predictor_8x16_c
+
+void aom_highbd_h_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x32 aom_highbd_h_predictor_8x32_c
+
+void aom_highbd_h_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x4 aom_highbd_h_predictor_8x4_c
+
+void aom_highbd_h_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_8x8 aom_highbd_h_predictor_8x8_c
+
+void aom_highbd_lpf_horizontal_14_c(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_horizontal_14 aom_highbd_lpf_horizontal_14_c
+
+void aom_highbd_lpf_horizontal_14_dual_c(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limt1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+#define aom_highbd_lpf_horizontal_14_dual aom_highbd_lpf_horizontal_14_dual_c
+
+void aom_highbd_lpf_horizontal_4_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_4 aom_highbd_lpf_horizontal_4_c
+
+void aom_highbd_lpf_horizontal_4_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_4_dual aom_highbd_lpf_horizontal_4_dual_c
+
+void aom_highbd_lpf_horizontal_6_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_6 aom_highbd_lpf_horizontal_6_c
+
+void aom_highbd_lpf_horizontal_6_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_6_dual aom_highbd_lpf_horizontal_6_dual_c
+
+void aom_highbd_lpf_horizontal_8_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+#define aom_highbd_lpf_horizontal_8 aom_highbd_lpf_horizontal_8_c
+
+void aom_highbd_lpf_horizontal_8_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+#define aom_highbd_lpf_horizontal_8_dual aom_highbd_lpf_horizontal_8_dual_c
+
+void aom_highbd_lpf_vertical_14_c(uint16_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit,
+                                  const uint8_t* limit,
+                                  const uint8_t* thresh,
+                                  int bd);
+#define aom_highbd_lpf_vertical_14 aom_highbd_lpf_vertical_14_c
+
+void aom_highbd_lpf_vertical_14_dual_c(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit0,
+                                       const uint8_t* limit0,
+                                       const uint8_t* thresh0,
+                                       const uint8_t* blimit1,
+                                       const uint8_t* limit1,
+                                       const uint8_t* thresh1,
+                                       int bd);
+#define aom_highbd_lpf_vertical_14_dual aom_highbd_lpf_vertical_14_dual_c
+
+void aom_highbd_lpf_vertical_4_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_4 aom_highbd_lpf_vertical_4_c
+
+void aom_highbd_lpf_vertical_4_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_4_dual aom_highbd_lpf_vertical_4_dual_c
+
+void aom_highbd_lpf_vertical_6_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_6 aom_highbd_lpf_vertical_6_c
+
+void aom_highbd_lpf_vertical_6_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_6_dual aom_highbd_lpf_vertical_6_dual_c
+
+void aom_highbd_lpf_vertical_8_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+#define aom_highbd_lpf_vertical_8 aom_highbd_lpf_vertical_8_c
+
+void aom_highbd_lpf_vertical_8_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+#define aom_highbd_lpf_vertical_8_dual aom_highbd_lpf_vertical_8_dual_c
+
+void aom_highbd_paeth_predictor_16x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x16 aom_highbd_paeth_predictor_16x16_c
+
+void aom_highbd_paeth_predictor_16x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x32 aom_highbd_paeth_predictor_16x32_c
+
+void aom_highbd_paeth_predictor_16x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x4 aom_highbd_paeth_predictor_16x4_c
+
+void aom_highbd_paeth_predictor_16x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x64 aom_highbd_paeth_predictor_16x64_c
+
+void aom_highbd_paeth_predictor_16x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x8 aom_highbd_paeth_predictor_16x8_c
+
+void aom_highbd_paeth_predictor_2x2_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_2x2 aom_highbd_paeth_predictor_2x2_c
+
+void aom_highbd_paeth_predictor_32x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x16 aom_highbd_paeth_predictor_32x16_c
+
+void aom_highbd_paeth_predictor_32x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x32 aom_highbd_paeth_predictor_32x32_c
+
+void aom_highbd_paeth_predictor_32x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x64 aom_highbd_paeth_predictor_32x64_c
+
+void aom_highbd_paeth_predictor_32x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_32x8 aom_highbd_paeth_predictor_32x8_c
+
+void aom_highbd_paeth_predictor_4x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_4x16 aom_highbd_paeth_predictor_4x16_c
+
+void aom_highbd_paeth_predictor_4x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x4 aom_highbd_paeth_predictor_4x4_c
+
+void aom_highbd_paeth_predictor_4x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x8 aom_highbd_paeth_predictor_4x8_c
+
+void aom_highbd_paeth_predictor_64x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x16 aom_highbd_paeth_predictor_64x16_c
+
+void aom_highbd_paeth_predictor_64x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x32 aom_highbd_paeth_predictor_64x32_c
+
+void aom_highbd_paeth_predictor_64x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x64 aom_highbd_paeth_predictor_64x64_c
+
+void aom_highbd_paeth_predictor_8x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x16 aom_highbd_paeth_predictor_8x16_c
+
+void aom_highbd_paeth_predictor_8x32_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x32 aom_highbd_paeth_predictor_8x32_c
+
+void aom_highbd_paeth_predictor_8x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x4 aom_highbd_paeth_predictor_8x4_c
+
+void aom_highbd_paeth_predictor_8x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x8 aom_highbd_paeth_predictor_8x8_c
+
+void aom_highbd_smooth_h_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x16 \
+  aom_highbd_smooth_h_predictor_16x16_c
+
+void aom_highbd_smooth_h_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x32 \
+  aom_highbd_smooth_h_predictor_16x32_c
+
+void aom_highbd_smooth_h_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x4 aom_highbd_smooth_h_predictor_16x4_c
+
+void aom_highbd_smooth_h_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x64 \
+  aom_highbd_smooth_h_predictor_16x64_c
+
+void aom_highbd_smooth_h_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x8 aom_highbd_smooth_h_predictor_16x8_c
+
+void aom_highbd_smooth_h_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_2x2 aom_highbd_smooth_h_predictor_2x2_c
+
+void aom_highbd_smooth_h_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x16 \
+  aom_highbd_smooth_h_predictor_32x16_c
+
+void aom_highbd_smooth_h_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x32 \
+  aom_highbd_smooth_h_predictor_32x32_c
+
+void aom_highbd_smooth_h_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x64 \
+  aom_highbd_smooth_h_predictor_32x64_c
+
+void aom_highbd_smooth_h_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_32x8 aom_highbd_smooth_h_predictor_32x8_c
+
+void aom_highbd_smooth_h_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_4x16 aom_highbd_smooth_h_predictor_4x16_c
+
+void aom_highbd_smooth_h_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x4 aom_highbd_smooth_h_predictor_4x4_c
+
+void aom_highbd_smooth_h_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x8 aom_highbd_smooth_h_predictor_4x8_c
+
+void aom_highbd_smooth_h_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x16 \
+  aom_highbd_smooth_h_predictor_64x16_c
+
+void aom_highbd_smooth_h_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x32 \
+  aom_highbd_smooth_h_predictor_64x32_c
+
+void aom_highbd_smooth_h_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x64 \
+  aom_highbd_smooth_h_predictor_64x64_c
+
+void aom_highbd_smooth_h_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x16 aom_highbd_smooth_h_predictor_8x16_c
+
+void aom_highbd_smooth_h_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x32 aom_highbd_smooth_h_predictor_8x32_c
+
+void aom_highbd_smooth_h_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x4 aom_highbd_smooth_h_predictor_8x4_c
+
+void aom_highbd_smooth_h_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x8 aom_highbd_smooth_h_predictor_8x8_c
+
+void aom_highbd_smooth_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x16 aom_highbd_smooth_predictor_16x16_c
+
+void aom_highbd_smooth_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x32 aom_highbd_smooth_predictor_16x32_c
+
+void aom_highbd_smooth_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x4 aom_highbd_smooth_predictor_16x4_c
+
+void aom_highbd_smooth_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x64 aom_highbd_smooth_predictor_16x64_c
+
+void aom_highbd_smooth_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x8 aom_highbd_smooth_predictor_16x8_c
+
+void aom_highbd_smooth_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_2x2 aom_highbd_smooth_predictor_2x2_c
+
+void aom_highbd_smooth_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x16 aom_highbd_smooth_predictor_32x16_c
+
+void aom_highbd_smooth_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x32 aom_highbd_smooth_predictor_32x32_c
+
+void aom_highbd_smooth_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x64 aom_highbd_smooth_predictor_32x64_c
+
+void aom_highbd_smooth_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_32x8 aom_highbd_smooth_predictor_32x8_c
+
+void aom_highbd_smooth_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_4x16 aom_highbd_smooth_predictor_4x16_c
+
+void aom_highbd_smooth_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x4 aom_highbd_smooth_predictor_4x4_c
+
+void aom_highbd_smooth_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x8 aom_highbd_smooth_predictor_4x8_c
+
+void aom_highbd_smooth_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x16 aom_highbd_smooth_predictor_64x16_c
+
+void aom_highbd_smooth_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x32 aom_highbd_smooth_predictor_64x32_c
+
+void aom_highbd_smooth_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x64 aom_highbd_smooth_predictor_64x64_c
+
+void aom_highbd_smooth_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x16 aom_highbd_smooth_predictor_8x16_c
+
+void aom_highbd_smooth_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x32 aom_highbd_smooth_predictor_8x32_c
+
+void aom_highbd_smooth_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x4 aom_highbd_smooth_predictor_8x4_c
+
+void aom_highbd_smooth_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x8 aom_highbd_smooth_predictor_8x8_c
+
+void aom_highbd_smooth_v_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x16 \
+  aom_highbd_smooth_v_predictor_16x16_c
+
+void aom_highbd_smooth_v_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x32 \
+  aom_highbd_smooth_v_predictor_16x32_c
+
+void aom_highbd_smooth_v_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x4 aom_highbd_smooth_v_predictor_16x4_c
+
+void aom_highbd_smooth_v_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x64 \
+  aom_highbd_smooth_v_predictor_16x64_c
+
+void aom_highbd_smooth_v_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x8 aom_highbd_smooth_v_predictor_16x8_c
+
+void aom_highbd_smooth_v_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_2x2 aom_highbd_smooth_v_predictor_2x2_c
+
+void aom_highbd_smooth_v_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x16 \
+  aom_highbd_smooth_v_predictor_32x16_c
+
+void aom_highbd_smooth_v_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x32 \
+  aom_highbd_smooth_v_predictor_32x32_c
+
+void aom_highbd_smooth_v_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x64 \
+  aom_highbd_smooth_v_predictor_32x64_c
+
+void aom_highbd_smooth_v_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_32x8 aom_highbd_smooth_v_predictor_32x8_c
+
+void aom_highbd_smooth_v_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_4x16 aom_highbd_smooth_v_predictor_4x16_c
+
+void aom_highbd_smooth_v_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x4 aom_highbd_smooth_v_predictor_4x4_c
+
+void aom_highbd_smooth_v_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x8 aom_highbd_smooth_v_predictor_4x8_c
+
+void aom_highbd_smooth_v_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x16 \
+  aom_highbd_smooth_v_predictor_64x16_c
+
+void aom_highbd_smooth_v_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x32 \
+  aom_highbd_smooth_v_predictor_64x32_c
+
+void aom_highbd_smooth_v_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x64 \
+  aom_highbd_smooth_v_predictor_64x64_c
+
+void aom_highbd_smooth_v_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x16 aom_highbd_smooth_v_predictor_8x16_c
+
+void aom_highbd_smooth_v_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x32 aom_highbd_smooth_v_predictor_8x32_c
+
+void aom_highbd_smooth_v_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x4 aom_highbd_smooth_v_predictor_8x4_c
+
+void aom_highbd_smooth_v_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x8 aom_highbd_smooth_v_predictor_8x8_c
+
+void aom_highbd_v_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x16 aom_highbd_v_predictor_16x16_c
+
+void aom_highbd_v_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x32 aom_highbd_v_predictor_16x32_c
+
+void aom_highbd_v_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x4 aom_highbd_v_predictor_16x4_c
+
+void aom_highbd_v_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x64 aom_highbd_v_predictor_16x64_c
+
+void aom_highbd_v_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x8 aom_highbd_v_predictor_16x8_c
+
+void aom_highbd_v_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_2x2 aom_highbd_v_predictor_2x2_c
+
+void aom_highbd_v_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x16 aom_highbd_v_predictor_32x16_c
+
+void aom_highbd_v_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x32 aom_highbd_v_predictor_32x32_c
+
+void aom_highbd_v_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x64 aom_highbd_v_predictor_32x64_c
+
+void aom_highbd_v_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_32x8 aom_highbd_v_predictor_32x8_c
+
+void aom_highbd_v_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_4x16 aom_highbd_v_predictor_4x16_c
+
+void aom_highbd_v_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x4 aom_highbd_v_predictor_4x4_c
+
+void aom_highbd_v_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_4x8 aom_highbd_v_predictor_4x8_c
+
+void aom_highbd_v_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x16 aom_highbd_v_predictor_64x16_c
+
+void aom_highbd_v_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x32 aom_highbd_v_predictor_64x32_c
+
+void aom_highbd_v_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x64 aom_highbd_v_predictor_64x64_c
+
+void aom_highbd_v_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x16 aom_highbd_v_predictor_8x16_c
+
+void aom_highbd_v_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x32 aom_highbd_v_predictor_8x32_c
+
+void aom_highbd_v_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x4 aom_highbd_v_predictor_8x4_c
+
+void aom_highbd_v_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_8x8 aom_highbd_v_predictor_8x8_c
+
+void aom_lowbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                    uint32_t dst_stride,
+                                    const CONV_BUF_TYPE* src0,
+                                    uint32_t src0_stride,
+                                    const CONV_BUF_TYPE* src1,
+                                    uint32_t src1_stride,
+                                    const uint8_t* mask,
+                                    uint32_t mask_stride,
+                                    int w,
+                                    int h,
+                                    int subx,
+                                    int suby,
+                                    ConvolveParams* conv_params);
+#define aom_lowbd_blend_a64_d16_mask aom_lowbd_blend_a64_d16_mask_c
+
+void aom_lpf_horizontal_14_c(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_horizontal_14 aom_lpf_horizontal_14_c
+
+void aom_lpf_horizontal_14_dual_c(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_horizontal_14_dual aom_lpf_horizontal_14_dual_c
+
+void aom_lpf_horizontal_4_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_c
+
+void aom_lpf_horizontal_4_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
+
+void aom_lpf_horizontal_6_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+#define aom_lpf_horizontal_6 aom_lpf_horizontal_6_c
+
+void aom_lpf_horizontal_6_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_6_dual aom_lpf_horizontal_6_dual_c
+
+void aom_lpf_horizontal_8_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+#define aom_lpf_horizontal_8 aom_lpf_horizontal_8_c
+
+void aom_lpf_horizontal_8_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
+
+void aom_lpf_vertical_14_c(uint8_t* s,
+                           int pitch,
+                           const uint8_t* blimit,
+                           const uint8_t* limit,
+                           const uint8_t* thresh);
+#define aom_lpf_vertical_14 aom_lpf_vertical_14_c
+
+void aom_lpf_vertical_14_dual_c(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit0,
+                                const uint8_t* limit0,
+                                const uint8_t* thresh0,
+                                const uint8_t* blimit1,
+                                const uint8_t* limit1,
+                                const uint8_t* thresh1);
+#define aom_lpf_vertical_14_dual aom_lpf_vertical_14_dual_c
+
+void aom_lpf_vertical_4_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_4 aom_lpf_vertical_4_c
+
+void aom_lpf_vertical_4_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
+
+void aom_lpf_vertical_6_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_6 aom_lpf_vertical_6_c
+
+void aom_lpf_vertical_6_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_6_dual aom_lpf_vertical_6_dual_c
+
+void aom_lpf_vertical_8_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+#define aom_lpf_vertical_8 aom_lpf_vertical_8_c
+
+void aom_lpf_vertical_8_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
+
+void aom_paeth_predictor_16x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
+
+void aom_paeth_predictor_16x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
+
+void aom_paeth_predictor_16x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x4 aom_paeth_predictor_16x4_c
+
+void aom_paeth_predictor_16x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_16x64 aom_paeth_predictor_16x64_c
+
+void aom_paeth_predictor_16x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
+
+void aom_paeth_predictor_2x2_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
+
+void aom_paeth_predictor_32x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
+
+void aom_paeth_predictor_32x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
+
+void aom_paeth_predictor_32x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_32x64 aom_paeth_predictor_32x64_c
+
+void aom_paeth_predictor_32x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_32x8 aom_paeth_predictor_32x8_c
+
+void aom_paeth_predictor_4x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_4x16 aom_paeth_predictor_4x16_c
+
+void aom_paeth_predictor_4x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
+
+void aom_paeth_predictor_4x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
+
+void aom_paeth_predictor_64x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x16 aom_paeth_predictor_64x16_c
+
+void aom_paeth_predictor_64x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x32 aom_paeth_predictor_64x32_c
+
+void aom_paeth_predictor_64x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_paeth_predictor_64x64 aom_paeth_predictor_64x64_c
+
+void aom_paeth_predictor_8x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
+
+void aom_paeth_predictor_8x32_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_paeth_predictor_8x32 aom_paeth_predictor_8x32_c
+
+void aom_paeth_predictor_8x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
+
+void aom_paeth_predictor_8x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
+
+void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
+
+void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
+
+void aom_smooth_h_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x4 aom_smooth_h_predictor_16x4_c
+
+void aom_smooth_h_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_16x64 aom_smooth_h_predictor_16x64_c
+
+void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
+
+void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
+
+void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
+
+void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
+
+void aom_smooth_h_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_32x64 aom_smooth_h_predictor_32x64_c
+
+void aom_smooth_h_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_32x8 aom_smooth_h_predictor_32x8_c
+
+void aom_smooth_h_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_4x16 aom_smooth_h_predictor_4x16_c
+
+void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
+
+void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
+
+void aom_smooth_h_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x16 aom_smooth_h_predictor_64x16_c
+
+void aom_smooth_h_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x32 aom_smooth_h_predictor_64x32_c
+
+void aom_smooth_h_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_h_predictor_64x64 aom_smooth_h_predictor_64x64_c
+
+void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
+
+void aom_smooth_h_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_h_predictor_8x32 aom_smooth_h_predictor_8x32_c
+
+void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
+
+void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
+
+void aom_smooth_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
+
+void aom_smooth_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
+
+void aom_smooth_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x4 aom_smooth_predictor_16x4_c
+
+void aom_smooth_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_16x64 aom_smooth_predictor_16x64_c
+
+void aom_smooth_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
+
+void aom_smooth_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
+
+void aom_smooth_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
+
+void aom_smooth_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
+
+void aom_smooth_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_32x64 aom_smooth_predictor_32x64_c
+
+void aom_smooth_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_32x8 aom_smooth_predictor_32x8_c
+
+void aom_smooth_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_4x16 aom_smooth_predictor_4x16_c
+
+void aom_smooth_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
+
+void aom_smooth_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
+
+void aom_smooth_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x16 aom_smooth_predictor_64x16_c
+
+void aom_smooth_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x32 aom_smooth_predictor_64x32_c
+
+void aom_smooth_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_predictor_64x64 aom_smooth_predictor_64x64_c
+
+void aom_smooth_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
+
+void aom_smooth_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_smooth_predictor_8x32 aom_smooth_predictor_8x32_c
+
+void aom_smooth_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
+
+void aom_smooth_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
+
+void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
+
+void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
+
+void aom_smooth_v_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x4 aom_smooth_v_predictor_16x4_c
+
+void aom_smooth_v_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_16x64 aom_smooth_v_predictor_16x64_c
+
+void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
+
+void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
+
+void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
+
+void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
+
+void aom_smooth_v_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_32x64 aom_smooth_v_predictor_32x64_c
+
+void aom_smooth_v_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_32x8 aom_smooth_v_predictor_32x8_c
+
+void aom_smooth_v_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_4x16 aom_smooth_v_predictor_4x16_c
+
+void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
+
+void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
+
+void aom_smooth_v_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x16 aom_smooth_v_predictor_64x16_c
+
+void aom_smooth_v_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x32 aom_smooth_v_predictor_64x32_c
+
+void aom_smooth_v_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_smooth_v_predictor_64x64 aom_smooth_v_predictor_64x64_c
+
+void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
+
+void aom_smooth_v_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_smooth_v_predictor_8x32 aom_smooth_v_predictor_8x32_c
+
+void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
+
+void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
+
+void aom_v_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x16 aom_v_predictor_16x16_c
+
+void aom_v_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
+
+void aom_v_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x4 aom_v_predictor_16x4_c
+
+void aom_v_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_16x64 aom_v_predictor_16x64_c
+
+void aom_v_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
+
+void aom_v_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
+
+void aom_v_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
+
+void aom_v_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x32 aom_v_predictor_32x32_c
+
+void aom_v_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_32x64 aom_v_predictor_32x64_c
+
+void aom_v_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_32x8 aom_v_predictor_32x8_c
+
+void aom_v_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_4x16 aom_v_predictor_4x16_c
+
+void aom_v_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_4x4 aom_v_predictor_4x4_c
+
+void aom_v_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
+
+void aom_v_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x16 aom_v_predictor_64x16_c
+
+void aom_v_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x32 aom_v_predictor_64x32_c
+
+void aom_v_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+#define aom_v_predictor_64x64 aom_v_predictor_64x64_c
+
+void aom_v_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
+
+void aom_v_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_v_predictor_8x32 aom_v_predictor_8x32_c
+
+void aom_v_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
+
+void aom_v_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_8x8 aom_v_predictor_8x8_c
+
+void av1_round_shift_array_c(int32_t* arr, int size, int bit);
+#define av1_round_shift_array av1_round_shift_array_c
+
+void aom_dsp_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+static void setup_rtcd_internal(void) {}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/generic/aom_scale_rtcd.h b/third_party/libaom/source/config/linux/generic/config/aom_scale_rtcd.h
similarity index 71%
rename from third_party/libaom/source/config/linux/generic/aom_scale_rtcd.h
rename to third_party/libaom/source/config/linux/generic/config/aom_scale_rtcd.h
index 97ab3bd..d8703dfa 100644
--- a/third_party/libaom/source/config/linux/generic/aom_scale_rtcd.h
+++ b/third_party/libaom/source/config/linux/generic/config/aom_scale_rtcd.h
@@ -1,3 +1,4 @@
+// This file is generated. Do not edit.
 #ifndef AOM_SCALE_RTCD_H_
 #define AOM_SCALE_RTCD_H_
 
@@ -13,13 +14,15 @@
 extern "C" {
 #endif
 
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                const int num_planes);
 #define aom_extend_frame_borders aom_extend_frame_borders_c
 
 void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
 #define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
 
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf,
+                                      const int num_planes);
 #define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
 
 void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
@@ -69,7 +72,8 @@
 #define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
 
 void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
+                           struct yv12_buffer_config* dst_bc,
+                           const int num_planes);
 #define aom_yv12_copy_frame aom_yv12_copy_frame_c
 
 void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
@@ -84,12 +88,37 @@
                        struct yv12_buffer_config* dst_ybc);
 #define aom_yv12_copy_y aom_yv12_copy_y_c
 
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                     const int num_planes);
 #define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
 
+void aom_yv12_partial_copy_u_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_u aom_yv12_partial_copy_u_c
+
+void aom_yv12_partial_copy_v_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_v aom_yv12_partial_copy_v_c
+
+void aom_yv12_partial_copy_y_c(const struct yv12_buffer_config* src_ybc,
+                               struct yv12_buffer_config* dst_ybc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_y aom_yv12_partial_copy_y_c
+
 void aom_scale_rtcd(void);
 
-#include "aom_config.h"
+#include "config/aom_config.h"
 
 #ifdef RTCD_C
 static void setup_rtcd_internal(void) {}
diff --git a/third_party/libaom/source/config/linux/generic/config/av1_rtcd.h b/third_party/libaom/source/config/linux/generic/config/av1_rtcd.h
new file mode 100644
index 0000000..bcf9a011
--- /dev/null
+++ b/third_party/libaom/source/config/linux/generic/config/av1_rtcd.h
@@ -0,0 +1,841 @@
+// This file is generated. Do not edit.
+#ifndef AV1_RTCD_H_
+#define AV1_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * AV1
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/txfm_common.h"
+#include "av1/common/av1_txfm.h"
+#include "av1/common/common.h"
+#include "av1/common/convolve.h"
+#include "av1/common/enums.h"
+#include "av1/common/filter.h"
+#include "av1/common/odintrin.h"
+#include "av1/common/quant_common.h"
+#include "av1/common/restoration.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct txfm_param;
+struct aom_variance_vtable;
+struct search_site_config;
+struct yv12_buffer_config;
+
+/* Function pointers return by CfL functions */
+typedef void (*cfl_subsample_lbd_fn)(const uint8_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subsample_hbd_fn)(const uint16_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subtract_average_fn)(const uint16_t* src, int16_t* dst);
+
+typedef void (*cfl_predict_lbd_fn)(const int16_t* src,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3);
+
+typedef void (*cfl_predict_hbd_fn)(const int16_t* src,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3,
+                                   int bd);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void apply_selfguided_restoration_c(const uint8_t* dat,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    int eps,
+                                    const int* xqd,
+                                    uint8_t* dst,
+                                    int dst_stride,
+                                    int32_t* tmpbuf,
+                                    int bit_depth,
+                                    int highbd);
+#define apply_selfguided_restoration apply_selfguided_restoration_c
+
+void av1_build_compound_diffwtd_mask_c(uint8_t* mask,
+                                       DIFFWTD_MASK_TYPE mask_type,
+                                       const uint8_t* src0,
+                                       int src0_stride,
+                                       const uint8_t* src1,
+                                       int src1_stride,
+                                       int h,
+                                       int w);
+#define av1_build_compound_diffwtd_mask av1_build_compound_diffwtd_mask_c
+
+void av1_build_compound_diffwtd_mask_d16_c(uint8_t* mask,
+                                           DIFFWTD_MASK_TYPE mask_type,
+                                           const CONV_BUF_TYPE* src0,
+                                           int src0_stride,
+                                           const CONV_BUF_TYPE* src1,
+                                           int src1_stride,
+                                           int h,
+                                           int w,
+                                           ConvolveParams* conv_params,
+                                           int bd);
+#define av1_build_compound_diffwtd_mask_d16 \
+  av1_build_compound_diffwtd_mask_d16_c
+
+void av1_build_compound_diffwtd_mask_highbd_c(uint8_t* mask,
+                                              DIFFWTD_MASK_TYPE mask_type,
+                                              const uint8_t* src0,
+                                              int src0_stride,
+                                              const uint8_t* src1,
+                                              int src1_stride,
+                                              int h,
+                                              int w,
+                                              int bd);
+#define av1_build_compound_diffwtd_mask_highbd \
+  av1_build_compound_diffwtd_mask_highbd_c
+
+void av1_convolve_2d_copy_sr_c(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+#define av1_convolve_2d_copy_sr av1_convolve_2d_copy_sr_c
+
+void av1_convolve_2d_scale_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_qn,
+                             const int x_step_qn,
+                             const int subpel_y_q4,
+                             const int y_step_qn,
+                             ConvolveParams* conv_params);
+#define av1_convolve_2d_scale av1_convolve_2d_scale_c
+
+void av1_convolve_2d_sr_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+#define av1_convolve_2d_sr av1_convolve_2d_sr_c
+
+void av1_convolve_horiz_rs_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             const int16_t* x_filters,
+                             int x0_qn,
+                             int x_step_qn);
+#define av1_convolve_horiz_rs av1_convolve_horiz_rs_c
+
+void av1_convolve_x_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+#define av1_convolve_x_sr av1_convolve_x_sr_c
+
+void av1_convolve_y_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+#define av1_convolve_y_sr av1_convolve_y_sr_c
+
+void av1_dr_prediction_z1_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z1 av1_dr_prediction_z1_c
+
+void av1_dr_prediction_z2_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z2 av1_dr_prediction_z2_c
+
+void av1_dr_prediction_z3_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z3 av1_dr_prediction_z3_c
+
+void av1_filter_intra_edge_c(uint8_t* p, int sz, int strength);
+#define av1_filter_intra_edge av1_filter_intra_edge_c
+
+void av1_filter_intra_edge_high_c(uint16_t* p, int sz, int strength);
+#define av1_filter_intra_edge_high av1_filter_intra_edge_high_c
+
+void av1_filter_intra_predictor_c(uint8_t* dst,
+                                  ptrdiff_t stride,
+                                  TX_SIZE tx_size,
+                                  const uint8_t* above,
+                                  const uint8_t* left,
+                                  int mode);
+#define av1_filter_intra_predictor av1_filter_intra_predictor_c
+
+void av1_highbd_convolve8_c(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h,
+                            int bps);
+#define av1_highbd_convolve8 av1_highbd_convolve8_c
+
+void av1_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define av1_highbd_convolve8_horiz av1_highbd_convolve8_horiz_c
+
+void av1_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define av1_highbd_convolve8_vert av1_highbd_convolve8_vert_c
+
+void av1_highbd_convolve_2d_copy_sr_c(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+#define av1_highbd_convolve_2d_copy_sr av1_highbd_convolve_2d_copy_sr_c
+
+void av1_highbd_convolve_2d_scale_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int x_step_qn,
+                                    const int subpel_y_q4,
+                                    const int y_step_qn,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+#define av1_highbd_convolve_2d_scale av1_highbd_convolve_2d_scale_c
+
+void av1_highbd_convolve_2d_sr_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_convolve_2d_sr av1_highbd_convolve_2d_sr_c
+
+void av1_highbd_convolve_avg_c(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve_avg av1_highbd_convolve_avg_c
+
+void av1_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define av1_highbd_convolve_copy av1_highbd_convolve_copy_c
+
+void av1_highbd_convolve_horiz_rs_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    const int16_t* x_filters,
+                                    int x0_qn,
+                                    int x_step_qn,
+                                    int bd);
+#define av1_highbd_convolve_horiz_rs av1_highbd_convolve_horiz_rs_c
+
+void av1_highbd_convolve_x_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_x_sr av1_highbd_convolve_x_sr_c
+
+void av1_highbd_convolve_y_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+#define av1_highbd_convolve_y_sr av1_highbd_convolve_y_sr_c
+
+void av1_highbd_dr_prediction_z1_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z1 av1_highbd_dr_prediction_z1_c
+
+void av1_highbd_dr_prediction_z2_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z2 av1_highbd_dr_prediction_z2_c
+
+void av1_highbd_dr_prediction_z3_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z3 av1_highbd_dr_prediction_z3_c
+
+void av1_highbd_iwht4x4_16_add_c(const tran_low_t* input,
+                                 uint8_t* dest,
+                                 int dest_stride,
+                                 int bd);
+#define av1_highbd_iwht4x4_16_add av1_highbd_iwht4x4_16_add_c
+
+void av1_highbd_iwht4x4_1_add_c(const tran_low_t* input,
+                                uint8_t* dest,
+                                int dest_stride,
+                                int bd);
+#define av1_highbd_iwht4x4_1_add av1_highbd_iwht4x4_1_add_c
+
+void av1_highbd_jnt_convolve_2d_c(const uint16_t* src,
+                                  int src_stride,
+                                  uint16_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params,
+                                  int bd);
+#define av1_highbd_jnt_convolve_2d av1_highbd_jnt_convolve_2d_c
+
+void av1_highbd_jnt_convolve_2d_copy_c(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+#define av1_highbd_jnt_convolve_2d_copy av1_highbd_jnt_convolve_2d_copy_c
+
+void av1_highbd_jnt_convolve_x_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_x av1_highbd_jnt_convolve_x_c
+
+void av1_highbd_jnt_convolve_y_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+#define av1_highbd_jnt_convolve_y av1_highbd_jnt_convolve_y_c
+
+void av1_highbd_warp_affine_c(const int32_t* mat,
+                              const uint16_t* ref,
+                              int width,
+                              int height,
+                              int stride,
+                              uint16_t* pred,
+                              int p_col,
+                              int p_row,
+                              int p_width,
+                              int p_height,
+                              int p_stride,
+                              int subsampling_x,
+                              int subsampling_y,
+                              int bd,
+                              ConvolveParams* conv_params,
+                              int16_t alpha,
+                              int16_t beta,
+                              int16_t gamma,
+                              int16_t delta);
+#define av1_highbd_warp_affine av1_highbd_warp_affine_c
+
+void av1_highbd_wiener_convolve_add_src_c(const uint8_t* src,
+                                          ptrdiff_t src_stride,
+                                          uint8_t* dst,
+                                          ptrdiff_t dst_stride,
+                                          const int16_t* filter_x,
+                                          int x_step_q4,
+                                          const int16_t* filter_y,
+                                          int y_step_q4,
+                                          int w,
+                                          int h,
+                                          const ConvolveParams* conv_params,
+                                          int bps);
+#define av1_highbd_wiener_convolve_add_src av1_highbd_wiener_convolve_add_src_c
+
+void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x16 av1_inv_txfm2d_add_16x16_c
+
+void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
+
+void av1_inv_txfm2d_add_16x4_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x4 av1_inv_txfm2d_add_16x4_c
+
+void av1_inv_txfm2d_add_16x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x64 av1_inv_txfm2d_add_16x64_c
+
+void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
+
+void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
+
+void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x32 av1_inv_txfm2d_add_32x32_c
+
+void av1_inv_txfm2d_add_32x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x64 av1_inv_txfm2d_add_32x64_c
+
+void av1_inv_txfm2d_add_32x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_32x8 av1_inv_txfm2d_add_32x8_c
+
+void av1_inv_txfm2d_add_4x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_4x16 av1_inv_txfm2d_add_4x16_c
+
+void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x4 av1_inv_txfm2d_add_4x4_c
+
+void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
+
+void av1_inv_txfm2d_add_64x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x16 av1_inv_txfm2d_add_64x16_c
+
+void av1_inv_txfm2d_add_64x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x32 av1_inv_txfm2d_add_64x32_c
+
+void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
+
+void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
+
+void av1_inv_txfm2d_add_8x32_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x32 av1_inv_txfm2d_add_8x32_c
+
+void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
+
+void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x8 av1_inv_txfm2d_add_8x8_c
+
+void av1_inv_txfm_add_c(const tran_low_t* dqcoeff,
+                        uint8_t* dst,
+                        int stride,
+                        const TxfmParam* txfm_param);
+#define av1_inv_txfm_add av1_inv_txfm_add_c
+
+void av1_jnt_convolve_2d_c(const uint8_t* src,
+                           int src_stride,
+                           uint8_t* dst,
+                           int dst_stride,
+                           int w,
+                           int h,
+                           InterpFilterParams* filter_params_x,
+                           InterpFilterParams* filter_params_y,
+                           const int subpel_x_q4,
+                           const int subpel_y_q4,
+                           ConvolveParams* conv_params);
+#define av1_jnt_convolve_2d av1_jnt_convolve_2d_c
+
+void av1_jnt_convolve_2d_copy_c(const uint8_t* src,
+                                int src_stride,
+                                uint8_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params);
+#define av1_jnt_convolve_2d_copy av1_jnt_convolve_2d_copy_c
+
+void av1_jnt_convolve_x_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+#define av1_jnt_convolve_x av1_jnt_convolve_x_c
+
+void av1_jnt_convolve_y_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+#define av1_jnt_convolve_y av1_jnt_convolve_y_c
+
+void av1_selfguided_restoration_c(const uint8_t* dgd8,
+                                  int width,
+                                  int height,
+                                  int dgd_stride,
+                                  int32_t* flt0,
+                                  int32_t* flt1,
+                                  int flt_stride,
+                                  int sgr_params_idx,
+                                  int bit_depth,
+                                  int highbd);
+#define av1_selfguided_restoration av1_selfguided_restoration_c
+
+void av1_upsample_intra_edge_c(uint8_t* p, int sz);
+#define av1_upsample_intra_edge av1_upsample_intra_edge_c
+
+void av1_upsample_intra_edge_high_c(uint16_t* p, int sz, int bd);
+#define av1_upsample_intra_edge_high av1_upsample_intra_edge_high_c
+
+void av1_warp_affine_c(const int32_t* mat,
+                       const uint8_t* ref,
+                       int width,
+                       int height,
+                       int stride,
+                       uint8_t* pred,
+                       int p_col,
+                       int p_row,
+                       int p_width,
+                       int p_height,
+                       int p_stride,
+                       int subsampling_x,
+                       int subsampling_y,
+                       ConvolveParams* conv_params,
+                       int16_t alpha,
+                       int16_t beta,
+                       int16_t gamma,
+                       int16_t delta);
+#define av1_warp_affine av1_warp_affine_c
+
+void av1_wiener_convolve_add_src_c(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   const ConvolveParams* conv_params);
+#define av1_wiener_convolve_add_src av1_wiener_convolve_add_src_c
+
+void cdef_filter_block_c(uint8_t* dst8,
+                         uint16_t* dst16,
+                         int dstride,
+                         const uint16_t* in,
+                         int pri_strength,
+                         int sec_strength,
+                         int dir,
+                         int pri_damping,
+                         int sec_damping,
+                         int bsize,
+                         int max,
+                         int coeff_shift);
+#define cdef_filter_block cdef_filter_block_c
+
+int cdef_find_dir_c(const uint16_t* img,
+                    int stride,
+                    int32_t* var,
+                    int coeff_shift);
+#define cdef_find_dir cdef_find_dir_c
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_420_hbd cfl_get_luma_subsampling_420_hbd_c
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_420_lbd cfl_get_luma_subsampling_420_lbd_c
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_422_hbd cfl_get_luma_subsampling_422_hbd_c
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_422_lbd cfl_get_luma_subsampling_422_lbd_c
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_444_hbd cfl_get_luma_subsampling_444_hbd_c
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_c(TX_SIZE tx_size);
+#define cfl_get_luma_subsampling_444_lbd cfl_get_luma_subsampling_444_lbd_c
+
+void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
+                                 int dstride,
+                                 const uint16_t* src,
+                                 int sstride,
+                                 int v,
+                                 int h);
+#define copy_rect8_16bit_to_16bit copy_rect8_16bit_to_16bit_c
+
+void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
+                                int dstride,
+                                const uint8_t* src,
+                                int sstride,
+                                int v,
+                                int h);
+#define copy_rect8_8bit_to_16bit copy_rect8_8bit_to_16bit_c
+
+cfl_predict_hbd_fn get_predict_hbd_fn_c(TX_SIZE tx_size);
+#define get_predict_hbd_fn get_predict_hbd_fn_c
+
+cfl_predict_lbd_fn get_predict_lbd_fn_c(TX_SIZE tx_size);
+#define get_predict_lbd_fn get_predict_lbd_fn_c
+
+cfl_subtract_average_fn get_subtract_average_fn_c(TX_SIZE tx_size);
+#define get_subtract_average_fn get_subtract_average_fn_c
+
+void av1_rtcd(void);
+
+#include "config/aom_config.h"
+
+#ifdef RTCD_C
+static void setup_rtcd_internal(void) {}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/ia32/aom_config.asm b/third_party/libaom/source/config/linux/ia32/aom_config.asm
deleted file mode 100644
index 0eb2487..0000000
--- a/third_party/libaom/source/config/linux/ia32/aom_config.asm
+++ /dev/null
@@ -1,168 +0,0 @@
-%define ARCH_ARM 0
-%define ARCH_MIPS 0
-%define ARCH_X86 1
-%define ARCH_X86_64 0
-%define HAVE_NEON 0
-%define HAVE_NEON_ASM 0
-%define HAVE_MIPS32 0
-%define HAVE_DSPR2 0
-%define HAVE_MSA 0
-%define HAVE_MIPS64 0
-%define HAVE_MMX 1
-%define HAVE_SSE 1
-%define HAVE_SSE2 1
-%define HAVE_SSE3 1
-%define HAVE_SSSE3 1
-%define HAVE_SSE4_1 1
-%define HAVE_AVX 1
-%define HAVE_AVX2 1
-%define HAVE_AOM_PORTS 1
-%define HAVE_FEXCEPT 1
-%define HAVE_PTHREAD_H 1
-%define HAVE_UNISTD_H 1
-%define HAVE_WXWIDGETS 0
-%define CONFIG_DEPENDENCY_TRACKING 1
-%define CONFIG_EXTERNAL_BUILD 1
-%define CONFIG_INSTALL_DOCS 0
-%define CONFIG_INSTALL_BINS 1
-%define CONFIG_INSTALL_LIBS 1
-%define CONFIG_INSTALL_SRCS 0
-%define CONFIG_DEBUG 0
-%define CONFIG_GPROF 0
-%define CONFIG_GCOV 0
-%define CONFIG_RVCT 0
-%define CONFIG_GCC 1
-%define CONFIG_MSVS 0
-%define CONFIG_PIC 1
-%define CONFIG_BIG_ENDIAN 0
-%define CONFIG_CODEC_SRCS 0
-%define CONFIG_DEBUG_LIBS 0
-%define CONFIG_RUNTIME_CPU_DETECT 1
-%define CONFIG_POSTPROC 1
-%define CONFIG_MULTITHREAD 1
-%define CONFIG_INTERNAL_STATS 0
-%define CONFIG_AV1_ENCODER 0
-%define CONFIG_AV1_DECODER 1
-%define CONFIG_AV1 1
-%define CONFIG_STATIC_MSVCRT 0
-%define CONFIG_SPATIAL_RESAMPLING 1
-%define CONFIG_REALTIME_ONLY 1
-%define CONFIG_SHARED 0
-%define CONFIG_STATIC 1
-%define CONFIG_SMALL 0
-%define CONFIG_POSTPROC_VISUALIZER 0
-%define CONFIG_OS_SUPPORT 1
-%define CONFIG_UNIT_TESTS 1
-%define CONFIG_WEBM_IO 1
-%define CONFIG_LIBYUV 1
-%define CONFIG_ACCOUNTING 0
-%define CONFIG_INSPECTION 0
-%define CONFIG_DECODE_PERF_TESTS 0
-%define CONFIG_ENCODE_PERF_TESTS 0
-%define CONFIG_COEFFICIENT_RANGE_CHECKING 0
-%define CONFIG_LOWBITDEPTH 1
-%define CONFIG_HIGHBITDEPTH 0
-%define CONFIG_EXPERIMENTAL 0
-%define CONFIG_SIZE_LIMIT 1
-%define CONFIG_FP_MB_STATS 0
-%define CONFIG_CDEF 1
-%define CONFIG_CDEF_SINGLEPASS 0
-%define CONFIG_VAR_TX 1
-%define CONFIG_RECT_TX 1
-%define CONFIG_RECT_TX_EXT 0
-%define CONFIG_TPL_MV 0
-%define CONFIG_DUAL_FILTER 1
-%define CONFIG_CONVOLVE_ROUND 1
-%define CONFIG_COMPOUND_ROUND 0
-%define CONFIG_EXT_TX 1
-%define CONFIG_DPCM_INTRA 0
-%define CONFIG_TX64X64 0
-%define CONFIG_EXT_INTRA 1
-%define CONFIG_INTRA_INTERP 0
-%define CONFIG_FILTER_INTRA 0
-%define CONFIG_INTRA_EDGE 0
-%define CONFIG_INTRABC 0
-%define CONFIG_EXT_INTER 1
-%define CONFIG_INTERINTRA 1
-%define CONFIG_WEDGE 1
-%define CONFIG_COMPOUND_SEGMENT 1
-%define CONFIG_EXT_REFS 1
-%define CONFIG_SPEED_REFS 0
-%define CONFIG_GF_GROUPS 0
-%define CONFIG_GLOBAL_MOTION 1
-%define CONFIG_NEW_QUANT 0
-%define CONFIG_SUPERTX 0
-%define CONFIG_ANS 0
-%define CONFIG_LOOP_RESTORATION 0
-%define CONFIG_EXT_PARTITION 0
-%define CONFIG_EXT_PARTITION_TYPES 0
-%define CONFIG_UNPOISON_PARTITION_CTX 0
-%define CONFIG_EXT_TILE 0
-%define CONFIG_MOTION_VAR 1
-%define CONFIG_NCOBMC 0
-%define CONFIG_WARPED_MOTION 1
-%define CONFIG_Q_ADAPT_PROBS 0
-%define CONFIG_BITSTREAM_DEBUG 0
-%define CONFIG_INTER_STATS_ONLY 0
-%define CONFIG_PALETTE_DELTA_ENCODING 0
-%define CONFIG_RAWBITS 0
-%define CONFIG_PVQ 0
-%define CONFIG_CFL 0
-%define CONFIG_XIPHRC 0
-%define CONFIG_DCT_ONLY 0
-%define CONFIG_DAALA_DCT4 0
-%define CONFIG_DAALA_DCT8 0
-%define CONFIG_DAALA_DCT16 0
-%define CONFIG_DAALA_DCT32 0
-%define CONFIG_DAALA_DCT64 0
-%define CONFIG_CB4X4 1
-%define CONFIG_CHROMA_2X2 0
-%define CONFIG_CHROMA_SUB8X8 1
-%define CONFIG_FRAME_SIZE 0
-%define CONFIG_DELTA_Q 1
-%define CONFIG_EXT_DELTA_Q 1
-%define CONFIG_ADAPT_SCAN 0
-%define CONFIG_FILTER_7BIT 1
-%define CONFIG_PARALLEL_DEBLOCKING 1
-%define CONFIG_LOOPFILTERING_ACROSS_TILES 1
-%define CONFIG_TEMPMV_SIGNALING 1
-%define CONFIG_RD_DEBUG 0
-%define CONFIG_REFERENCE_BUFFER 1
-%define CONFIG_COEF_INTERLEAVE 0
-%define CONFIG_ENTROPY_STATS 0
-%define CONFIG_MASKED_TX 0
-%define CONFIG_DEPENDENT_HORZTILES 0
-%define CONFIG_DIST_8X8 1
-%define CONFIG_TRIPRED 0
-%define CONFIG_PALETTE_THROUGHPUT 1
-%define CONFIG_REF_ADAPT 0
-%define CONFIG_LV_MAP 0
-%define CONFIG_TXK_SEL 0
-%define CONFIG_MV_COMPRESS 1
-%define CONFIG_SEGMENT_ZEROMV 0
-%define CONFIG_FRAME_SUPERRES 0
-%define CONFIG_NEW_MULTISYMBOL 0
-%define CONFIG_COMPOUND_SINGLEREF 0
-%define CONFIG_AOM_QM 1
-%define CONFIG_ONE_SIDED_COMPOUND 1
-%define CONFIG_EXT_COMP_REFS 1
-%define CONFIG_SMOOTH_HV 1
-%define CONFIG_VAR_REFS 0
-%define CONFIG_RECT_INTRA_PRED 1
-%define CONFIG_LGT 0
-%define CONFIG_SBL_SYMBOL 0
-%define CONFIG_NCOBMC_ADAPT_WEIGHT 0
-%define CONFIG_BGSPRITE 0
-%define CONFIG_VAR_TX_NO_TX_MODE 0
-%define CONFIG_MRC_TX 0
-%define CONFIG_LPF_DIRECT 0
-%define CONFIG_LOOPFILTER_LEVEL 0
-%define CONFIG_NO_FRAME_CONTEXT_SIGNALING 0
-%define CONFIG_TXMG 0
-%define CONFIG_HASH_ME 0
-%define CONFIG_COLORSPACE_HEADERS 0
-%define CONFIG_MFMV 0
-%define CONFIG_JNT_COMP 0
-%define CONFIG_ANALYZER 0
-%define DECODE_WIDTH_LIMIT 16384
-%define DECODE_HEIGHT_LIMIT 16384
diff --git a/third_party/libaom/source/config/linux/ia32/aom_config.c b/third_party/libaom/source/config/linux/ia32/aom_config.c
deleted file mode 100644
index 1a5b673..0000000
--- a/third_party/libaom/source/config/linux/ia32/aom_config.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-#include "aom/aom_codec.h"
-static const char* const cfg = "--target=x86-linux-gcc --enable-external-build --enable-postproc --disable-av1-encoder --size-limit=16384x16384 --enable-realtime-only --disable-install-docs --disable-highbitdepth --enable-pic --as=yasm";
-const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/ia32/aom_config.h b/third_party/libaom/source/config/linux/ia32/aom_config.h
deleted file mode 100644
index ad1b686..0000000
--- a/third_party/libaom/source/config/linux/ia32/aom_config.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-/* This file automatically generated by configure. Do not edit! */
-#ifndef AOM_CONFIG_H
-#define AOM_CONFIG_H
-#define RESTRICT    
-#define INLINE      inline
-#define ARCH_ARM 0
-#define ARCH_MIPS 0
-#define ARCH_X86 1
-#define ARCH_X86_64 0
-#define HAVE_NEON 0
-#define HAVE_NEON_ASM 0
-#define HAVE_MIPS32 0
-#define HAVE_DSPR2 0
-#define HAVE_MSA 0
-#define HAVE_MIPS64 0
-#define HAVE_MMX 1
-#define HAVE_SSE 1
-#define HAVE_SSE2 1
-#define HAVE_SSE3 1
-#define HAVE_SSSE3 1
-#define HAVE_SSE4_1 1
-#define HAVE_AVX 1
-#define HAVE_AVX2 1
-#define HAVE_AOM_PORTS 1
-#define HAVE_FEXCEPT 1
-#define HAVE_PTHREAD_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_WXWIDGETS 0
-#define CONFIG_DEPENDENCY_TRACKING 1
-#define CONFIG_EXTERNAL_BUILD 1
-#define CONFIG_INSTALL_DOCS 0
-#define CONFIG_INSTALL_BINS 1
-#define CONFIG_INSTALL_LIBS 1
-#define CONFIG_INSTALL_SRCS 0
-#define CONFIG_DEBUG 0
-#define CONFIG_GPROF 0
-#define CONFIG_GCOV 0
-#define CONFIG_RVCT 0
-#define CONFIG_GCC 1
-#define CONFIG_MSVS 0
-#define CONFIG_PIC 1
-#define CONFIG_BIG_ENDIAN 0
-#define CONFIG_CODEC_SRCS 0
-#define CONFIG_DEBUG_LIBS 0
-#define CONFIG_RUNTIME_CPU_DETECT 1
-#define CONFIG_POSTPROC 1
-#define CONFIG_MULTITHREAD 1
-#define CONFIG_INTERNAL_STATS 0
-#define CONFIG_AV1_ENCODER 0
-#define CONFIG_AV1_DECODER 1
-#define CONFIG_AV1 1
-#define CONFIG_STATIC_MSVCRT 0
-#define CONFIG_SPATIAL_RESAMPLING 1
-#define CONFIG_REALTIME_ONLY 1
-#define CONFIG_SHARED 0
-#define CONFIG_STATIC 1
-#define CONFIG_SMALL 0
-#define CONFIG_POSTPROC_VISUALIZER 0
-#define CONFIG_OS_SUPPORT 1
-#define CONFIG_UNIT_TESTS 1
-#define CONFIG_WEBM_IO 1
-#define CONFIG_LIBYUV 1
-#define CONFIG_ACCOUNTING 0
-#define CONFIG_INSPECTION 0
-#define CONFIG_DECODE_PERF_TESTS 0
-#define CONFIG_ENCODE_PERF_TESTS 0
-#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
-#define CONFIG_LOWBITDEPTH 1
-#define CONFIG_HIGHBITDEPTH 0
-#define CONFIG_EXPERIMENTAL 0
-#define CONFIG_SIZE_LIMIT 1
-#define CONFIG_FP_MB_STATS 0
-#define CONFIG_CDEF 1
-#define CONFIG_CDEF_SINGLEPASS 0
-#define CONFIG_VAR_TX 1
-#define CONFIG_RECT_TX 1
-#define CONFIG_RECT_TX_EXT 0
-#define CONFIG_TPL_MV 0
-#define CONFIG_DUAL_FILTER 1
-#define CONFIG_CONVOLVE_ROUND 1
-#define CONFIG_COMPOUND_ROUND 0
-#define CONFIG_EXT_TX 1
-#define CONFIG_DPCM_INTRA 0
-#define CONFIG_TX64X64 0
-#define CONFIG_EXT_INTRA 1
-#define CONFIG_INTRA_INTERP 0
-#define CONFIG_FILTER_INTRA 0
-#define CONFIG_INTRA_EDGE 0
-#define CONFIG_INTRABC 0
-#define CONFIG_EXT_INTER 1
-#define CONFIG_INTERINTRA 1
-#define CONFIG_WEDGE 1
-#define CONFIG_COMPOUND_SEGMENT 1
-#define CONFIG_EXT_REFS 1
-#define CONFIG_SPEED_REFS 0
-#define CONFIG_GF_GROUPS 0
-#define CONFIG_GLOBAL_MOTION 1
-#define CONFIG_NEW_QUANT 0
-#define CONFIG_SUPERTX 0
-#define CONFIG_ANS 0
-#define CONFIG_LOOP_RESTORATION 0
-#define CONFIG_EXT_PARTITION 0
-#define CONFIG_EXT_PARTITION_TYPES 0
-#define CONFIG_UNPOISON_PARTITION_CTX 0
-#define CONFIG_EXT_TILE 0
-#define CONFIG_MOTION_VAR 1
-#define CONFIG_NCOBMC 0
-#define CONFIG_WARPED_MOTION 1
-#define CONFIG_Q_ADAPT_PROBS 0
-#define CONFIG_BITSTREAM_DEBUG 0
-#define CONFIG_INTER_STATS_ONLY 0
-#define CONFIG_PALETTE_DELTA_ENCODING 0
-#define CONFIG_RAWBITS 0
-#define CONFIG_PVQ 0
-#define CONFIG_CFL 0
-#define CONFIG_XIPHRC 0
-#define CONFIG_DCT_ONLY 0
-#define CONFIG_DAALA_DCT4 0
-#define CONFIG_DAALA_DCT8 0
-#define CONFIG_DAALA_DCT16 0
-#define CONFIG_DAALA_DCT32 0
-#define CONFIG_DAALA_DCT64 0
-#define CONFIG_CB4X4 1
-#define CONFIG_CHROMA_2X2 0
-#define CONFIG_CHROMA_SUB8X8 1
-#define CONFIG_FRAME_SIZE 0
-#define CONFIG_DELTA_Q 1
-#define CONFIG_EXT_DELTA_Q 1
-#define CONFIG_ADAPT_SCAN 0
-#define CONFIG_FILTER_7BIT 1
-#define CONFIG_PARALLEL_DEBLOCKING 1
-#define CONFIG_LOOPFILTERING_ACROSS_TILES 1
-#define CONFIG_TEMPMV_SIGNALING 1
-#define CONFIG_RD_DEBUG 0
-#define CONFIG_REFERENCE_BUFFER 1
-#define CONFIG_COEF_INTERLEAVE 0
-#define CONFIG_ENTROPY_STATS 0
-#define CONFIG_MASKED_TX 0
-#define CONFIG_DEPENDENT_HORZTILES 0
-#define CONFIG_DIST_8X8 1
-#define CONFIG_TRIPRED 0
-#define CONFIG_PALETTE_THROUGHPUT 1
-#define CONFIG_REF_ADAPT 0
-#define CONFIG_LV_MAP 0
-#define CONFIG_TXK_SEL 0
-#define CONFIG_MV_COMPRESS 1
-#define CONFIG_SEGMENT_ZEROMV 0
-#define CONFIG_FRAME_SUPERRES 0
-#define CONFIG_NEW_MULTISYMBOL 0
-#define CONFIG_COMPOUND_SINGLEREF 0
-#define CONFIG_AOM_QM 1
-#define CONFIG_ONE_SIDED_COMPOUND 1
-#define CONFIG_EXT_COMP_REFS 1
-#define CONFIG_SMOOTH_HV 1
-#define CONFIG_VAR_REFS 0
-#define CONFIG_RECT_INTRA_PRED 1
-#define CONFIG_LGT 0
-#define CONFIG_SBL_SYMBOL 0
-#define CONFIG_NCOBMC_ADAPT_WEIGHT 0
-#define CONFIG_BGSPRITE 0
-#define CONFIG_VAR_TX_NO_TX_MODE 0
-#define CONFIG_MRC_TX 0
-#define CONFIG_LPF_DIRECT 0
-#define CONFIG_LOOPFILTER_LEVEL 0
-#define CONFIG_NO_FRAME_CONTEXT_SIGNALING 0
-#define CONFIG_TXMG 0
-#define CONFIG_HASH_ME 0
-#define CONFIG_COLORSPACE_HEADERS 0
-#define CONFIG_MFMV 0
-#define CONFIG_JNT_COMP 0
-#define CONFIG_ANALYZER 0
-#define DECODE_WIDTH_LIMIT 16384
-#define DECODE_HEIGHT_LIMIT 16384
-#endif /* AOM_CONFIG_H */
diff --git a/third_party/libaom/source/config/linux/ia32/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/ia32/aom_dsp_rtcd.h
deleted file mode 100644
index 453381bc..0000000
--- a/third_party/libaom/source/config/linux/ia32/aom_dsp_rtcd.h
+++ /dev/null
@@ -1,2497 +0,0 @@
-#ifndef AOM_DSP_RTCD_H_
-#define AOM_DSP_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * DSP
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/aom_dsp_common.h"
-#include "av1/common/enums.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_blend_a64_d32_mask_c(int32_t* dst,
-                              uint32_t dst_stride,
-                              const int32_t* src0,
-                              uint32_t src0_stride,
-                              const int32_t* src1,
-                              uint32_t src1_stride,
-                              const uint8_t* mask,
-                              uint32_t mask_stride,
-                              int h,
-                              int w,
-                              int suby,
-                              int subx);
-#define aom_blend_a64_d32_mask aom_blend_a64_d32_mask_c
-
-void aom_blend_a64_hmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-void aom_blend_a64_hmask_sse4_1(uint8_t* dst,
-                                uint32_t dst_stride,
-                                const uint8_t* src0,
-                                uint32_t src0_stride,
-                                const uint8_t* src1,
-                                uint32_t src1_stride,
-                                const uint8_t* mask,
-                                int h,
-                                int w);
-RTCD_EXTERN void (*aom_blend_a64_hmask)(uint8_t* dst,
-                                        uint32_t dst_stride,
-                                        const uint8_t* src0,
-                                        uint32_t src0_stride,
-                                        const uint8_t* src1,
-                                        uint32_t src1_stride,
-                                        const uint8_t* mask,
-                                        int h,
-                                        int w);
-
-void aom_blend_a64_mask_c(uint8_t* dst,
-                          uint32_t dst_stride,
-                          const uint8_t* src0,
-                          uint32_t src0_stride,
-                          const uint8_t* src1,
-                          uint32_t src1_stride,
-                          const uint8_t* mask,
-                          uint32_t mask_stride,
-                          int h,
-                          int w,
-                          int suby,
-                          int subx);
-void aom_blend_a64_mask_sse4_1(uint8_t* dst,
-                               uint32_t dst_stride,
-                               const uint8_t* src0,
-                               uint32_t src0_stride,
-                               const uint8_t* src1,
-                               uint32_t src1_stride,
-                               const uint8_t* mask,
-                               uint32_t mask_stride,
-                               int h,
-                               int w,
-                               int suby,
-                               int subx);
-RTCD_EXTERN void (*aom_blend_a64_mask)(uint8_t* dst,
-                                       uint32_t dst_stride,
-                                       const uint8_t* src0,
-                                       uint32_t src0_stride,
-                                       const uint8_t* src1,
-                                       uint32_t src1_stride,
-                                       const uint8_t* mask,
-                                       uint32_t mask_stride,
-                                       int h,
-                                       int w,
-                                       int suby,
-                                       int subx);
-
-void aom_blend_a64_vmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-void aom_blend_a64_vmask_sse4_1(uint8_t* dst,
-                                uint32_t dst_stride,
-                                const uint8_t* src0,
-                                uint32_t src0_stride,
-                                const uint8_t* src1,
-                                uint32_t src1_stride,
-                                const uint8_t* mask,
-                                int h,
-                                int w);
-RTCD_EXTERN void (*aom_blend_a64_vmask)(uint8_t* dst,
-                                        uint32_t dst_stride,
-                                        const uint8_t* src0,
-                                        uint32_t src0_stride,
-                                        const uint8_t* src1,
-                                        uint32_t src1_stride,
-                                        const uint8_t* mask,
-                                        int h,
-                                        int w);
-
-void aom_convolve8_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-void aom_convolve8_sse2(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-void aom_convolve8_ssse3(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve8_avx2(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-RTCD_EXTERN void (*aom_convolve8)(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-
-void aom_convolve8_avg_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve8_avg_sse2(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-void aom_convolve8_avg_ssse3(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-RTCD_EXTERN void (*aom_convolve8_avg)(const uint8_t* src,
-                                      ptrdiff_t src_stride,
-                                      uint8_t* dst,
-                                      ptrdiff_t dst_stride,
-                                      const int16_t* filter_x,
-                                      int x_step_q4,
-                                      const int16_t* filter_y,
-                                      int y_step_q4,
-                                      int w,
-                                      int h);
-
-void aom_convolve8_avg_horiz_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-void aom_convolve8_avg_horiz_sse2(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-void aom_convolve8_avg_horiz_ssse3(const uint8_t* src,
-                                   ptrdiff_t src_stride,
-                                   uint8_t* dst,
-                                   ptrdiff_t dst_stride,
-                                   const int16_t* filter_x,
-                                   int x_step_q4,
-                                   const int16_t* filter_y,
-                                   int y_step_q4,
-                                   int w,
-                                   int h);
-RTCD_EXTERN void (*aom_convolve8_avg_horiz)(const uint8_t* src,
-                                            ptrdiff_t src_stride,
-                                            uint8_t* dst,
-                                            ptrdiff_t dst_stride,
-                                            const int16_t* filter_x,
-                                            int x_step_q4,
-                                            const int16_t* filter_y,
-                                            int y_step_q4,
-                                            int w,
-                                            int h);
-
-void aom_convolve8_avg_horiz_scale_c(const uint8_t* src,
-                                     ptrdiff_t src_stride,
-                                     uint8_t* dst,
-                                     ptrdiff_t dst_stride,
-                                     const int16_t* filter_x,
-                                     int subpel_x,
-                                     int x_step_q4,
-                                     const int16_t* filter_y,
-                                     int subpel_y,
-                                     int y_step_q4,
-                                     int w,
-                                     int h);
-#define aom_convolve8_avg_horiz_scale aom_convolve8_avg_horiz_scale_c
-
-void aom_convolve8_avg_scale_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int subpel_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int subpel_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-#define aom_convolve8_avg_scale aom_convolve8_avg_scale_c
-
-void aom_convolve8_avg_vert_c(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_avg_vert_sse2(const uint8_t* src,
-                                 ptrdiff_t src_stride,
-                                 uint8_t* dst,
-                                 ptrdiff_t dst_stride,
-                                 const int16_t* filter_x,
-                                 int x_step_q4,
-                                 const int16_t* filter_y,
-                                 int y_step_q4,
-                                 int w,
-                                 int h);
-void aom_convolve8_avg_vert_ssse3(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-RTCD_EXTERN void (*aom_convolve8_avg_vert)(const uint8_t* src,
-                                           ptrdiff_t src_stride,
-                                           uint8_t* dst,
-                                           ptrdiff_t dst_stride,
-                                           const int16_t* filter_x,
-                                           int x_step_q4,
-                                           const int16_t* filter_y,
-                                           int y_step_q4,
-                                           int w,
-                                           int h);
-
-void aom_convolve8_avg_vert_scale_c(const uint8_t* src,
-                                    ptrdiff_t src_stride,
-                                    uint8_t* dst,
-                                    ptrdiff_t dst_stride,
-                                    const int16_t* filter_x,
-                                    int subpel_x,
-                                    int x_step_q4,
-                                    const int16_t* filter_y,
-                                    int subpel_y,
-                                    int y_step_q4,
-                                    int w,
-                                    int h);
-#define aom_convolve8_avg_vert_scale aom_convolve8_avg_vert_scale_c
-
-void aom_convolve8_horiz_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-void aom_convolve8_horiz_sse2(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_horiz_ssse3(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-void aom_convolve8_horiz_avx2(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-RTCD_EXTERN void (*aom_convolve8_horiz)(const uint8_t* src,
-                                        ptrdiff_t src_stride,
-                                        uint8_t* dst,
-                                        ptrdiff_t dst_stride,
-                                        const int16_t* filter_x,
-                                        int x_step_q4,
-                                        const int16_t* filter_y,
-                                        int y_step_q4,
-                                        int w,
-                                        int h);
-
-void aom_convolve8_horiz_scale_c(const uint8_t* src,
-                                 ptrdiff_t src_stride,
-                                 uint8_t* dst,
-                                 ptrdiff_t dst_stride,
-                                 const int16_t* filter_x,
-                                 int subpel_x,
-                                 int x_step_q4,
-                                 const int16_t* filter_y,
-                                 int subpel_y,
-                                 int y_step_q4,
-                                 int w,
-                                 int h);
-#define aom_convolve8_horiz_scale aom_convolve8_horiz_scale_c
-
-void aom_convolve8_scale_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int subpel_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int subpel_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_convolve8_scale aom_convolve8_scale_c
-
-void aom_convolve8_vert_c(const uint8_t* src,
-                          ptrdiff_t src_stride,
-                          uint8_t* dst,
-                          ptrdiff_t dst_stride,
-                          const int16_t* filter_x,
-                          int x_step_q4,
-                          const int16_t* filter_y,
-                          int y_step_q4,
-                          int w,
-                          int h);
-void aom_convolve8_vert_sse2(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-void aom_convolve8_vert_ssse3(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_vert_avx2(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-RTCD_EXTERN void (*aom_convolve8_vert)(const uint8_t* src,
-                                       ptrdiff_t src_stride,
-                                       uint8_t* dst,
-                                       ptrdiff_t dst_stride,
-                                       const int16_t* filter_x,
-                                       int x_step_q4,
-                                       const int16_t* filter_y,
-                                       int y_step_q4,
-                                       int w,
-                                       int h);
-
-void aom_convolve8_vert_scale_c(const uint8_t* src,
-                                ptrdiff_t src_stride,
-                                uint8_t* dst,
-                                ptrdiff_t dst_stride,
-                                const int16_t* filter_x,
-                                int subpel_x,
-                                int x_step_q4,
-                                const int16_t* filter_y,
-                                int subpel_y,
-                                int y_step_q4,
-                                int w,
-                                int h);
-#define aom_convolve8_vert_scale aom_convolve8_vert_scale_c
-
-void aom_convolve_avg_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-void aom_convolve_avg_sse2(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-RTCD_EXTERN void (*aom_convolve_avg)(const uint8_t* src,
-                                     ptrdiff_t src_stride,
-                                     uint8_t* dst,
-                                     ptrdiff_t dst_stride,
-                                     const int16_t* filter_x,
-                                     int x_step_q4,
-                                     const int16_t* filter_y,
-                                     int y_step_q4,
-                                     int w,
-                                     int h);
-
-void aom_convolve_copy_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve_copy_sse2(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-RTCD_EXTERN void (*aom_convolve_copy)(const uint8_t* src,
-                                      ptrdiff_t src_stride,
-                                      uint8_t* dst,
-                                      ptrdiff_t dst_stride,
-                                      const int16_t* filter_x,
-                                      int x_step_q4,
-                                      const int16_t* filter_y,
-                                      int y_step_q4,
-                                      int w,
-                                      int h);
-
-void aom_d117_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x16 aom_d117_predictor_16x16_c
-
-void aom_d117_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x32 aom_d117_predictor_16x32_c
-
-void aom_d117_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_16x8 aom_d117_predictor_16x8_c
-
-void aom_d117_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_2x2 aom_d117_predictor_2x2_c
-
-void aom_d117_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x16 aom_d117_predictor_32x16_c
-
-void aom_d117_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x32 aom_d117_predictor_32x32_c
-
-void aom_d117_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x4 aom_d117_predictor_4x4_c
-
-void aom_d117_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x8 aom_d117_predictor_4x8_c
-
-void aom_d117_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_8x16 aom_d117_predictor_8x16_c
-
-void aom_d117_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x4 aom_d117_predictor_8x4_c
-
-void aom_d117_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x8 aom_d117_predictor_8x8_c
-
-void aom_d135_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x16 aom_d135_predictor_16x16_c
-
-void aom_d135_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x32 aom_d135_predictor_16x32_c
-
-void aom_d135_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_16x8 aom_d135_predictor_16x8_c
-
-void aom_d135_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_2x2 aom_d135_predictor_2x2_c
-
-void aom_d135_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x16 aom_d135_predictor_32x16_c
-
-void aom_d135_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x32 aom_d135_predictor_32x32_c
-
-void aom_d135_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x4 aom_d135_predictor_4x4_c
-
-void aom_d135_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x8 aom_d135_predictor_4x8_c
-
-void aom_d135_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_8x16 aom_d135_predictor_8x16_c
-
-void aom_d135_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x4 aom_d135_predictor_8x4_c
-
-void aom_d135_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x8 aom_d135_predictor_8x8_c
-
-void aom_d153_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_d153_predictor_16x16_ssse3(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_16x16)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_d153_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_16x32 aom_d153_predictor_16x32_c
-
-void aom_d153_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_16x8 aom_d153_predictor_16x8_c
-
-void aom_d153_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_2x2 aom_d153_predictor_2x2_c
-
-void aom_d153_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_32x16 aom_d153_predictor_32x16_c
-
-void aom_d153_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_d153_predictor_32x32_ssse3(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_32x32)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_d153_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d153_predictor_4x4_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_4x4)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d153_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_4x8 aom_d153_predictor_4x8_c
-
-void aom_d153_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_8x16 aom_d153_predictor_8x16_c
-
-void aom_d153_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_8x4 aom_d153_predictor_8x4_c
-
-void aom_d153_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d153_predictor_8x8_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_8x8)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d207e_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x16 aom_d207e_predictor_16x16_c
-
-void aom_d207e_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x32 aom_d207e_predictor_16x32_c
-
-void aom_d207e_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_16x8 aom_d207e_predictor_16x8_c
-
-void aom_d207e_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_2x2 aom_d207e_predictor_2x2_c
-
-void aom_d207e_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x16 aom_d207e_predictor_32x16_c
-
-void aom_d207e_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x32 aom_d207e_predictor_32x32_c
-
-void aom_d207e_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x4 aom_d207e_predictor_4x4_c
-
-void aom_d207e_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x8 aom_d207e_predictor_4x8_c
-
-void aom_d207e_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_8x16 aom_d207e_predictor_8x16_c
-
-void aom_d207e_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x4 aom_d207e_predictor_8x4_c
-
-void aom_d207e_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x8 aom_d207e_predictor_8x8_c
-
-void aom_d45e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x16 aom_d45e_predictor_16x16_c
-
-void aom_d45e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x32 aom_d45e_predictor_16x32_c
-
-void aom_d45e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_16x8 aom_d45e_predictor_16x8_c
-
-void aom_d45e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_2x2 aom_d45e_predictor_2x2_c
-
-void aom_d45e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x16 aom_d45e_predictor_32x16_c
-
-void aom_d45e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x32 aom_d45e_predictor_32x32_c
-
-void aom_d45e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x4 aom_d45e_predictor_4x4_c
-
-void aom_d45e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x8 aom_d45e_predictor_4x8_c
-
-void aom_d45e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_8x16 aom_d45e_predictor_8x16_c
-
-void aom_d45e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x4 aom_d45e_predictor_8x4_c
-
-void aom_d45e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x8 aom_d45e_predictor_8x8_c
-
-void aom_d63e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x16 aom_d63e_predictor_16x16_c
-
-void aom_d63e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x32 aom_d63e_predictor_16x32_c
-
-void aom_d63e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_16x8 aom_d63e_predictor_16x8_c
-
-void aom_d63e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_2x2 aom_d63e_predictor_2x2_c
-
-void aom_d63e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x16 aom_d63e_predictor_32x16_c
-
-void aom_d63e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x32 aom_d63e_predictor_32x32_c
-
-void aom_d63e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d63e_predictor_4x4_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d63e_predictor_4x4)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d63e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_4x8 aom_d63e_predictor_4x8_c
-
-void aom_d63e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_8x16 aom_d63e_predictor_8x16_c
-
-void aom_d63e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x4 aom_d63e_predictor_8x4_c
-
-void aom_d63e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x8 aom_d63e_predictor_8x8_c
-
-void aom_dc_128_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_128_predictor_16x16_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_128_predictor_16x16)(uint8_t* dst,
-                                               ptrdiff_t y_stride,
-                                               const uint8_t* above,
-                                               const uint8_t* left);
-
-void aom_dc_128_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
-
-void aom_dc_128_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
-
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
-void aom_dc_128_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
-
-void aom_dc_128_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_128_predictor_32x32_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_128_predictor_32x32)(uint8_t* dst,
-                                               ptrdiff_t y_stride,
-                                               const uint8_t* above,
-                                               const uint8_t* left);
-
-void aom_dc_128_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_128_predictor_4x4_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_128_predictor_4x4)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_dc_128_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
-
-void aom_dc_128_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
-
-void aom_dc_128_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
-
-void aom_dc_128_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_128_predictor_8x8_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_128_predictor_8x8)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_dc_left_predictor_16x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-void aom_dc_left_predictor_16x16_sse2(uint8_t* dst,
-                                      ptrdiff_t y_stride,
-                                      const uint8_t* above,
-                                      const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_left_predictor_16x16)(uint8_t* dst,
-                                                ptrdiff_t y_stride,
-                                                const uint8_t* above,
-                                                const uint8_t* left);
-
-void aom_dc_left_predictor_16x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
-
-void aom_dc_left_predictor_16x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
-
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
-void aom_dc_left_predictor_32x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
-
-void aom_dc_left_predictor_32x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-void aom_dc_left_predictor_32x32_sse2(uint8_t* dst,
-                                      ptrdiff_t y_stride,
-                                      const uint8_t* above,
-                                      const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_left_predictor_32x32)(uint8_t* dst,
-                                                ptrdiff_t y_stride,
-                                                const uint8_t* above,
-                                                const uint8_t* left);
-
-void aom_dc_left_predictor_4x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-void aom_dc_left_predictor_4x4_sse2(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_left_predictor_4x4)(uint8_t* dst,
-                                              ptrdiff_t y_stride,
-                                              const uint8_t* above,
-                                              const uint8_t* left);
-
-void aom_dc_left_predictor_4x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
-
-void aom_dc_left_predictor_8x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
-
-void aom_dc_left_predictor_8x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
-
-void aom_dc_left_predictor_8x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-void aom_dc_left_predictor_8x8_sse2(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_left_predictor_8x8)(uint8_t* dst,
-                                              ptrdiff_t y_stride,
-                                              const uint8_t* above,
-                                              const uint8_t* left);
-
-void aom_dc_predictor_16x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_dc_predictor_16x16_sse2(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_predictor_16x16)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_dc_predictor_16x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
-
-void aom_dc_predictor_16x8_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
-
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
-void aom_dc_predictor_32x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
-
-void aom_dc_predictor_32x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_dc_predictor_32x32_sse2(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_predictor_32x32)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_dc_predictor_4x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-void aom_dc_predictor_4x4_sse2(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_predictor_4x4)(uint8_t* dst,
-                                         ptrdiff_t y_stride,
-                                         const uint8_t* above,
-                                         const uint8_t* left);
-
-void aom_dc_predictor_4x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
-
-void aom_dc_predictor_8x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
-
-void aom_dc_predictor_8x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
-
-void aom_dc_predictor_8x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-void aom_dc_predictor_8x8_sse2(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_predictor_8x8)(uint8_t* dst,
-                                         ptrdiff_t y_stride,
-                                         const uint8_t* above,
-                                         const uint8_t* left);
-
-void aom_dc_top_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_top_predictor_16x16_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_top_predictor_16x16)(uint8_t* dst,
-                                               ptrdiff_t y_stride,
-                                               const uint8_t* above,
-                                               const uint8_t* left);
-
-void aom_dc_top_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
-
-void aom_dc_top_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
-
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
-void aom_dc_top_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
-
-void aom_dc_top_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_top_predictor_32x32_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_top_predictor_32x32)(uint8_t* dst,
-                                               ptrdiff_t y_stride,
-                                               const uint8_t* above,
-                                               const uint8_t* left);
-
-void aom_dc_top_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_top_predictor_4x4_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_top_predictor_4x4)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_dc_top_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
-
-void aom_dc_top_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
-
-void aom_dc_top_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
-
-void aom_dc_top_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_top_predictor_8x8_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_top_predictor_8x8)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_h_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_h_predictor_16x16_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-RTCD_EXTERN void (*aom_h_predictor_16x16)(uint8_t* dst,
-                                          ptrdiff_t y_stride,
-                                          const uint8_t* above,
-                                          const uint8_t* left);
-
-void aom_h_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
-
-void aom_h_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
-
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
-void aom_h_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
-
-void aom_h_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_h_predictor_32x32_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-RTCD_EXTERN void (*aom_h_predictor_32x32)(uint8_t* dst,
-                                          ptrdiff_t y_stride,
-                                          const uint8_t* above,
-                                          const uint8_t* left);
-
-void aom_h_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_h_predictor_4x4_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-RTCD_EXTERN void (*aom_h_predictor_4x4)(uint8_t* dst,
-                                        ptrdiff_t y_stride,
-                                        const uint8_t* above,
-                                        const uint8_t* left);
-
-void aom_h_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
-
-void aom_h_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
-
-void aom_h_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
-
-void aom_h_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_h_predictor_8x8_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-RTCD_EXTERN void (*aom_h_predictor_8x8)(uint8_t* dst,
-                                        ptrdiff_t y_stride,
-                                        const uint8_t* above,
-                                        const uint8_t* left);
-
-void aom_highbd_iwht4x4_16_add_c(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride,
-                                 int bd);
-#define aom_highbd_iwht4x4_16_add aom_highbd_iwht4x4_16_add_c
-
-void aom_highbd_iwht4x4_1_add_c(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride,
-                                int bd);
-#define aom_highbd_iwht4x4_1_add aom_highbd_iwht4x4_1_add_c
-
-void aom_idct16x16_10_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct16x16_10_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-void aom_idct16x16_10_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_10_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct16x16_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-void aom_idct16x16_1_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct16x16_1_add_avx2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_1_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride);
-
-void aom_idct16x16_256_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct16x16_256_add_sse2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-void aom_idct16x16_256_add_avx2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_256_add)(const tran_low_t* input,
-                                          uint8_t* dest,
-                                          int dest_stride);
-
-void aom_idct16x16_38_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct16x16_38_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_38_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct32x32_1024_add_c(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct32x32_1024_add_sse2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_1024_add_ssse3(const tran_low_t* input,
-                                  uint8_t* dest,
-                                  int dest_stride);
-void aom_idct32x32_1024_add_avx2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_1024_add)(const tran_low_t* input,
-                                           uint8_t* dest,
-                                           int dest_stride);
-
-void aom_idct32x32_135_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct32x32_1024_add_sse2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_135_add_ssse3(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_135_add_avx2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_135_add)(const tran_low_t* input,
-                                          uint8_t* dest,
-                                          int dest_stride);
-
-void aom_idct32x32_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-void aom_idct32x32_1_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct32x32_1_add_avx2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_1_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride);
-
-void aom_idct32x32_34_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct32x32_34_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-void aom_idct32x32_34_add_ssse3(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-void aom_idct32x32_34_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_34_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct4x4_16_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-RTCD_EXTERN void (*aom_idct4x4_16_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_idct4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-void aom_idct4x4_1_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-RTCD_EXTERN void (*aom_idct4x4_1_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride);
-
-void aom_idct8x8_12_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct8x8_12_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct8x8_12_add_ssse3(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_12_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_idct8x8_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-void aom_idct8x8_1_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_1_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride);
-
-void aom_idct8x8_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct8x8_64_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct8x8_64_add_ssse3(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_64_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_iwht4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_iwht4x4_16_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-RTCD_EXTERN void (*aom_iwht4x4_16_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_iwht4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-#define aom_iwht4x4_1_add aom_iwht4x4_1_add_c
-
-void aom_lpf_horizontal_4_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-void aom_lpf_horizontal_4_sse2(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit,
-                               const uint8_t* limit,
-                               const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_horizontal_4)(uint8_t* s,
-                                         int pitch,
-                                         const uint8_t* blimit,
-                                         const uint8_t* limit,
-                                         const uint8_t* thresh);
-
-void aom_lpf_horizontal_4_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
-
-void aom_lpf_horizontal_8_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-void aom_lpf_horizontal_8_sse2(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit,
-                               const uint8_t* limit,
-                               const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_horizontal_8)(uint8_t* s,
-                                         int pitch,
-                                         const uint8_t* blimit,
-                                         const uint8_t* limit,
-                                         const uint8_t* thresh);
-
-void aom_lpf_horizontal_8_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
-
-void aom_lpf_horizontal_edge_16_c(uint8_t* s,
-                                  int pitch,
-                                  const uint8_t* blimit,
-                                  const uint8_t* limit,
-                                  const uint8_t* thresh);
-void aom_lpf_horizontal_edge_16_sse2(uint8_t* s,
-                                     int pitch,
-                                     const uint8_t* blimit,
-                                     const uint8_t* limit,
-                                     const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_horizontal_edge_16)(uint8_t* s,
-                                               int pitch,
-                                               const uint8_t* blimit,
-                                               const uint8_t* limit,
-                                               const uint8_t* thresh);
-
-void aom_lpf_horizontal_edge_8_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit,
-                                 const uint8_t* limit,
-                                 const uint8_t* thresh);
-void aom_lpf_horizontal_edge_8_sse2(uint8_t* s,
-                                    int pitch,
-                                    const uint8_t* blimit,
-                                    const uint8_t* limit,
-                                    const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_horizontal_edge_8)(uint8_t* s,
-                                              int pitch,
-                                              const uint8_t* blimit,
-                                              const uint8_t* limit,
-                                              const uint8_t* thresh);
-
-void aom_lpf_vertical_16_c(uint8_t* s,
-                           int pitch,
-                           const uint8_t* blimit,
-                           const uint8_t* limit,
-                           const uint8_t* thresh);
-void aom_lpf_vertical_16_sse2(uint8_t* s,
-                              int pitch,
-                              const uint8_t* blimit,
-                              const uint8_t* limit,
-                              const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_vertical_16)(uint8_t* s,
-                                        int pitch,
-                                        const uint8_t* blimit,
-                                        const uint8_t* limit,
-                                        const uint8_t* thresh);
-
-void aom_lpf_vertical_16_dual_c(uint8_t* s,
-                                int pitch,
-                                const uint8_t* blimit,
-                                const uint8_t* limit,
-                                const uint8_t* thresh);
-#define aom_lpf_vertical_16_dual aom_lpf_vertical_16_dual_c
-
-void aom_lpf_vertical_4_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-void aom_lpf_vertical_4_sse2(uint8_t* s,
-                             int pitch,
-                             const uint8_t* blimit,
-                             const uint8_t* limit,
-                             const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_vertical_4)(uint8_t* s,
-                                       int pitch,
-                                       const uint8_t* blimit,
-                                       const uint8_t* limit,
-                                       const uint8_t* thresh);
-
-void aom_lpf_vertical_4_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
-
-void aom_lpf_vertical_8_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-void aom_lpf_vertical_8_sse2(uint8_t* s,
-                             int pitch,
-                             const uint8_t* blimit,
-                             const uint8_t* limit,
-                             const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_vertical_8)(uint8_t* s,
-                                       int pitch,
-                                       const uint8_t* blimit,
-                                       const uint8_t* limit,
-                                       const uint8_t* thresh);
-
-void aom_lpf_vertical_8_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
-
-void aom_paeth_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
-
-void aom_paeth_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
-
-void aom_paeth_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
-
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
-void aom_paeth_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
-
-void aom_paeth_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
-
-void aom_paeth_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
-
-void aom_paeth_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
-
-void aom_paeth_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
-
-void aom_paeth_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
-
-void aom_paeth_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
-
-void aom_scaled_2d_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-void aom_scaled_2d_ssse3(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-RTCD_EXTERN void (*aom_scaled_2d)(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-
-void aom_scaled_avg_2d_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-#define aom_scaled_avg_2d aom_scaled_avg_2d_c
-
-void aom_scaled_avg_horiz_c(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-#define aom_scaled_avg_horiz aom_scaled_avg_horiz_c
-
-void aom_scaled_avg_vert_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_scaled_avg_vert aom_scaled_avg_vert_c
-
-void aom_scaled_horiz_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-#define aom_scaled_horiz aom_scaled_horiz_c
-
-void aom_scaled_vert_c(const uint8_t* src,
-                       ptrdiff_t src_stride,
-                       uint8_t* dst,
-                       ptrdiff_t dst_stride,
-                       const int16_t* filter_x,
-                       int x_step_q4,
-                       const int16_t* filter_y,
-                       int y_step_q4,
-                       int w,
-                       int h);
-#define aom_scaled_vert aom_scaled_vert_c
-
-void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
-
-void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
-
-void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
-
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
-void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
-
-void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
-
-void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
-
-void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
-
-void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
-
-void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
-
-void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
-
-void aom_smooth_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
-
-void aom_smooth_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
-
-void aom_smooth_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
-
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
-void aom_smooth_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
-
-void aom_smooth_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
-
-void aom_smooth_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
-
-void aom_smooth_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
-
-void aom_smooth_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
-
-void aom_smooth_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
-
-void aom_smooth_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
-
-void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
-
-void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
-
-void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
-
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
-void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
-
-void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
-
-void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
-
-void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
-
-void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
-
-void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
-
-void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
-
-void aom_v_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_v_predictor_16x16_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-RTCD_EXTERN void (*aom_v_predictor_16x16)(uint8_t* dst,
-                                          ptrdiff_t y_stride,
-                                          const uint8_t* above,
-                                          const uint8_t* left);
-
-void aom_v_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
-
-void aom_v_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
-
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
-void aom_v_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
-
-void aom_v_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_v_predictor_32x32_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-RTCD_EXTERN void (*aom_v_predictor_32x32)(uint8_t* dst,
-                                          ptrdiff_t y_stride,
-                                          const uint8_t* above,
-                                          const uint8_t* left);
-
-void aom_v_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_v_predictor_4x4_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-RTCD_EXTERN void (*aom_v_predictor_4x4)(uint8_t* dst,
-                                        ptrdiff_t y_stride,
-                                        const uint8_t* above,
-                                        const uint8_t* left);
-
-void aom_v_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
-
-void aom_v_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
-
-void aom_v_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
-
-void aom_v_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_v_predictor_8x8_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-RTCD_EXTERN void (*aom_v_predictor_8x8)(uint8_t* dst,
-                                        ptrdiff_t y_stride,
-                                        const uint8_t* above,
-                                        const uint8_t* left);
-
-void aom_dsp_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-
-  aom_blend_a64_hmask = aom_blend_a64_hmask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_hmask = aom_blend_a64_hmask_sse4_1;
-  aom_blend_a64_mask = aom_blend_a64_mask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_mask = aom_blend_a64_mask_sse4_1;
-  aom_blend_a64_vmask = aom_blend_a64_vmask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_vmask = aom_blend_a64_vmask_sse4_1;
-  aom_convolve8 = aom_convolve8_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8 = aom_convolve8_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8 = aom_convolve8_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8 = aom_convolve8_avx2;
-  aom_convolve8_avg = aom_convolve8_avg_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_avg = aom_convolve8_avg_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg = aom_convolve8_avg_ssse3;
-  aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_ssse3;
-  aom_convolve8_avg_vert = aom_convolve8_avg_vert_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_avg_vert = aom_convolve8_avg_vert_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg_vert = aom_convolve8_avg_vert_ssse3;
-  aom_convolve8_horiz = aom_convolve8_horiz_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_horiz = aom_convolve8_horiz_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_horiz = aom_convolve8_horiz_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8_horiz = aom_convolve8_horiz_avx2;
-  aom_convolve8_vert = aom_convolve8_vert_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_vert = aom_convolve8_vert_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_vert = aom_convolve8_vert_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8_vert = aom_convolve8_vert_avx2;
-  aom_convolve_avg = aom_convolve_avg_c;
-  if (flags & HAS_SSE2)
-    aom_convolve_avg = aom_convolve_avg_sse2;
-  aom_convolve_copy = aom_convolve_copy_c;
-  if (flags & HAS_SSE2)
-    aom_convolve_copy = aom_convolve_copy_sse2;
-  aom_d153_predictor_16x16 = aom_d153_predictor_16x16_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_16x16 = aom_d153_predictor_16x16_ssse3;
-  aom_d153_predictor_32x32 = aom_d153_predictor_32x32_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_32x32 = aom_d153_predictor_32x32_ssse3;
-  aom_d153_predictor_4x4 = aom_d153_predictor_4x4_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_4x4 = aom_d153_predictor_4x4_ssse3;
-  aom_d153_predictor_8x8 = aom_d153_predictor_8x8_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_8x8 = aom_d153_predictor_8x8_ssse3;
-  aom_d63e_predictor_4x4 = aom_d63e_predictor_4x4_c;
-  if (flags & HAS_SSSE3)
-    aom_d63e_predictor_4x4 = aom_d63e_predictor_4x4_ssse3;
-  aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_sse2;
-  aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_sse2;
-  aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_sse2;
-  aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_sse2;
-  aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_sse2;
-  aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_sse2;
-  aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_sse2;
-  aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_sse2;
-  aom_dc_predictor_16x16 = aom_dc_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_dc_predictor_16x16 = aom_dc_predictor_16x16_sse2;
-  aom_dc_predictor_32x32 = aom_dc_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_dc_predictor_32x32 = aom_dc_predictor_32x32_sse2;
-  aom_dc_predictor_4x4 = aom_dc_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_dc_predictor_4x4 = aom_dc_predictor_4x4_sse2;
-  aom_dc_predictor_8x8 = aom_dc_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_dc_predictor_8x8 = aom_dc_predictor_8x8_sse2;
-  aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_sse2;
-  aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_sse2;
-  aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_sse2;
-  aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_sse2;
-  aom_h_predictor_16x16 = aom_h_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_h_predictor_16x16 = aom_h_predictor_16x16_sse2;
-  aom_h_predictor_32x32 = aom_h_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_h_predictor_32x32 = aom_h_predictor_32x32_sse2;
-  aom_h_predictor_4x4 = aom_h_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_h_predictor_4x4 = aom_h_predictor_4x4_sse2;
-  aom_h_predictor_8x8 = aom_h_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_h_predictor_8x8 = aom_h_predictor_8x8_sse2;
-  aom_idct16x16_10_add = aom_idct16x16_10_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct16x16_10_add = aom_idct16x16_10_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_10_add = aom_idct16x16_10_add_avx2;
-  aom_idct16x16_1_add = aom_idct16x16_1_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct16x16_1_add = aom_idct16x16_1_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_1_add = aom_idct16x16_1_add_avx2;
-  aom_idct16x16_256_add = aom_idct16x16_256_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct16x16_256_add = aom_idct16x16_256_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_256_add = aom_idct16x16_256_add_avx2;
-  aom_idct16x16_38_add = aom_idct16x16_38_add_c;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_38_add = aom_idct16x16_38_add_avx2;
-  aom_idct32x32_1024_add = aom_idct32x32_1024_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_avx2;
-  aom_idct32x32_135_add = aom_idct32x32_135_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct32x32_135_add = aom_idct32x32_1024_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_135_add = aom_idct32x32_135_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_135_add = aom_idct32x32_135_add_avx2;
-  aom_idct32x32_1_add = aom_idct32x32_1_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct32x32_1_add = aom_idct32x32_1_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_1_add = aom_idct32x32_1_add_avx2;
-  aom_idct32x32_34_add = aom_idct32x32_34_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_avx2;
-  aom_idct4x4_16_add = aom_idct4x4_16_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct4x4_16_add = aom_idct4x4_16_add_sse2;
-  aom_idct4x4_1_add = aom_idct4x4_1_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct4x4_1_add = aom_idct4x4_1_add_sse2;
-  aom_idct8x8_12_add = aom_idct8x8_12_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct8x8_12_add = aom_idct8x8_12_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct8x8_12_add = aom_idct8x8_12_add_ssse3;
-  aom_idct8x8_1_add = aom_idct8x8_1_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct8x8_1_add = aom_idct8x8_1_add_sse2;
-  aom_idct8x8_64_add = aom_idct8x8_64_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct8x8_64_add = aom_idct8x8_64_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct8x8_64_add = aom_idct8x8_64_add_ssse3;
-  aom_iwht4x4_16_add = aom_iwht4x4_16_add_c;
-  if (flags & HAS_SSE2)
-    aom_iwht4x4_16_add = aom_iwht4x4_16_add_sse2;
-  aom_lpf_horizontal_4 = aom_lpf_horizontal_4_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_horizontal_4 = aom_lpf_horizontal_4_sse2;
-  aom_lpf_horizontal_8 = aom_lpf_horizontal_8_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_horizontal_8 = aom_lpf_horizontal_8_sse2;
-  aom_lpf_horizontal_edge_16 = aom_lpf_horizontal_edge_16_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_horizontal_edge_16 = aom_lpf_horizontal_edge_16_sse2;
-  aom_lpf_horizontal_edge_8 = aom_lpf_horizontal_edge_8_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_horizontal_edge_8 = aom_lpf_horizontal_edge_8_sse2;
-  aom_lpf_vertical_16 = aom_lpf_vertical_16_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_vertical_16 = aom_lpf_vertical_16_sse2;
-  aom_lpf_vertical_4 = aom_lpf_vertical_4_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_vertical_4 = aom_lpf_vertical_4_sse2;
-  aom_lpf_vertical_8 = aom_lpf_vertical_8_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_vertical_8 = aom_lpf_vertical_8_sse2;
-  aom_scaled_2d = aom_scaled_2d_c;
-  if (flags & HAS_SSSE3)
-    aom_scaled_2d = aom_scaled_2d_ssse3;
-  aom_v_predictor_16x16 = aom_v_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_v_predictor_16x16 = aom_v_predictor_16x16_sse2;
-  aom_v_predictor_32x32 = aom_v_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_v_predictor_32x32 = aom_v_predictor_32x32_sse2;
-  aom_v_predictor_4x4 = aom_v_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_v_predictor_4x4 = aom_v_predictor_4x4_sse2;
-  aom_v_predictor_8x8 = aom_v_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_v_predictor_8x8 = aom_v_predictor_8x8_sse2;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/linux/ia32/av1_rtcd.h b/third_party/libaom/source/config/linux/ia32/av1_rtcd.h
deleted file mode 100644
index 63d5838..0000000
--- a/third_party/libaom/source/config/linux/ia32/av1_rtcd.h
+++ /dev/null
@@ -1,1074 +0,0 @@
-#ifndef AV1_RTCD_H_
-#define AV1_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * AV1
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/txfm_common.h"
-#include "av1/common/av1_txfm.h"
-#include "av1/common/common.h"
-#include "av1/common/convolve.h"
-#include "av1/common/enums.h"
-#include "av1/common/filter.h"
-#include "av1/common/odintrin.h"
-#include "av1/common/quant_common.h"
-
-struct macroblockd;
-
-/* Encoder forward decls */
-struct macroblock;
-struct txfm_param;
-struct aom_variance_vtable;
-struct search_site_config;
-struct mv;
-union int_mv;
-struct yv12_buffer_config;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_clpf_block_c(uint8_t* dst,
-                      const uint16_t* src,
-                      int dstride,
-                      int sstride,
-                      int sizex,
-                      int sizey,
-                      unsigned int strength,
-                      unsigned int bd);
-void aom_clpf_block_sse2(uint8_t* dst,
-                         const uint16_t* src,
-                         int dstride,
-                         int sstride,
-                         int sizex,
-                         int sizey,
-                         unsigned int strength,
-                         unsigned int bd);
-void aom_clpf_block_ssse3(uint8_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_block_sse4_1(uint8_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_block)(uint8_t* dst,
-                                   const uint16_t* src,
-                                   int dstride,
-                                   int sstride,
-                                   int sizex,
-                                   int sizey,
-                                   unsigned int strength,
-                                   unsigned int bd);
-
-void aom_clpf_block_hbd_c(uint16_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_block_hbd_sse2(uint16_t* dst,
-                             const uint16_t* src,
-                             int dstride,
-                             int sstride,
-                             int sizex,
-                             int sizey,
-                             unsigned int strength,
-                             unsigned int bd);
-void aom_clpf_block_hbd_ssse3(uint16_t* dst,
-                              const uint16_t* src,
-                              int dstride,
-                              int sstride,
-                              int sizex,
-                              int sizey,
-                              unsigned int strength,
-                              unsigned int bd);
-void aom_clpf_block_hbd_sse4_1(uint16_t* dst,
-                               const uint16_t* src,
-                               int dstride,
-                               int sstride,
-                               int sizex,
-                               int sizey,
-                               unsigned int strength,
-                               unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_block_hbd)(uint16_t* dst,
-                                       const uint16_t* src,
-                                       int dstride,
-                                       int sstride,
-                                       int sizex,
-                                       int sizey,
-                                       unsigned int strength,
-                                       unsigned int bd);
-
-void aom_clpf_hblock_c(uint8_t* dst,
-                       const uint16_t* src,
-                       int dstride,
-                       int sstride,
-                       int sizex,
-                       int sizey,
-                       unsigned int strength,
-                       unsigned int bd);
-void aom_clpf_hblock_sse2(uint8_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_hblock_ssse3(uint8_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-void aom_clpf_hblock_sse4_1(uint8_t* dst,
-                            const uint16_t* src,
-                            int dstride,
-                            int sstride,
-                            int sizex,
-                            int sizey,
-                            unsigned int strength,
-                            unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_hblock)(uint8_t* dst,
-                                    const uint16_t* src,
-                                    int dstride,
-                                    int sstride,
-                                    int sizex,
-                                    int sizey,
-                                    unsigned int strength,
-                                    unsigned int bd);
-
-void aom_clpf_hblock_hbd_c(uint16_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-void aom_clpf_hblock_hbd_sse2(uint16_t* dst,
-                              const uint16_t* src,
-                              int dstride,
-                              int sstride,
-                              int sizex,
-                              int sizey,
-                              unsigned int strength,
-                              unsigned int bd);
-void aom_clpf_hblock_hbd_ssse3(uint16_t* dst,
-                               const uint16_t* src,
-                               int dstride,
-                               int sstride,
-                               int sizex,
-                               int sizey,
-                               unsigned int strength,
-                               unsigned int bd);
-void aom_clpf_hblock_hbd_sse4_1(uint16_t* dst,
-                                const uint16_t* src,
-                                int dstride,
-                                int sstride,
-                                int sizex,
-                                int sizey,
-                                unsigned int strength,
-                                unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_hblock_hbd)(uint16_t* dst,
-                                        const uint16_t* src,
-                                        int dstride,
-                                        int sstride,
-                                        int sizex,
-                                        int sizey,
-                                        unsigned int strength,
-                                        unsigned int bd);
-
-void av1_convolve_2d_c(const uint8_t* src,
-                       int src_stride,
-                       CONV_BUF_TYPE* dst,
-                       int dst_stride,
-                       int w,
-                       int h,
-                       InterpFilterParams* filter_params_x,
-                       InterpFilterParams* filter_params_y,
-                       const int subpel_x_q4,
-                       const int subpel_y_q4,
-                       ConvolveParams* conv_params);
-void av1_convolve_2d_sse2(const uint8_t* src,
-                          int src_stride,
-                          CONV_BUF_TYPE* dst,
-                          int dst_stride,
-                          int w,
-                          int h,
-                          InterpFilterParams* filter_params_x,
-                          InterpFilterParams* filter_params_y,
-                          const int subpel_x_q4,
-                          const int subpel_y_q4,
-                          ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_2d)(const uint8_t* src,
-                                    int src_stride,
-                                    CONV_BUF_TYPE* dst,
-                                    int dst_stride,
-                                    int w,
-                                    int h,
-                                    InterpFilterParams* filter_params_x,
-                                    InterpFilterParams* filter_params_y,
-                                    const int subpel_x_q4,
-                                    const int subpel_y_q4,
-                                    ConvolveParams* conv_params);
-
-void av1_convolve_2d_scale_c(const uint8_t* src,
-                             int src_stride,
-                             CONV_BUF_TYPE* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             InterpFilterParams* filter_params_x,
-                             InterpFilterParams* filter_params_y,
-                             const int subpel_x_qn,
-                             const int x_step_qn,
-                             const int subpel_y_q4,
-                             const int y_step_qn,
-                             ConvolveParams* conv_params);
-#define av1_convolve_2d_scale av1_convolve_2d_scale_c
-
-void av1_convolve_horiz_c(const uint8_t* src,
-                          int src_stride,
-                          uint8_t* dst,
-                          int dst_stride,
-                          int w,
-                          int h,
-                          const InterpFilterParams fp,
-                          const int subpel_x_q4,
-                          int x_step_q4,
-                          ConvolveParams* conv_params);
-void av1_convolve_horiz_ssse3(const uint8_t* src,
-                              int src_stride,
-                              uint8_t* dst,
-                              int dst_stride,
-                              int w,
-                              int h,
-                              const InterpFilterParams fp,
-                              const int subpel_x_q4,
-                              int x_step_q4,
-                              ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_horiz)(const uint8_t* src,
-                                       int src_stride,
-                                       uint8_t* dst,
-                                       int dst_stride,
-                                       int w,
-                                       int h,
-                                       const InterpFilterParams fp,
-                                       const int subpel_x_q4,
-                                       int x_step_q4,
-                                       ConvolveParams* conv_params);
-
-void av1_convolve_rounding_c(const int32_t* src,
-                             int src_stride,
-                             uint8_t* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             int bits);
-void av1_convolve_rounding_avx2(const int32_t* src,
-                                int src_stride,
-                                uint8_t* dst,
-                                int dst_stride,
-                                int w,
-                                int h,
-                                int bits);
-RTCD_EXTERN void (*av1_convolve_rounding)(const int32_t* src,
-                                          int src_stride,
-                                          uint8_t* dst,
-                                          int dst_stride,
-                                          int w,
-                                          int h,
-                                          int bits);
-
-void av1_convolve_vert_c(const uint8_t* src,
-                         int src_stride,
-                         uint8_t* dst,
-                         int dst_stride,
-                         int w,
-                         int h,
-                         const InterpFilterParams fp,
-                         const int subpel_x_q4,
-                         int x_step_q4,
-                         ConvolveParams* conv_params);
-void av1_convolve_vert_ssse3(const uint8_t* src,
-                             int src_stride,
-                             uint8_t* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             const InterpFilterParams fp,
-                             const int subpel_x_q4,
-                             int x_step_q4,
-                             ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_vert)(const uint8_t* src,
-                                      int src_stride,
-                                      uint8_t* dst,
-                                      int dst_stride,
-                                      int w,
-                                      int h,
-                                      const InterpFilterParams fp,
-                                      const int subpel_x_q4,
-                                      int x_step_q4,
-                                      ConvolveParams* conv_params);
-
-void av1_iht16x16_256_add_c(const tran_low_t* input,
-                            uint8_t* output,
-                            int pitch,
-                            const struct txfm_param* param);
-void av1_iht16x16_256_add_sse2(const tran_low_t* input,
-                               uint8_t* output,
-                               int pitch,
-                               const struct txfm_param* param);
-void av1_iht16x16_256_add_avx2(const tran_low_t* input,
-                               uint8_t* output,
-                               int pitch,
-                               const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht16x16_256_add)(const tran_low_t* input,
-                                         uint8_t* output,
-                                         int pitch,
-                                         const struct txfm_param* param);
-
-void av1_iht16x32_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-void av1_iht16x32_512_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride,
-                               const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht16x32_512_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride,
-                                         const struct txfm_param* param);
-
-void av1_iht16x4_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht16x4_64_add av1_iht16x4_64_add_c
-
-void av1_iht16x8_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-void av1_iht16x8_128_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride,
-                              const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht16x8_128_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride,
-                                        const struct txfm_param* param);
-
-void av1_iht32x16_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-void av1_iht32x16_512_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride,
-                               const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht32x16_512_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride,
-                                         const struct txfm_param* param);
-
-void av1_iht32x32_1024_add_c(const tran_low_t* input,
-                             uint8_t* output,
-                             int pitch,
-                             const struct txfm_param* param);
-#define av1_iht32x32_1024_add av1_iht32x32_1024_add_c
-
-void av1_iht32x8_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht32x8_256_add av1_iht32x8_256_add_c
-
-void av1_iht4x16_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht4x16_64_add av1_iht4x16_64_add_c
-
-void av1_iht4x4_16_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht4x4_16_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht4x4_16_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride,
-                                      const struct txfm_param* param);
-
-void av1_iht4x8_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht4x8_32_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht4x8_32_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride,
-                                      const struct txfm_param* param);
-
-void av1_iht8x16_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-void av1_iht8x16_128_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride,
-                              const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht8x16_128_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride,
-                                        const struct txfm_param* param);
-
-void av1_iht8x32_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht8x32_256_add av1_iht8x32_256_add_c
-
-void av1_iht8x4_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht8x4_32_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht8x4_32_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride,
-                                      const struct txfm_param* param);
-
-void av1_iht8x8_64_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht8x8_64_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht8x8_64_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride,
-                                      const struct txfm_param* param);
-
-void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-void av1_inv_txfm2d_add_16x16_sse4_1(const int32_t* input,
-                                     uint16_t* output,
-                                     int stride,
-                                     int tx_type,
-                                     int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_16x16)(const int32_t* input,
-                                             uint16_t* output,
-                                             int stride,
-                                             int tx_type,
-                                             int bd);
-
-void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
-
-void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
-
-void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
-
-void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-void av1_inv_txfm2d_add_32x32_avx2(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_32x32)(const int32_t* input,
-                                             uint16_t* output,
-                                             int stride,
-                                             int tx_type,
-                                             int bd);
-
-void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-void av1_inv_txfm2d_add_4x4_sse4_1(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_4x4)(const int32_t* input,
-                                           uint16_t* output,
-                                           int stride,
-                                           int tx_type,
-                                           int bd);
-
-void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
-
-void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
-
-void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
-
-void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
-
-void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-void av1_inv_txfm2d_add_8x8_sse4_1(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_8x8)(const int32_t* input,
-                                           uint16_t* output,
-                                           int stride,
-                                           int tx_type,
-                                           int bd);
-
-void av1_lowbd_convolve_init_c(void);
-void av1_lowbd_convolve_init_ssse3(void);
-RTCD_EXTERN void (*av1_lowbd_convolve_init)(void);
-
-void av1_warp_affine_c(const int32_t* mat,
-                       const uint8_t* ref,
-                       int width,
-                       int height,
-                       int stride,
-                       uint8_t* pred,
-                       int p_col,
-                       int p_row,
-                       int p_width,
-                       int p_height,
-                       int p_stride,
-                       int subsampling_x,
-                       int subsampling_y,
-                       ConvolveParams* conv_params,
-                       int16_t alpha,
-                       int16_t beta,
-                       int16_t gamma,
-                       int16_t delta);
-void av1_warp_affine_sse2(const int32_t* mat,
-                          const uint8_t* ref,
-                          int width,
-                          int height,
-                          int stride,
-                          uint8_t* pred,
-                          int p_col,
-                          int p_row,
-                          int p_width,
-                          int p_height,
-                          int p_stride,
-                          int subsampling_x,
-                          int subsampling_y,
-                          ConvolveParams* conv_params,
-                          int16_t alpha,
-                          int16_t beta,
-                          int16_t gamma,
-                          int16_t delta);
-void av1_warp_affine_ssse3(const int32_t* mat,
-                           const uint8_t* ref,
-                           int width,
-                           int height,
-                           int stride,
-                           uint8_t* pred,
-                           int p_col,
-                           int p_row,
-                           int p_width,
-                           int p_height,
-                           int p_stride,
-                           int subsampling_x,
-                           int subsampling_y,
-                           ConvolveParams* conv_params,
-                           int16_t alpha,
-                           int16_t beta,
-                           int16_t gamma,
-                           int16_t delta);
-RTCD_EXTERN void (*av1_warp_affine)(const int32_t* mat,
-                                    const uint8_t* ref,
-                                    int width,
-                                    int height,
-                                    int stride,
-                                    uint8_t* pred,
-                                    int p_col,
-                                    int p_row,
-                                    int p_width,
-                                    int p_height,
-                                    int p_stride,
-                                    int subsampling_x,
-                                    int subsampling_y,
-                                    ConvolveParams* conv_params,
-                                    int16_t alpha,
-                                    int16_t beta,
-                                    int16_t gamma,
-                                    int16_t delta);
-
-void cdef_direction_4x4_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-void cdef_direction_4x4_sse2(uint16_t* y,
-                             int ystride,
-                             const uint16_t* in,
-                             int threshold,
-                             int dir,
-                             int damping);
-void cdef_direction_4x4_ssse3(uint16_t* y,
-                              int ystride,
-                              const uint16_t* in,
-                              int threshold,
-                              int dir,
-                              int damping);
-void cdef_direction_4x4_sse4_1(uint16_t* y,
-                               int ystride,
-                               const uint16_t* in,
-                               int threshold,
-                               int dir,
-                               int damping);
-RTCD_EXTERN void (*cdef_direction_4x4)(uint16_t* y,
-                                       int ystride,
-                                       const uint16_t* in,
-                                       int threshold,
-                                       int dir,
-                                       int damping);
-
-void cdef_direction_8x8_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-void cdef_direction_8x8_sse2(uint16_t* y,
-                             int ystride,
-                             const uint16_t* in,
-                             int threshold,
-                             int dir,
-                             int damping);
-void cdef_direction_8x8_ssse3(uint16_t* y,
-                              int ystride,
-                              const uint16_t* in,
-                              int threshold,
-                              int dir,
-                              int damping);
-void cdef_direction_8x8_sse4_1(uint16_t* y,
-                               int ystride,
-                               const uint16_t* in,
-                               int threshold,
-                               int dir,
-                               int damping);
-RTCD_EXTERN void (*cdef_direction_8x8)(uint16_t* y,
-                                       int ystride,
-                                       const uint16_t* in,
-                                       int threshold,
-                                       int dir,
-                                       int damping);
-
-int cdef_find_dir_c(const uint16_t* img,
-                    int stride,
-                    int32_t* var,
-                    int coeff_shift);
-int cdef_find_dir_sse2(const uint16_t* img,
-                       int stride,
-                       int32_t* var,
-                       int coeff_shift);
-int cdef_find_dir_ssse3(const uint16_t* img,
-                        int stride,
-                        int32_t* var,
-                        int coeff_shift);
-int cdef_find_dir_sse4_1(const uint16_t* img,
-                         int stride,
-                         int32_t* var,
-                         int coeff_shift);
-RTCD_EXTERN int (*cdef_find_dir)(const uint16_t* img,
-                                 int stride,
-                                 int32_t* var,
-                                 int coeff_shift);
-
-void copy_4x4_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-void copy_4x4_16bit_to_16bit_sse2(uint16_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_4x4_16bit_to_16bit_ssse3(uint16_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-void copy_4x4_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride);
-RTCD_EXTERN void (*copy_4x4_16bit_to_16bit)(uint16_t* dst,
-                                            int dstride,
-                                            const uint16_t* src,
-                                            int sstride);
-
-void copy_4x4_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-void copy_4x4_16bit_to_8bit_sse2(uint8_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride);
-void copy_4x4_16bit_to_8bit_ssse3(uint8_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_4x4_16bit_to_8bit_sse4_1(uint8_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-RTCD_EXTERN void (*copy_4x4_16bit_to_8bit)(uint8_t* dst,
-                                           int dstride,
-                                           const uint16_t* src,
-                                           int sstride);
-
-void copy_8x8_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-void copy_8x8_16bit_to_16bit_sse2(uint16_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_8x8_16bit_to_16bit_ssse3(uint16_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-void copy_8x8_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride);
-RTCD_EXTERN void (*copy_8x8_16bit_to_16bit)(uint16_t* dst,
-                                            int dstride,
-                                            const uint16_t* src,
-                                            int sstride);
-
-void copy_8x8_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-void copy_8x8_16bit_to_8bit_sse2(uint8_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride);
-void copy_8x8_16bit_to_8bit_ssse3(uint8_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_8x8_16bit_to_8bit_sse4_1(uint8_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-RTCD_EXTERN void (*copy_8x8_16bit_to_8bit)(uint8_t* dst,
-                                           int dstride,
-                                           const uint16_t* src,
-                                           int sstride);
-
-void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride,
-                                 int v,
-                                 int h);
-void copy_rect8_16bit_to_16bit_sse2(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride,
-                                    int v,
-                                    int h);
-void copy_rect8_16bit_to_16bit_ssse3(uint16_t* dst,
-                                     int dstride,
-                                     const uint16_t* src,
-                                     int sstride,
-                                     int v,
-                                     int h);
-void copy_rect8_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                      int dstride,
-                                      const uint16_t* src,
-                                      int sstride,
-                                      int v,
-                                      int h);
-RTCD_EXTERN void (*copy_rect8_16bit_to_16bit)(uint16_t* dst,
-                                              int dstride,
-                                              const uint16_t* src,
-                                              int sstride,
-                                              int v,
-                                              int h);
-
-void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
-                                int dstride,
-                                const uint8_t* src,
-                                int sstride,
-                                int v,
-                                int h);
-void copy_rect8_8bit_to_16bit_sse2(uint16_t* dst,
-                                   int dstride,
-                                   const uint8_t* src,
-                                   int sstride,
-                                   int v,
-                                   int h);
-void copy_rect8_8bit_to_16bit_ssse3(uint16_t* dst,
-                                    int dstride,
-                                    const uint8_t* src,
-                                    int sstride,
-                                    int v,
-                                    int h);
-void copy_rect8_8bit_to_16bit_sse4_1(uint16_t* dst,
-                                     int dstride,
-                                     const uint8_t* src,
-                                     int sstride,
-                                     int v,
-                                     int h);
-RTCD_EXTERN void (*copy_rect8_8bit_to_16bit)(uint16_t* dst,
-                                             int dstride,
-                                             const uint8_t* src,
-                                             int sstride,
-                                             int v,
-                                             int h);
-
-void av1_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-
-  aom_clpf_block = aom_clpf_block_c;
-  if (flags & HAS_SSE2)
-    aom_clpf_block = aom_clpf_block_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_block = aom_clpf_block_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_block = aom_clpf_block_sse4_1;
-  aom_clpf_block_hbd = aom_clpf_block_hbd_c;
-  if (flags & HAS_SSE2)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_sse4_1;
-  aom_clpf_hblock = aom_clpf_hblock_c;
-  if (flags & HAS_SSE2)
-    aom_clpf_hblock = aom_clpf_hblock_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_hblock = aom_clpf_hblock_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_hblock = aom_clpf_hblock_sse4_1;
-  aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_c;
-  if (flags & HAS_SSE2)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_sse4_1;
-  av1_convolve_2d = av1_convolve_2d_c;
-  if (flags & HAS_SSE2)
-    av1_convolve_2d = av1_convolve_2d_sse2;
-  av1_convolve_horiz = av1_convolve_horiz_c;
-  if (flags & HAS_SSSE3)
-    av1_convolve_horiz = av1_convolve_horiz_ssse3;
-  av1_convolve_rounding = av1_convolve_rounding_c;
-  if (flags & HAS_AVX2)
-    av1_convolve_rounding = av1_convolve_rounding_avx2;
-  av1_convolve_vert = av1_convolve_vert_c;
-  if (flags & HAS_SSSE3)
-    av1_convolve_vert = av1_convolve_vert_ssse3;
-  av1_iht16x16_256_add = av1_iht16x16_256_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht16x16_256_add = av1_iht16x16_256_add_sse2;
-  if (flags & HAS_AVX2)
-    av1_iht16x16_256_add = av1_iht16x16_256_add_avx2;
-  av1_iht16x32_512_add = av1_iht16x32_512_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht16x32_512_add = av1_iht16x32_512_add_sse2;
-  av1_iht16x8_128_add = av1_iht16x8_128_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht16x8_128_add = av1_iht16x8_128_add_sse2;
-  av1_iht32x16_512_add = av1_iht32x16_512_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht32x16_512_add = av1_iht32x16_512_add_sse2;
-  av1_iht4x4_16_add = av1_iht4x4_16_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht4x4_16_add = av1_iht4x4_16_add_sse2;
-  av1_iht4x8_32_add = av1_iht4x8_32_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht4x8_32_add = av1_iht4x8_32_add_sse2;
-  av1_iht8x16_128_add = av1_iht8x16_128_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht8x16_128_add = av1_iht8x16_128_add_sse2;
-  av1_iht8x4_32_add = av1_iht8x4_32_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht8x4_32_add = av1_iht8x4_32_add_sse2;
-  av1_iht8x8_64_add = av1_iht8x8_64_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht8x8_64_add = av1_iht8x8_64_add_sse2;
-  av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_sse4_1;
-  av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_c;
-  if (flags & HAS_AVX2)
-    av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_avx2;
-  av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_sse4_1;
-  av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_sse4_1;
-  av1_lowbd_convolve_init = av1_lowbd_convolve_init_c;
-  if (flags & HAS_SSSE3)
-    av1_lowbd_convolve_init = av1_lowbd_convolve_init_ssse3;
-  av1_warp_affine = av1_warp_affine_c;
-  if (flags & HAS_SSE2)
-    av1_warp_affine = av1_warp_affine_sse2;
-  if (flags & HAS_SSSE3)
-    av1_warp_affine = av1_warp_affine_ssse3;
-  cdef_direction_4x4 = cdef_direction_4x4_c;
-  if (flags & HAS_SSE2)
-    cdef_direction_4x4 = cdef_direction_4x4_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_direction_4x4 = cdef_direction_4x4_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_direction_4x4 = cdef_direction_4x4_sse4_1;
-  cdef_direction_8x8 = cdef_direction_8x8_c;
-  if (flags & HAS_SSE2)
-    cdef_direction_8x8 = cdef_direction_8x8_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_direction_8x8 = cdef_direction_8x8_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_direction_8x8 = cdef_direction_8x8_sse4_1;
-  cdef_find_dir = cdef_find_dir_c;
-  if (flags & HAS_SSE2)
-    cdef_find_dir = cdef_find_dir_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_find_dir = cdef_find_dir_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_find_dir = cdef_find_dir_sse4_1;
-  copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_c;
-  if (flags & HAS_SSE2)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_sse4_1;
-  copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_c;
-  if (flags & HAS_SSE2)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_sse4_1;
-  copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_c;
-  if (flags & HAS_SSE2)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_sse4_1;
-  copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_c;
-  if (flags & HAS_SSE2)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_sse4_1;
-  copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_c;
-  if (flags & HAS_SSE2)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse4_1;
-  copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_c;
-  if (flags & HAS_SSE2)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse4_1;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/linux/ia32/config/aom_config.asm b/third_party/libaom/source/config/linux/ia32/config/aom_config.asm
new file mode 100644
index 0000000..fda6e99
--- /dev/null
+++ b/third_party/libaom/source/config/linux/ia32/config/aom_config.asm
@@ -0,0 +1,63 @@
+%define ARCH_ARM 0
+%define ARCH_MIPS 0
+%define ARCH_PPC 0
+%define ARCH_X86 1
+%define ARCH_X86_64 0
+%define CONFIG_ACCOUNTING 0
+%define CONFIG_ANALYZER 0
+%define CONFIG_AV1_DECODER 1
+%define CONFIG_AV1_ENCODER 0
+%define CONFIG_BIG_ENDIAN 0
+%define CONFIG_BITSTREAM_DEBUG 0
+%define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+%define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+%define CONFIG_COLLECT_RD_STATS 0
+%define CONFIG_DEBUG 0
+%define CONFIG_DECODE_PERF_TESTS 0
+%define CONFIG_DIST_8X8 1
+%define CONFIG_ENCODE_PERF_TESTS 0
+%define CONFIG_ENTROPY_STATS 0
+%define CONFIG_FILEOPTIONS 1
+%define CONFIG_FP_MB_STATS 0
+%define CONFIG_GCC 1
+%define CONFIG_GCOV 0
+%define CONFIG_GPROF 0
+%define CONFIG_INSPECTION 0
+%define CONFIG_INTERNAL_STATS 0
+%define CONFIG_INTER_STATS_ONLY 0
+%define CONFIG_LIBYUV 1
+%define CONFIG_LOWBITDEPTH 1
+%define CONFIG_MISMATCH_DEBUG 0
+%define CONFIG_MSVS 0
+%define CONFIG_MULTITHREAD 1
+%define CONFIG_OS_SUPPORT 1
+%define CONFIG_PIC 0
+%define CONFIG_RD_DEBUG 0
+%define CONFIG_RUNTIME_CPU_DETECT 1
+%define CONFIG_SHARED 0
+%define CONFIG_SIZE_LIMIT 1
+%define CONFIG_SPATIAL_RESAMPLING 1
+%define CONFIG_STATIC 1
+%define CONFIG_UNIT_TESTS 1
+%define CONFIG_WEBM_IO 1
+%define DECODE_HEIGHT_LIMIT 16384
+%define DECODE_WIDTH_LIMIT 16384
+%define HAVE_AVX 1
+%define HAVE_AVX2 1
+%define HAVE_DSPR2 0
+%define HAVE_FEXCEPT 1
+%define HAVE_MIPS32 0
+%define HAVE_MIPS64 0
+%define HAVE_MMX 1
+%define HAVE_MSA 0
+%define HAVE_NEON 0
+%define HAVE_PTHREAD_H 1
+%define HAVE_SSE 1
+%define HAVE_SSE2 1
+%define HAVE_SSE3 1
+%define HAVE_SSE4_1 1
+%define HAVE_SSE4_2 1
+%define HAVE_SSSE3 1
+%define HAVE_UNISTD_H 1
+%define HAVE_VSX 0
+%define HAVE_WXWIDGETS 0
diff --git a/third_party/libaom/source/config/linux/ia32/config/aom_config.c b/third_party/libaom/source/config/linux/ia32/config/aom_config.c
new file mode 100644
index 0000000..8a54b63
--- /dev/null
+++ b/third_party/libaom/source/config/linux/ia32/config/aom_config.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2016, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#include "aom/aom_codec.h"
+static const char* const cfg = "-G \"Unix Makefiles\" -DCMAKE_TOOLCHAIN_FILE=\"/usr/local/google/home/johannkoenig/chromium/chromium/src/third_party/libaom/source/libaom/build/cmake/toolchains/x86-linux.cmake\" -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=1 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=16384 -DDECODE_WIDTH_LIMIT=16384";
+const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/ia32/config/aom_config.h b/third_party/libaom/source/config/linux/ia32/config/aom_config.h
new file mode 100644
index 0000000..782b72e
--- /dev/null
+++ b/third_party/libaom/source/config/linux/ia32/config/aom_config.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#ifndef AOM_CONFIG_H_
+#define AOM_CONFIG_H_
+#define ARCH_ARM 0
+#define ARCH_MIPS 0
+#define ARCH_PPC 0
+#define ARCH_X86 1
+#define ARCH_X86_64 0
+#define CONFIG_ACCOUNTING 0
+#define CONFIG_ANALYZER 0
+#define CONFIG_AV1_DECODER 1
+#define CONFIG_AV1_ENCODER 0
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+#define CONFIG_COLLECT_RD_STATS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_DIST_8X8 1
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_ENTROPY_STATS 0
+#define CONFIG_FILEOPTIONS 1
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_GCC 1
+#define CONFIG_GCOV 0
+#define CONFIG_GPROF 0
+#define CONFIG_INSPECTION 0
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_INTER_STATS_ONLY 0
+#define CONFIG_LIBYUV 1
+#define CONFIG_LOWBITDEPTH 1
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_MSVS 0
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_PIC 0
+#define CONFIG_RD_DEBUG 0
+#define CONFIG_RUNTIME_CPU_DETECT 1
+#define CONFIG_SHARED 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_STATIC 1
+#define CONFIG_UNIT_TESTS 1
+#define CONFIG_WEBM_IO 1
+#define DECODE_HEIGHT_LIMIT 16384
+#define DECODE_WIDTH_LIMIT 16384
+#define HAVE_AVX 1
+#define HAVE_AVX2 1
+#define HAVE_DSPR2 0
+#define HAVE_FEXCEPT 1
+#define HAVE_MIPS32 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 1
+#define HAVE_MSA 0
+#define HAVE_NEON 0
+#define HAVE_PTHREAD_H 1
+#define HAVE_SSE 1
+#define HAVE_SSE2 1
+#define HAVE_SSE3 1
+#define HAVE_SSE4_1 1
+#define HAVE_SSE4_2 1
+#define HAVE_SSSE3 1
+#define HAVE_UNISTD_H 1
+#define HAVE_VSX 0
+#define HAVE_WXWIDGETS 0
+#define INLINE inline
+#endif /* AOM_CONFIG_H_ */
diff --git a/third_party/libaom/source/config/linux/ia32/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/ia32/config/aom_dsp_rtcd.h
new file mode 100644
index 0000000..492e840
--- /dev/null
+++ b/third_party/libaom/source/config/linux/ia32/config/aom_dsp_rtcd.h
@@ -0,0 +1,6947 @@
+// This file is generated. Do not edit.
+#ifndef AOM_DSP_RTCD_H_
+#define AOM_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/aom_dsp_common.h"
+#include "av1/common/blockd.h"
+#include "av1/common/enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void aom_blend_a64_hmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+void aom_blend_a64_hmask_sse4_1(uint8_t* dst,
+                                uint32_t dst_stride,
+                                const uint8_t* src0,
+                                uint32_t src0_stride,
+                                const uint8_t* src1,
+                                uint32_t src1_stride,
+                                const uint8_t* mask,
+                                int w,
+                                int h);
+RTCD_EXTERN void (*aom_blend_a64_hmask)(uint8_t* dst,
+                                        uint32_t dst_stride,
+                                        const uint8_t* src0,
+                                        uint32_t src0_stride,
+                                        const uint8_t* src1,
+                                        uint32_t src1_stride,
+                                        const uint8_t* mask,
+                                        int w,
+                                        int h);
+
+void aom_blend_a64_mask_c(uint8_t* dst,
+                          uint32_t dst_stride,
+                          const uint8_t* src0,
+                          uint32_t src0_stride,
+                          const uint8_t* src1,
+                          uint32_t src1_stride,
+                          const uint8_t* mask,
+                          uint32_t mask_stride,
+                          int w,
+                          int h,
+                          int subx,
+                          int suby);
+void aom_blend_a64_mask_sse4_1(uint8_t* dst,
+                               uint32_t dst_stride,
+                               const uint8_t* src0,
+                               uint32_t src0_stride,
+                               const uint8_t* src1,
+                               uint32_t src1_stride,
+                               const uint8_t* mask,
+                               uint32_t mask_stride,
+                               int w,
+                               int h,
+                               int subx,
+                               int suby);
+RTCD_EXTERN void (*aom_blend_a64_mask)(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       uint32_t mask_stride,
+                                       int w,
+                                       int h,
+                                       int subx,
+                                       int suby);
+
+void aom_blend_a64_vmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+void aom_blend_a64_vmask_sse4_1(uint8_t* dst,
+                                uint32_t dst_stride,
+                                const uint8_t* src0,
+                                uint32_t src0_stride,
+                                const uint8_t* src1,
+                                uint32_t src1_stride,
+                                const uint8_t* mask,
+                                int w,
+                                int h);
+RTCD_EXTERN void (*aom_blend_a64_vmask)(uint8_t* dst,
+                                        uint32_t dst_stride,
+                                        const uint8_t* src0,
+                                        uint32_t src0_stride,
+                                        const uint8_t* src1,
+                                        uint32_t src1_stride,
+                                        const uint8_t* mask,
+                                        int w,
+                                        int h);
+
+void aom_convolve8_horiz_c(const uint8_t* src,
+                           ptrdiff_t src_stride,
+                           uint8_t* dst,
+                           ptrdiff_t dst_stride,
+                           const int16_t* filter_x,
+                           int x_step_q4,
+                           const int16_t* filter_y,
+                           int y_step_q4,
+                           int w,
+                           int h);
+void aom_convolve8_horiz_sse2(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+void aom_convolve8_horiz_ssse3(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h);
+void aom_convolve8_horiz_avx2(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+RTCD_EXTERN void (*aom_convolve8_horiz)(const uint8_t* src,
+                                        ptrdiff_t src_stride,
+                                        uint8_t* dst,
+                                        ptrdiff_t dst_stride,
+                                        const int16_t* filter_x,
+                                        int x_step_q4,
+                                        const int16_t* filter_y,
+                                        int y_step_q4,
+                                        int w,
+                                        int h);
+
+void aom_convolve8_vert_c(const uint8_t* src,
+                          ptrdiff_t src_stride,
+                          uint8_t* dst,
+                          ptrdiff_t dst_stride,
+                          const int16_t* filter_x,
+                          int x_step_q4,
+                          const int16_t* filter_y,
+                          int y_step_q4,
+                          int w,
+                          int h);
+void aom_convolve8_vert_sse2(const uint8_t* src,
+                             ptrdiff_t src_stride,
+                             uint8_t* dst,
+                             ptrdiff_t dst_stride,
+                             const int16_t* filter_x,
+                             int x_step_q4,
+                             const int16_t* filter_y,
+                             int y_step_q4,
+                             int w,
+                             int h);
+void aom_convolve8_vert_ssse3(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+void aom_convolve8_vert_avx2(const uint8_t* src,
+                             ptrdiff_t src_stride,
+                             uint8_t* dst,
+                             ptrdiff_t dst_stride,
+                             const int16_t* filter_x,
+                             int x_step_q4,
+                             const int16_t* filter_y,
+                             int y_step_q4,
+                             int w,
+                             int h);
+RTCD_EXTERN void (*aom_convolve8_vert)(const uint8_t* src,
+                                       ptrdiff_t src_stride,
+                                       uint8_t* dst,
+                                       ptrdiff_t dst_stride,
+                                       const int16_t* filter_x,
+                                       int x_step_q4,
+                                       const int16_t* filter_y,
+                                       int y_step_q4,
+                                       int w,
+                                       int h);
+
+void aom_convolve_copy_c(const uint8_t* src,
+                         ptrdiff_t src_stride,
+                         uint8_t* dst,
+                         ptrdiff_t dst_stride,
+                         const int16_t* filter_x,
+                         int x_step_q4,
+                         const int16_t* filter_y,
+                         int y_step_q4,
+                         int w,
+                         int h);
+void aom_convolve_copy_sse2(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h);
+RTCD_EXTERN void (*aom_convolve_copy)(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h);
+
+void aom_dc_128_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_16x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_16x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
+
+void aom_dc_128_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_32x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_4x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_4x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_128_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_4x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_128_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_8x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_8x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_8x32_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_8x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_8x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_128_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_left_predictor_16x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_16x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_16x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_16x4_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_16x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_16x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_16x8_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_2x2_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
+
+void aom_dc_left_predictor_32x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x16_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x32_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x64_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_32x8_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_4x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_4x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_4x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_4x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_4x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_left_predictor_4x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_4x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_left_predictor_64x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x16_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_64x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x32_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_64x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x64_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_8x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_8x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_8x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_8x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_8x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_8x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_8x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_8x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_left_predictor_8x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_8x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_predictor_16x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_16x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_16x4_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_16x4_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x4)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_16x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_16x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_16x8_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x8)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_2x2_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
+
+void aom_dc_predictor_32x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x16_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x32_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x64_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_32x8_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x8)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_4x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_4x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_4x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_4x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_4x4)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_predictor_4x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_4x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_predictor_64x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x16_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_64x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x32_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_64x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x64_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_8x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_8x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_8x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_8x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_8x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_8x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_8x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_8x4)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_predictor_8x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_8x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_top_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_16x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_16x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
+
+void aom_dc_top_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_32x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_4x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_4x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_top_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_4x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_top_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_8x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_8x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_8x32_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_8x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_8x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_top_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_h_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_16x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x4)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_16x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
+
+void aom_h_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_h_predictor_32x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_32x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_4x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_4x16)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_4x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_h_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_4x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_h_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_64x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_64x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_64x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_8x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_8x16)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_8x32_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_8x32)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_8x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_h_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_8x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_highbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                     uint32_t dst_stride,
+                                     const CONV_BUF_TYPE* src0,
+                                     uint32_t src0_stride,
+                                     const CONV_BUF_TYPE* src1,
+                                     uint32_t src1_stride,
+                                     const uint8_t* mask,
+                                     uint32_t mask_stride,
+                                     int w,
+                                     int h,
+                                     int subx,
+                                     int suby,
+                                     ConvolveParams* conv_params,
+                                     const int bd);
+#define aom_highbd_blend_a64_d16_mask aom_highbd_blend_a64_d16_mask_c
+
+void aom_highbd_blend_a64_hmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+void aom_highbd_blend_a64_hmask_sse4_1(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       int w,
+                                       int h,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_hmask)(uint8_t* dst,
+                                               uint32_t dst_stride,
+                                               const uint8_t* src0,
+                                               uint32_t src0_stride,
+                                               const uint8_t* src1,
+                                               uint32_t src1_stride,
+                                               const uint8_t* mask,
+                                               int w,
+                                               int h,
+                                               int bd);
+
+void aom_highbd_blend_a64_mask_c(uint8_t* dst,
+                                 uint32_t dst_stride,
+                                 const uint8_t* src0,
+                                 uint32_t src0_stride,
+                                 const uint8_t* src1,
+                                 uint32_t src1_stride,
+                                 const uint8_t* mask,
+                                 uint32_t mask_stride,
+                                 int w,
+                                 int h,
+                                 int subx,
+                                 int suby,
+                                 int bd);
+void aom_highbd_blend_a64_mask_sse4_1(uint8_t* dst,
+                                      uint32_t dst_stride,
+                                      const uint8_t* src0,
+                                      uint32_t src0_stride,
+                                      const uint8_t* src1,
+                                      uint32_t src1_stride,
+                                      const uint8_t* mask,
+                                      uint32_t mask_stride,
+                                      int w,
+                                      int h,
+                                      int subx,
+                                      int suby,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_mask)(uint8_t* dst,
+                                              uint32_t dst_stride,
+                                              const uint8_t* src0,
+                                              uint32_t src0_stride,
+                                              const uint8_t* src1,
+                                              uint32_t src1_stride,
+                                              const uint8_t* mask,
+                                              uint32_t mask_stride,
+                                              int w,
+                                              int h,
+                                              int subx,
+                                              int suby,
+                                              int bd);
+
+void aom_highbd_blend_a64_vmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+void aom_highbd_blend_a64_vmask_sse4_1(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       int w,
+                                       int h,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_vmask)(uint8_t* dst,
+                                               uint32_t dst_stride,
+                                               const uint8_t* src0,
+                                               uint32_t src0_stride,
+                                               const uint8_t* src1,
+                                               uint32_t src1_stride,
+                                               const uint8_t* mask,
+                                               int w,
+                                               int h,
+                                               int bd);
+
+void aom_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+void aom_highbd_convolve8_horiz_avx2(const uint8_t* src,
+                                     ptrdiff_t src_stride,
+                                     uint8_t* dst,
+                                     ptrdiff_t dst_stride,
+                                     const int16_t* filter_x,
+                                     int x_step_q4,
+                                     const int16_t* filter_y,
+                                     int y_step_q4,
+                                     int w,
+                                     int h,
+                                     int bps);
+RTCD_EXTERN void (*aom_highbd_convolve8_horiz)(const uint8_t* src,
+                                               ptrdiff_t src_stride,
+                                               uint8_t* dst,
+                                               ptrdiff_t dst_stride,
+                                               const int16_t* filter_x,
+                                               int x_step_q4,
+                                               const int16_t* filter_y,
+                                               int y_step_q4,
+                                               int w,
+                                               int h,
+                                               int bps);
+
+void aom_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+void aom_highbd_convolve8_vert_avx2(const uint8_t* src,
+                                    ptrdiff_t src_stride,
+                                    uint8_t* dst,
+                                    ptrdiff_t dst_stride,
+                                    const int16_t* filter_x,
+                                    int x_step_q4,
+                                    const int16_t* filter_y,
+                                    int y_step_q4,
+                                    int w,
+                                    int h,
+                                    int bps);
+RTCD_EXTERN void (*aom_highbd_convolve8_vert)(const uint8_t* src,
+                                              ptrdiff_t src_stride,
+                                              uint8_t* dst,
+                                              ptrdiff_t dst_stride,
+                                              const int16_t* filter_x,
+                                              int x_step_q4,
+                                              const int16_t* filter_y,
+                                              int y_step_q4,
+                                              int w,
+                                              int h,
+                                              int bps);
+
+void aom_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+void aom_highbd_convolve_copy_sse2(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   int bps);
+void aom_highbd_convolve_copy_avx2(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   int bps);
+RTCD_EXTERN void (*aom_highbd_convolve_copy)(const uint8_t* src,
+                                             ptrdiff_t src_stride,
+                                             uint8_t* dst,
+                                             ptrdiff_t dst_stride,
+                                             const int16_t* filter_x,
+                                             int x_step_q4,
+                                             const int16_t* filter_y,
+                                             int y_step_q4,
+                                             int w,
+                                             int h,
+                                             int bps);
+
+void aom_highbd_dc_128_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_16x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_16x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_128_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_16x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_16x32)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_128_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x4 aom_highbd_dc_128_predictor_16x4_c
+
+void aom_highbd_dc_128_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x64 aom_highbd_dc_128_predictor_16x64_c
+
+void aom_highbd_dc_128_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_128_predictor_16x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_16x8)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_128_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_2x2 aom_highbd_dc_128_predictor_2x2_c
+
+void aom_highbd_dc_128_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_32x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_32x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_128_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_32x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_32x32)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_128_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x64 aom_highbd_dc_128_predictor_32x64_c
+
+void aom_highbd_dc_128_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_32x8 aom_highbd_dc_128_predictor_32x8_c
+
+void aom_highbd_dc_128_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_4x16 aom_highbd_dc_128_predictor_4x16_c
+
+void aom_highbd_dc_128_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_4x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_4x4)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_128_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_4x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_4x8)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_128_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x16 aom_highbd_dc_128_predictor_64x16_c
+
+void aom_highbd_dc_128_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x32 aom_highbd_dc_128_predictor_64x32_c
+
+void aom_highbd_dc_128_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x64 aom_highbd_dc_128_predictor_64x64_c
+
+void aom_highbd_dc_128_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_128_predictor_8x16_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_8x16)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_128_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x32 aom_highbd_dc_128_predictor_8x32_c
+
+void aom_highbd_dc_128_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_8x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_8x4)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_128_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_8x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_8x8)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_left_predictor_16x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_16x16_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_16x16)(uint16_t* dst,
+                                                       ptrdiff_t y_stride,
+                                                       const uint16_t* above,
+                                                       const uint16_t* left,
+                                                       int bd);
+
+void aom_highbd_dc_left_predictor_16x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_16x32_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_16x32)(uint16_t* dst,
+                                                       ptrdiff_t y_stride,
+                                                       const uint16_t* above,
+                                                       const uint16_t* left,
+                                                       int bd);
+
+void aom_highbd_dc_left_predictor_16x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x4 aom_highbd_dc_left_predictor_16x4_c
+
+void aom_highbd_dc_left_predictor_16x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x64 aom_highbd_dc_left_predictor_16x64_c
+
+void aom_highbd_dc_left_predictor_16x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_left_predictor_16x8_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_16x8)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_left_predictor_2x2_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_2x2 aom_highbd_dc_left_predictor_2x2_c
+
+void aom_highbd_dc_left_predictor_32x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_32x16_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_32x16)(uint16_t* dst,
+                                                       ptrdiff_t y_stride,
+                                                       const uint16_t* above,
+                                                       const uint16_t* left,
+                                                       int bd);
+
+void aom_highbd_dc_left_predictor_32x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_32x32_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_32x32)(uint16_t* dst,
+                                                       ptrdiff_t y_stride,
+                                                       const uint16_t* above,
+                                                       const uint16_t* left,
+                                                       int bd);
+
+void aom_highbd_dc_left_predictor_32x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x64 aom_highbd_dc_left_predictor_32x64_c
+
+void aom_highbd_dc_left_predictor_32x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_32x8 aom_highbd_dc_left_predictor_32x8_c
+
+void aom_highbd_dc_left_predictor_4x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_4x16 aom_highbd_dc_left_predictor_4x16_c
+
+void aom_highbd_dc_left_predictor_4x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_4x4_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_4x4)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_left_predictor_4x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_4x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_4x8)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_left_predictor_64x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x16 aom_highbd_dc_left_predictor_64x16_c
+
+void aom_highbd_dc_left_predictor_64x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x32 aom_highbd_dc_left_predictor_64x32_c
+
+void aom_highbd_dc_left_predictor_64x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x64 aom_highbd_dc_left_predictor_64x64_c
+
+void aom_highbd_dc_left_predictor_8x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_left_predictor_8x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_8x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_left_predictor_8x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x32 aom_highbd_dc_left_predictor_8x32_c
+
+void aom_highbd_dc_left_predictor_8x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_8x4_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_8x4)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_left_predictor_8x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_8x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_8x8)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_predictor_16x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_16x16_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_16x16)(uint16_t* dst,
+                                                  ptrdiff_t y_stride,
+                                                  const uint16_t* above,
+                                                  const uint16_t* left,
+                                                  int bd);
+
+void aom_highbd_dc_predictor_16x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_16x32_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_16x32)(uint16_t* dst,
+                                                  ptrdiff_t y_stride,
+                                                  const uint16_t* above,
+                                                  const uint16_t* left,
+                                                  int bd);
+
+void aom_highbd_dc_predictor_16x4_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x4 aom_highbd_dc_predictor_16x4_c
+
+void aom_highbd_dc_predictor_16x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x64 aom_highbd_dc_predictor_16x64_c
+
+void aom_highbd_dc_predictor_16x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_dc_predictor_16x8_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_16x8)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_dc_predictor_2x2_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_2x2 aom_highbd_dc_predictor_2x2_c
+
+void aom_highbd_dc_predictor_32x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_32x16_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_32x16)(uint16_t* dst,
+                                                  ptrdiff_t y_stride,
+                                                  const uint16_t* above,
+                                                  const uint16_t* left,
+                                                  int bd);
+
+void aom_highbd_dc_predictor_32x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_32x32_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_32x32)(uint16_t* dst,
+                                                  ptrdiff_t y_stride,
+                                                  const uint16_t* above,
+                                                  const uint16_t* left,
+                                                  int bd);
+
+void aom_highbd_dc_predictor_32x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x64 aom_highbd_dc_predictor_32x64_c
+
+void aom_highbd_dc_predictor_32x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_32x8 aom_highbd_dc_predictor_32x8_c
+
+void aom_highbd_dc_predictor_4x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_4x16 aom_highbd_dc_predictor_4x16_c
+
+void aom_highbd_dc_predictor_4x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_4x4_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_4x4)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_dc_predictor_4x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_4x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_4x8)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_dc_predictor_64x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x16 aom_highbd_dc_predictor_64x16_c
+
+void aom_highbd_dc_predictor_64x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x32 aom_highbd_dc_predictor_64x32_c
+
+void aom_highbd_dc_predictor_64x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x64 aom_highbd_dc_predictor_64x64_c
+
+void aom_highbd_dc_predictor_8x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_dc_predictor_8x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_8x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_dc_predictor_8x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x32 aom_highbd_dc_predictor_8x32_c
+
+void aom_highbd_dc_predictor_8x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_8x4_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_8x4)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_dc_predictor_8x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_8x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_8x8)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_dc_top_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_16x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_16x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_top_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_16x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_16x32)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_top_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x4 aom_highbd_dc_top_predictor_16x4_c
+
+void aom_highbd_dc_top_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x64 aom_highbd_dc_top_predictor_16x64_c
+
+void aom_highbd_dc_top_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_top_predictor_16x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_16x8)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_top_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_2x2 aom_highbd_dc_top_predictor_2x2_c
+
+void aom_highbd_dc_top_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_32x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_32x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_top_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_32x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_32x32)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_top_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x64 aom_highbd_dc_top_predictor_32x64_c
+
+void aom_highbd_dc_top_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_32x8 aom_highbd_dc_top_predictor_32x8_c
+
+void aom_highbd_dc_top_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_4x16 aom_highbd_dc_top_predictor_4x16_c
+
+void aom_highbd_dc_top_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_4x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_4x4)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_top_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_4x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_4x8)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_top_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x16 aom_highbd_dc_top_predictor_64x16_c
+
+void aom_highbd_dc_top_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x32 aom_highbd_dc_top_predictor_64x32_c
+
+void aom_highbd_dc_top_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x64 aom_highbd_dc_top_predictor_64x64_c
+
+void aom_highbd_dc_top_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_top_predictor_8x16_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_8x16)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_top_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x32 aom_highbd_dc_top_predictor_8x32_c
+
+void aom_highbd_dc_top_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_8x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_8x4)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_top_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_8x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_8x8)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_h_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_16x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_16x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_h_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_16x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_16x32)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_h_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x4 aom_highbd_h_predictor_16x4_c
+
+void aom_highbd_h_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x64 aom_highbd_h_predictor_16x64_c
+
+void aom_highbd_h_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_h_predictor_16x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_16x8)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_h_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_2x2 aom_highbd_h_predictor_2x2_c
+
+void aom_highbd_h_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_32x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_32x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_h_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_32x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_32x32)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_h_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x64 aom_highbd_h_predictor_32x64_c
+
+void aom_highbd_h_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_32x8 aom_highbd_h_predictor_32x8_c
+
+void aom_highbd_h_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_4x16 aom_highbd_h_predictor_4x16_c
+
+void aom_highbd_h_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_4x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_4x4)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_h_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_4x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_4x8)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_h_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x16 aom_highbd_h_predictor_64x16_c
+
+void aom_highbd_h_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x32 aom_highbd_h_predictor_64x32_c
+
+void aom_highbd_h_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x64 aom_highbd_h_predictor_64x64_c
+
+void aom_highbd_h_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_h_predictor_8x16_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_8x16)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_h_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x32 aom_highbd_h_predictor_8x32_c
+
+void aom_highbd_h_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_8x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_8x4)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_h_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_8x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_8x8)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_lpf_horizontal_14_c(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+void aom_highbd_lpf_horizontal_14_sse2(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_14)(uint16_t* s,
+                                                 int pitch,
+                                                 const uint8_t* blimit,
+                                                 const uint8_t* limit,
+                                                 const uint8_t* thresh,
+                                                 int bd);
+
+void aom_highbd_lpf_horizontal_14_dual_c(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limt1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_horizontal_14_dual_sse2(uint16_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limt1,
+                                            const uint8_t* thresh1,
+                                            int bd);
+void aom_highbd_lpf_horizontal_14_dual_avx2(uint16_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limt1,
+                                            const uint8_t* thresh1,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_14_dual)(uint16_t* s,
+                                                      int pitch,
+                                                      const uint8_t* blimit0,
+                                                      const uint8_t* limit0,
+                                                      const uint8_t* thresh0,
+                                                      const uint8_t* blimit1,
+                                                      const uint8_t* limt1,
+                                                      const uint8_t* thresh1,
+                                                      int bd);
+
+void aom_highbd_lpf_horizontal_4_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_4_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_4)(uint16_t* s,
+                                                int pitch,
+                                                const uint8_t* blimit,
+                                                const uint8_t* limit,
+                                                const uint8_t* thresh,
+                                                int bd);
+
+void aom_highbd_lpf_horizontal_4_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_4_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+void aom_highbd_lpf_horizontal_4_dual_avx2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_4_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_horizontal_6_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_6_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_6)(uint16_t* s,
+                                                int pitch,
+                                                const uint8_t* blimit,
+                                                const uint8_t* limit,
+                                                const uint8_t* thresh,
+                                                int bd);
+
+void aom_highbd_lpf_horizontal_6_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_6_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_6_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_horizontal_8_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_8_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_8)(uint16_t* s,
+                                                int pitch,
+                                                const uint8_t* blimit,
+                                                const uint8_t* limit,
+                                                const uint8_t* thresh,
+                                                int bd);
+
+void aom_highbd_lpf_horizontal_8_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_8_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+void aom_highbd_lpf_horizontal_8_dual_avx2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_8_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_vertical_14_c(uint16_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit,
+                                  const uint8_t* limit,
+                                  const uint8_t* thresh,
+                                  int bd);
+void aom_highbd_lpf_vertical_14_sse2(uint16_t* s,
+                                     int pitch,
+                                     const uint8_t* blimit,
+                                     const uint8_t* limit,
+                                     const uint8_t* thresh,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_14)(uint16_t* s,
+                                               int pitch,
+                                               const uint8_t* blimit,
+                                               const uint8_t* limit,
+                                               const uint8_t* thresh,
+                                               int bd);
+
+void aom_highbd_lpf_vertical_14_dual_c(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit0,
+                                       const uint8_t* limit0,
+                                       const uint8_t* thresh0,
+                                       const uint8_t* blimit1,
+                                       const uint8_t* limit1,
+                                       const uint8_t* thresh1,
+                                       int bd);
+void aom_highbd_lpf_vertical_14_dual_sse2(uint16_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit0,
+                                          const uint8_t* limit0,
+                                          const uint8_t* thresh0,
+                                          const uint8_t* blimit1,
+                                          const uint8_t* limit1,
+                                          const uint8_t* thresh1,
+                                          int bd);
+void aom_highbd_lpf_vertical_14_dual_avx2(uint16_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit0,
+                                          const uint8_t* limit0,
+                                          const uint8_t* thresh0,
+                                          const uint8_t* blimit1,
+                                          const uint8_t* limit1,
+                                          const uint8_t* thresh1,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_14_dual)(uint16_t* s,
+                                                    int pitch,
+                                                    const uint8_t* blimit0,
+                                                    const uint8_t* limit0,
+                                                    const uint8_t* thresh0,
+                                                    const uint8_t* blimit1,
+                                                    const uint8_t* limit1,
+                                                    const uint8_t* thresh1,
+                                                    int bd);
+
+void aom_highbd_lpf_vertical_4_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_4_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_4)(uint16_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit,
+                                              const uint8_t* limit,
+                                              const uint8_t* thresh,
+                                              int bd);
+
+void aom_highbd_lpf_vertical_4_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_4_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_vertical_4_dual_avx2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_4_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_lpf_vertical_6_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_6_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_6)(uint16_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit,
+                                              const uint8_t* limit,
+                                              const uint8_t* thresh,
+                                              int bd);
+
+void aom_highbd_lpf_vertical_6_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_6_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_6_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_lpf_vertical_8_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_8_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_8)(uint16_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit,
+                                              const uint8_t* limit,
+                                              const uint8_t* thresh,
+                                              int bd);
+
+void aom_highbd_lpf_vertical_8_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_8_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_vertical_8_dual_avx2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_8_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_paeth_predictor_16x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x16 aom_highbd_paeth_predictor_16x16_c
+
+void aom_highbd_paeth_predictor_16x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x32 aom_highbd_paeth_predictor_16x32_c
+
+void aom_highbd_paeth_predictor_16x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x4 aom_highbd_paeth_predictor_16x4_c
+
+void aom_highbd_paeth_predictor_16x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x64 aom_highbd_paeth_predictor_16x64_c
+
+void aom_highbd_paeth_predictor_16x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x8 aom_highbd_paeth_predictor_16x8_c
+
+void aom_highbd_paeth_predictor_2x2_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_2x2 aom_highbd_paeth_predictor_2x2_c
+
+void aom_highbd_paeth_predictor_32x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x16 aom_highbd_paeth_predictor_32x16_c
+
+void aom_highbd_paeth_predictor_32x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x32 aom_highbd_paeth_predictor_32x32_c
+
+void aom_highbd_paeth_predictor_32x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x64 aom_highbd_paeth_predictor_32x64_c
+
+void aom_highbd_paeth_predictor_32x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_32x8 aom_highbd_paeth_predictor_32x8_c
+
+void aom_highbd_paeth_predictor_4x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_4x16 aom_highbd_paeth_predictor_4x16_c
+
+void aom_highbd_paeth_predictor_4x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x4 aom_highbd_paeth_predictor_4x4_c
+
+void aom_highbd_paeth_predictor_4x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x8 aom_highbd_paeth_predictor_4x8_c
+
+void aom_highbd_paeth_predictor_64x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x16 aom_highbd_paeth_predictor_64x16_c
+
+void aom_highbd_paeth_predictor_64x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x32 aom_highbd_paeth_predictor_64x32_c
+
+void aom_highbd_paeth_predictor_64x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x64 aom_highbd_paeth_predictor_64x64_c
+
+void aom_highbd_paeth_predictor_8x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x16 aom_highbd_paeth_predictor_8x16_c
+
+void aom_highbd_paeth_predictor_8x32_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x32 aom_highbd_paeth_predictor_8x32_c
+
+void aom_highbd_paeth_predictor_8x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x4 aom_highbd_paeth_predictor_8x4_c
+
+void aom_highbd_paeth_predictor_8x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x8 aom_highbd_paeth_predictor_8x8_c
+
+void aom_highbd_smooth_h_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x16 \
+  aom_highbd_smooth_h_predictor_16x16_c
+
+void aom_highbd_smooth_h_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x32 \
+  aom_highbd_smooth_h_predictor_16x32_c
+
+void aom_highbd_smooth_h_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x4 aom_highbd_smooth_h_predictor_16x4_c
+
+void aom_highbd_smooth_h_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x64 \
+  aom_highbd_smooth_h_predictor_16x64_c
+
+void aom_highbd_smooth_h_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x8 aom_highbd_smooth_h_predictor_16x8_c
+
+void aom_highbd_smooth_h_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_2x2 aom_highbd_smooth_h_predictor_2x2_c
+
+void aom_highbd_smooth_h_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x16 \
+  aom_highbd_smooth_h_predictor_32x16_c
+
+void aom_highbd_smooth_h_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x32 \
+  aom_highbd_smooth_h_predictor_32x32_c
+
+void aom_highbd_smooth_h_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x64 \
+  aom_highbd_smooth_h_predictor_32x64_c
+
+void aom_highbd_smooth_h_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_32x8 aom_highbd_smooth_h_predictor_32x8_c
+
+void aom_highbd_smooth_h_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_4x16 aom_highbd_smooth_h_predictor_4x16_c
+
+void aom_highbd_smooth_h_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x4 aom_highbd_smooth_h_predictor_4x4_c
+
+void aom_highbd_smooth_h_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x8 aom_highbd_smooth_h_predictor_4x8_c
+
+void aom_highbd_smooth_h_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x16 \
+  aom_highbd_smooth_h_predictor_64x16_c
+
+void aom_highbd_smooth_h_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x32 \
+  aom_highbd_smooth_h_predictor_64x32_c
+
+void aom_highbd_smooth_h_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x64 \
+  aom_highbd_smooth_h_predictor_64x64_c
+
+void aom_highbd_smooth_h_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x16 aom_highbd_smooth_h_predictor_8x16_c
+
+void aom_highbd_smooth_h_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x32 aom_highbd_smooth_h_predictor_8x32_c
+
+void aom_highbd_smooth_h_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x4 aom_highbd_smooth_h_predictor_8x4_c
+
+void aom_highbd_smooth_h_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x8 aom_highbd_smooth_h_predictor_8x8_c
+
+void aom_highbd_smooth_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x16 aom_highbd_smooth_predictor_16x16_c
+
+void aom_highbd_smooth_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x32 aom_highbd_smooth_predictor_16x32_c
+
+void aom_highbd_smooth_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x4 aom_highbd_smooth_predictor_16x4_c
+
+void aom_highbd_smooth_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x64 aom_highbd_smooth_predictor_16x64_c
+
+void aom_highbd_smooth_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x8 aom_highbd_smooth_predictor_16x8_c
+
+void aom_highbd_smooth_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_2x2 aom_highbd_smooth_predictor_2x2_c
+
+void aom_highbd_smooth_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x16 aom_highbd_smooth_predictor_32x16_c
+
+void aom_highbd_smooth_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x32 aom_highbd_smooth_predictor_32x32_c
+
+void aom_highbd_smooth_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x64 aom_highbd_smooth_predictor_32x64_c
+
+void aom_highbd_smooth_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_32x8 aom_highbd_smooth_predictor_32x8_c
+
+void aom_highbd_smooth_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_4x16 aom_highbd_smooth_predictor_4x16_c
+
+void aom_highbd_smooth_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x4 aom_highbd_smooth_predictor_4x4_c
+
+void aom_highbd_smooth_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x8 aom_highbd_smooth_predictor_4x8_c
+
+void aom_highbd_smooth_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x16 aom_highbd_smooth_predictor_64x16_c
+
+void aom_highbd_smooth_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x32 aom_highbd_smooth_predictor_64x32_c
+
+void aom_highbd_smooth_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x64 aom_highbd_smooth_predictor_64x64_c
+
+void aom_highbd_smooth_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x16 aom_highbd_smooth_predictor_8x16_c
+
+void aom_highbd_smooth_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x32 aom_highbd_smooth_predictor_8x32_c
+
+void aom_highbd_smooth_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x4 aom_highbd_smooth_predictor_8x4_c
+
+void aom_highbd_smooth_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x8 aom_highbd_smooth_predictor_8x8_c
+
+void aom_highbd_smooth_v_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x16 \
+  aom_highbd_smooth_v_predictor_16x16_c
+
+void aom_highbd_smooth_v_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x32 \
+  aom_highbd_smooth_v_predictor_16x32_c
+
+void aom_highbd_smooth_v_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x4 aom_highbd_smooth_v_predictor_16x4_c
+
+void aom_highbd_smooth_v_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x64 \
+  aom_highbd_smooth_v_predictor_16x64_c
+
+void aom_highbd_smooth_v_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x8 aom_highbd_smooth_v_predictor_16x8_c
+
+void aom_highbd_smooth_v_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_2x2 aom_highbd_smooth_v_predictor_2x2_c
+
+void aom_highbd_smooth_v_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x16 \
+  aom_highbd_smooth_v_predictor_32x16_c
+
+void aom_highbd_smooth_v_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x32 \
+  aom_highbd_smooth_v_predictor_32x32_c
+
+void aom_highbd_smooth_v_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x64 \
+  aom_highbd_smooth_v_predictor_32x64_c
+
+void aom_highbd_smooth_v_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_32x8 aom_highbd_smooth_v_predictor_32x8_c
+
+void aom_highbd_smooth_v_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_4x16 aom_highbd_smooth_v_predictor_4x16_c
+
+void aom_highbd_smooth_v_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x4 aom_highbd_smooth_v_predictor_4x4_c
+
+void aom_highbd_smooth_v_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x8 aom_highbd_smooth_v_predictor_4x8_c
+
+void aom_highbd_smooth_v_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x16 \
+  aom_highbd_smooth_v_predictor_64x16_c
+
+void aom_highbd_smooth_v_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x32 \
+  aom_highbd_smooth_v_predictor_64x32_c
+
+void aom_highbd_smooth_v_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x64 \
+  aom_highbd_smooth_v_predictor_64x64_c
+
+void aom_highbd_smooth_v_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x16 aom_highbd_smooth_v_predictor_8x16_c
+
+void aom_highbd_smooth_v_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x32 aom_highbd_smooth_v_predictor_8x32_c
+
+void aom_highbd_smooth_v_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x4 aom_highbd_smooth_v_predictor_8x4_c
+
+void aom_highbd_smooth_v_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x8 aom_highbd_smooth_v_predictor_8x8_c
+
+void aom_highbd_v_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_16x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_16x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_v_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_16x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_16x32)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_v_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x4 aom_highbd_v_predictor_16x4_c
+
+void aom_highbd_v_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x64 aom_highbd_v_predictor_16x64_c
+
+void aom_highbd_v_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_v_predictor_16x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_16x8)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_v_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_2x2 aom_highbd_v_predictor_2x2_c
+
+void aom_highbd_v_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_32x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_32x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_v_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_32x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_32x32)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_v_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x64 aom_highbd_v_predictor_32x64_c
+
+void aom_highbd_v_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_32x8 aom_highbd_v_predictor_32x8_c
+
+void aom_highbd_v_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_4x16 aom_highbd_v_predictor_4x16_c
+
+void aom_highbd_v_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_4x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_4x4)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_v_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_4x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_4x8)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_v_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x16 aom_highbd_v_predictor_64x16_c
+
+void aom_highbd_v_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x32 aom_highbd_v_predictor_64x32_c
+
+void aom_highbd_v_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x64 aom_highbd_v_predictor_64x64_c
+
+void aom_highbd_v_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_v_predictor_8x16_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_8x16)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_v_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x32 aom_highbd_v_predictor_8x32_c
+
+void aom_highbd_v_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_8x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_8x4)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_v_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_8x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_8x8)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_lowbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                    uint32_t dst_stride,
+                                    const CONV_BUF_TYPE* src0,
+                                    uint32_t src0_stride,
+                                    const CONV_BUF_TYPE* src1,
+                                    uint32_t src1_stride,
+                                    const uint8_t* mask,
+                                    uint32_t mask_stride,
+                                    int w,
+                                    int h,
+                                    int subx,
+                                    int suby,
+                                    ConvolveParams* conv_params);
+void aom_lowbd_blend_a64_d16_mask_sse4_1(uint8_t* dst,
+                                         uint32_t dst_stride,
+                                         const CONV_BUF_TYPE* src0,
+                                         uint32_t src0_stride,
+                                         const CONV_BUF_TYPE* src1,
+                                         uint32_t src1_stride,
+                                         const uint8_t* mask,
+                                         uint32_t mask_stride,
+                                         int w,
+                                         int h,
+                                         int subx,
+                                         int suby,
+                                         ConvolveParams* conv_params);
+RTCD_EXTERN void (*aom_lowbd_blend_a64_d16_mask)(uint8_t* dst,
+                                                 uint32_t dst_stride,
+                                                 const CONV_BUF_TYPE* src0,
+                                                 uint32_t src0_stride,
+                                                 const CONV_BUF_TYPE* src1,
+                                                 uint32_t src1_stride,
+                                                 const uint8_t* mask,
+                                                 uint32_t mask_stride,
+                                                 int w,
+                                                 int h,
+                                                 int subx,
+                                                 int suby,
+                                                 ConvolveParams* conv_params);
+
+void aom_lpf_horizontal_14_c(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+void aom_lpf_horizontal_14_sse2(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit,
+                                const uint8_t* limit,
+                                const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_14)(uint8_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit,
+                                          const uint8_t* limit,
+                                          const uint8_t* thresh);
+
+void aom_lpf_horizontal_14_dual_c(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+void aom_lpf_horizontal_14_dual_sse2(uint8_t* s,
+                                     int pitch,
+                                     const uint8_t* blimit0,
+                                     const uint8_t* limit0,
+                                     const uint8_t* thresh0,
+                                     const uint8_t* blimit1,
+                                     const uint8_t* limit1,
+                                     const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_horizontal_14_dual)(uint8_t* s,
+                                               int pitch,
+                                               const uint8_t* blimit0,
+                                               const uint8_t* limit0,
+                                               const uint8_t* thresh0,
+                                               const uint8_t* blimit1,
+                                               const uint8_t* limit1,
+                                               const uint8_t* thresh1);
+
+void aom_lpf_horizontal_4_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_4_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_4)(uint8_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit,
+                                         const uint8_t* limit,
+                                         const uint8_t* thresh);
+
+void aom_lpf_horizontal_4_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_4_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_horizontal_4_dual)(uint8_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit0,
+                                              const uint8_t* limit0,
+                                              const uint8_t* thresh0,
+                                              const uint8_t* blimit1,
+                                              const uint8_t* limit1,
+                                              const uint8_t* thresh1);
+
+void aom_lpf_horizontal_6_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_6_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_6)(uint8_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit,
+                                         const uint8_t* limit,
+                                         const uint8_t* thresh);
+
+void aom_lpf_horizontal_6_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_6_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_horizontal_6_dual)(uint8_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit0,
+                                              const uint8_t* limit0,
+                                              const uint8_t* thresh0,
+                                              const uint8_t* blimit1,
+                                              const uint8_t* limit1,
+                                              const uint8_t* thresh1);
+
+void aom_lpf_horizontal_8_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_8_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_8)(uint8_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit,
+                                         const uint8_t* limit,
+                                         const uint8_t* thresh);
+
+void aom_lpf_horizontal_8_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_8_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_horizontal_8_dual)(uint8_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit0,
+                                              const uint8_t* limit0,
+                                              const uint8_t* thresh0,
+                                              const uint8_t* blimit1,
+                                              const uint8_t* limit1,
+                                              const uint8_t* thresh1);
+
+void aom_lpf_vertical_14_c(uint8_t* s,
+                           int pitch,
+                           const uint8_t* blimit,
+                           const uint8_t* limit,
+                           const uint8_t* thresh);
+void aom_lpf_vertical_14_sse2(uint8_t* s,
+                              int pitch,
+                              const uint8_t* blimit,
+                              const uint8_t* limit,
+                              const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_14)(uint8_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit,
+                                        const uint8_t* limit,
+                                        const uint8_t* thresh);
+
+void aom_lpf_vertical_14_dual_c(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit0,
+                                const uint8_t* limit0,
+                                const uint8_t* thresh0,
+                                const uint8_t* blimit1,
+                                const uint8_t* limit1,
+                                const uint8_t* thresh1);
+void aom_lpf_vertical_14_dual_sse2(uint8_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit0,
+                                   const uint8_t* limit0,
+                                   const uint8_t* thresh0,
+                                   const uint8_t* blimit1,
+                                   const uint8_t* limit1,
+                                   const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_vertical_14_dual)(uint8_t* s,
+                                             int pitch,
+                                             const uint8_t* blimit0,
+                                             const uint8_t* limit0,
+                                             const uint8_t* thresh0,
+                                             const uint8_t* blimit1,
+                                             const uint8_t* limit1,
+                                             const uint8_t* thresh1);
+
+void aom_lpf_vertical_4_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_4_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_4)(uint8_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh);
+
+void aom_lpf_vertical_4_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_4_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_vertical_4_dual)(uint8_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limit1,
+                                            const uint8_t* thresh1);
+
+void aom_lpf_vertical_6_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_6_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_6)(uint8_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh);
+
+void aom_lpf_vertical_6_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_6_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_vertical_6_dual)(uint8_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limit1,
+                                            const uint8_t* thresh1);
+
+void aom_lpf_vertical_8_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_8_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_8)(uint8_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh);
+
+void aom_lpf_vertical_8_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_8_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_vertical_8_dual)(uint8_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limit1,
+                                            const uint8_t* thresh1);
+
+void aom_paeth_predictor_16x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_16x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_16x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_16x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_paeth_predictor_16x8_avx2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_2x2_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
+
+void aom_paeth_predictor_32x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_32x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_4x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_4x16_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x16)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_4x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_4x4_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x4)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_4x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_4x8_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x8)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_64x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_64x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_64x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_8x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_8x16_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x16)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_8x32_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_8x32_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x32)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_8x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_8x4_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x4)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_8x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_8x8_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x8)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_16x4_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x4)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_16x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
+
+void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_32x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_4x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_4x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_4x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_8x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_8x32_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_8x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_8x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_16x4_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_16x8_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
+
+void aom_smooth_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_32x8_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_4x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_4x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_4x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_8x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_8x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_8x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_8x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_16x4_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x4)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_16x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
+
+void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_32x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_4x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_4x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_4x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_8x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_8x32_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_8x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_8x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_v_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_16x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x4)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_16x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
+
+void aom_v_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x16_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x64_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_32x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_4x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_4x16)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_4x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_v_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_4x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_v_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x16_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x64_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_8x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_8x16)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_8x32_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_8x32)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_8x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_v_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_8x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void av1_round_shift_array_c(int32_t* arr, int size, int bit);
+void av1_round_shift_array_sse4_1(int32_t* arr, int size, int bit);
+RTCD_EXTERN void (*av1_round_shift_array)(int32_t* arr, int size, int bit);
+
+void aom_dsp_rtcd(void);
+
+#ifdef RTCD_C
+#include "aom_ports/x86.h"
+static void setup_rtcd_internal(void) {
+  int flags = x86_simd_caps();
+
+  (void)flags;
+
+  aom_blend_a64_hmask = aom_blend_a64_hmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_hmask = aom_blend_a64_hmask_sse4_1;
+  aom_blend_a64_mask = aom_blend_a64_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_mask = aom_blend_a64_mask_sse4_1;
+  aom_blend_a64_vmask = aom_blend_a64_vmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_vmask = aom_blend_a64_vmask_sse4_1;
+  aom_convolve8_horiz = aom_convolve8_horiz_c;
+  if (flags & HAS_SSE2)
+    aom_convolve8_horiz = aom_convolve8_horiz_sse2;
+  if (flags & HAS_SSSE3)
+    aom_convolve8_horiz = aom_convolve8_horiz_ssse3;
+  if (flags & HAS_AVX2)
+    aom_convolve8_horiz = aom_convolve8_horiz_avx2;
+  aom_convolve8_vert = aom_convolve8_vert_c;
+  if (flags & HAS_SSE2)
+    aom_convolve8_vert = aom_convolve8_vert_sse2;
+  if (flags & HAS_SSSE3)
+    aom_convolve8_vert = aom_convolve8_vert_ssse3;
+  if (flags & HAS_AVX2)
+    aom_convolve8_vert = aom_convolve8_vert_avx2;
+  aom_convolve_copy = aom_convolve_copy_c;
+  if (flags & HAS_SSE2)
+    aom_convolve_copy = aom_convolve_copy_sse2;
+  aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_sse2;
+  aom_dc_128_predictor_16x32 = aom_dc_128_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x32 = aom_dc_128_predictor_16x32_sse2;
+  aom_dc_128_predictor_16x4 = aom_dc_128_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x4 = aom_dc_128_predictor_16x4_sse2;
+  aom_dc_128_predictor_16x64 = aom_dc_128_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x64 = aom_dc_128_predictor_16x64_sse2;
+  aom_dc_128_predictor_16x8 = aom_dc_128_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x8 = aom_dc_128_predictor_16x8_sse2;
+  aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_avx2;
+  aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_avx2;
+  aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_avx2;
+  aom_dc_128_predictor_32x8 = aom_dc_128_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_32x8 = aom_dc_128_predictor_32x8_sse2;
+  aom_dc_128_predictor_4x16 = aom_dc_128_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_4x16 = aom_dc_128_predictor_4x16_sse2;
+  aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_sse2;
+  aom_dc_128_predictor_4x8 = aom_dc_128_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_4x8 = aom_dc_128_predictor_4x8_sse2;
+  aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_avx2;
+  aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_avx2;
+  aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_avx2;
+  aom_dc_128_predictor_8x16 = aom_dc_128_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_8x16 = aom_dc_128_predictor_8x16_sse2;
+  aom_dc_128_predictor_8x32 = aom_dc_128_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_8x32 = aom_dc_128_predictor_8x32_sse2;
+  aom_dc_128_predictor_8x4 = aom_dc_128_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_8x4 = aom_dc_128_predictor_8x4_sse2;
+  aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_sse2;
+  aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_sse2;
+  aom_dc_left_predictor_16x32 = aom_dc_left_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x32 = aom_dc_left_predictor_16x32_sse2;
+  aom_dc_left_predictor_16x4 = aom_dc_left_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x4 = aom_dc_left_predictor_16x4_sse2;
+  aom_dc_left_predictor_16x64 = aom_dc_left_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x64 = aom_dc_left_predictor_16x64_sse2;
+  aom_dc_left_predictor_16x8 = aom_dc_left_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x8 = aom_dc_left_predictor_16x8_sse2;
+  aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_avx2;
+  aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_avx2;
+  aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_avx2;
+  aom_dc_left_predictor_32x8 = aom_dc_left_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_32x8 = aom_dc_left_predictor_32x8_sse2;
+  aom_dc_left_predictor_4x16 = aom_dc_left_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_4x16 = aom_dc_left_predictor_4x16_sse2;
+  aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_sse2;
+  aom_dc_left_predictor_4x8 = aom_dc_left_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_4x8 = aom_dc_left_predictor_4x8_sse2;
+  aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_avx2;
+  aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_avx2;
+  aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_avx2;
+  aom_dc_left_predictor_8x16 = aom_dc_left_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_8x16 = aom_dc_left_predictor_8x16_sse2;
+  aom_dc_left_predictor_8x32 = aom_dc_left_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_8x32 = aom_dc_left_predictor_8x32_sse2;
+  aom_dc_left_predictor_8x4 = aom_dc_left_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_8x4 = aom_dc_left_predictor_8x4_sse2;
+  aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_sse2;
+  aom_dc_predictor_16x16 = aom_dc_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x16 = aom_dc_predictor_16x16_sse2;
+  aom_dc_predictor_16x32 = aom_dc_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x32 = aom_dc_predictor_16x32_sse2;
+  aom_dc_predictor_16x4 = aom_dc_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x4 = aom_dc_predictor_16x4_sse2;
+  aom_dc_predictor_16x64 = aom_dc_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x64 = aom_dc_predictor_16x64_sse2;
+  aom_dc_predictor_16x8 = aom_dc_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x8 = aom_dc_predictor_16x8_sse2;
+  aom_dc_predictor_32x16 = aom_dc_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_32x16 = aom_dc_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x16 = aom_dc_predictor_32x16_avx2;
+  aom_dc_predictor_32x32 = aom_dc_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_32x32 = aom_dc_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x32 = aom_dc_predictor_32x32_avx2;
+  aom_dc_predictor_32x64 = aom_dc_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_32x64 = aom_dc_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x64 = aom_dc_predictor_32x64_avx2;
+  aom_dc_predictor_32x8 = aom_dc_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_32x8 = aom_dc_predictor_32x8_sse2;
+  aom_dc_predictor_4x16 = aom_dc_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_4x16 = aom_dc_predictor_4x16_sse2;
+  aom_dc_predictor_4x4 = aom_dc_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_4x4 = aom_dc_predictor_4x4_sse2;
+  aom_dc_predictor_4x8 = aom_dc_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_4x8 = aom_dc_predictor_4x8_sse2;
+  aom_dc_predictor_64x16 = aom_dc_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_64x16 = aom_dc_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x16 = aom_dc_predictor_64x16_avx2;
+  aom_dc_predictor_64x32 = aom_dc_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_64x32 = aom_dc_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x32 = aom_dc_predictor_64x32_avx2;
+  aom_dc_predictor_64x64 = aom_dc_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_64x64 = aom_dc_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x64 = aom_dc_predictor_64x64_avx2;
+  aom_dc_predictor_8x16 = aom_dc_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_8x16 = aom_dc_predictor_8x16_sse2;
+  aom_dc_predictor_8x32 = aom_dc_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_8x32 = aom_dc_predictor_8x32_sse2;
+  aom_dc_predictor_8x4 = aom_dc_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_8x4 = aom_dc_predictor_8x4_sse2;
+  aom_dc_predictor_8x8 = aom_dc_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_8x8 = aom_dc_predictor_8x8_sse2;
+  aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_sse2;
+  aom_dc_top_predictor_16x32 = aom_dc_top_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x32 = aom_dc_top_predictor_16x32_sse2;
+  aom_dc_top_predictor_16x4 = aom_dc_top_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x4 = aom_dc_top_predictor_16x4_sse2;
+  aom_dc_top_predictor_16x64 = aom_dc_top_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x64 = aom_dc_top_predictor_16x64_sse2;
+  aom_dc_top_predictor_16x8 = aom_dc_top_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x8 = aom_dc_top_predictor_16x8_sse2;
+  aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_avx2;
+  aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_avx2;
+  aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_avx2;
+  aom_dc_top_predictor_32x8 = aom_dc_top_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_32x8 = aom_dc_top_predictor_32x8_sse2;
+  aom_dc_top_predictor_4x16 = aom_dc_top_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_4x16 = aom_dc_top_predictor_4x16_sse2;
+  aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_sse2;
+  aom_dc_top_predictor_4x8 = aom_dc_top_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_4x8 = aom_dc_top_predictor_4x8_sse2;
+  aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_avx2;
+  aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_avx2;
+  aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_avx2;
+  aom_dc_top_predictor_8x16 = aom_dc_top_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_8x16 = aom_dc_top_predictor_8x16_sse2;
+  aom_dc_top_predictor_8x32 = aom_dc_top_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_8x32 = aom_dc_top_predictor_8x32_sse2;
+  aom_dc_top_predictor_8x4 = aom_dc_top_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_8x4 = aom_dc_top_predictor_8x4_sse2;
+  aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_sse2;
+  aom_h_predictor_16x16 = aom_h_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x16 = aom_h_predictor_16x16_sse2;
+  aom_h_predictor_16x32 = aom_h_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x32 = aom_h_predictor_16x32_sse2;
+  aom_h_predictor_16x4 = aom_h_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x4 = aom_h_predictor_16x4_sse2;
+  aom_h_predictor_16x64 = aom_h_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x64 = aom_h_predictor_16x64_sse2;
+  aom_h_predictor_16x8 = aom_h_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x8 = aom_h_predictor_16x8_sse2;
+  aom_h_predictor_32x16 = aom_h_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_32x16 = aom_h_predictor_32x16_sse2;
+  aom_h_predictor_32x32 = aom_h_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_32x32 = aom_h_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_h_predictor_32x32 = aom_h_predictor_32x32_avx2;
+  aom_h_predictor_32x64 = aom_h_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_32x64 = aom_h_predictor_32x64_sse2;
+  aom_h_predictor_32x8 = aom_h_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_32x8 = aom_h_predictor_32x8_sse2;
+  aom_h_predictor_4x16 = aom_h_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_4x16 = aom_h_predictor_4x16_sse2;
+  aom_h_predictor_4x4 = aom_h_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_4x4 = aom_h_predictor_4x4_sse2;
+  aom_h_predictor_4x8 = aom_h_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_4x8 = aom_h_predictor_4x8_sse2;
+  aom_h_predictor_64x16 = aom_h_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_64x16 = aom_h_predictor_64x16_sse2;
+  aom_h_predictor_64x32 = aom_h_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_64x32 = aom_h_predictor_64x32_sse2;
+  aom_h_predictor_64x64 = aom_h_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_64x64 = aom_h_predictor_64x64_sse2;
+  aom_h_predictor_8x16 = aom_h_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_8x16 = aom_h_predictor_8x16_sse2;
+  aom_h_predictor_8x32 = aom_h_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_8x32 = aom_h_predictor_8x32_sse2;
+  aom_h_predictor_8x4 = aom_h_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_8x4 = aom_h_predictor_8x4_sse2;
+  aom_h_predictor_8x8 = aom_h_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_8x8 = aom_h_predictor_8x8_sse2;
+  aom_highbd_blend_a64_hmask = aom_highbd_blend_a64_hmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_hmask = aom_highbd_blend_a64_hmask_sse4_1;
+  aom_highbd_blend_a64_mask = aom_highbd_blend_a64_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_mask = aom_highbd_blend_a64_mask_sse4_1;
+  aom_highbd_blend_a64_vmask = aom_highbd_blend_a64_vmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_vmask = aom_highbd_blend_a64_vmask_sse4_1;
+  aom_highbd_convolve8_horiz = aom_highbd_convolve8_horiz_c;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve8_horiz = aom_highbd_convolve8_horiz_avx2;
+  aom_highbd_convolve8_vert = aom_highbd_convolve8_vert_c;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve8_vert = aom_highbd_convolve8_vert_avx2;
+  aom_highbd_convolve_copy = aom_highbd_convolve_copy_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_convolve_copy = aom_highbd_convolve_copy_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve_copy = aom_highbd_convolve_copy_avx2;
+  aom_highbd_dc_128_predictor_16x16 = aom_highbd_dc_128_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_16x16 = aom_highbd_dc_128_predictor_16x16_sse2;
+  aom_highbd_dc_128_predictor_16x32 = aom_highbd_dc_128_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_16x32 = aom_highbd_dc_128_predictor_16x32_sse2;
+  aom_highbd_dc_128_predictor_16x8 = aom_highbd_dc_128_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_16x8 = aom_highbd_dc_128_predictor_16x8_sse2;
+  aom_highbd_dc_128_predictor_32x16 = aom_highbd_dc_128_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_32x16 = aom_highbd_dc_128_predictor_32x16_sse2;
+  aom_highbd_dc_128_predictor_32x32 = aom_highbd_dc_128_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_32x32 = aom_highbd_dc_128_predictor_32x32_sse2;
+  aom_highbd_dc_128_predictor_4x4 = aom_highbd_dc_128_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_4x4 = aom_highbd_dc_128_predictor_4x4_sse2;
+  aom_highbd_dc_128_predictor_4x8 = aom_highbd_dc_128_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_4x8 = aom_highbd_dc_128_predictor_4x8_sse2;
+  aom_highbd_dc_128_predictor_8x16 = aom_highbd_dc_128_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_8x16 = aom_highbd_dc_128_predictor_8x16_sse2;
+  aom_highbd_dc_128_predictor_8x4 = aom_highbd_dc_128_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_8x4 = aom_highbd_dc_128_predictor_8x4_sse2;
+  aom_highbd_dc_128_predictor_8x8 = aom_highbd_dc_128_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_8x8 = aom_highbd_dc_128_predictor_8x8_sse2;
+  aom_highbd_dc_left_predictor_16x16 = aom_highbd_dc_left_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_16x16 =
+        aom_highbd_dc_left_predictor_16x16_sse2;
+  aom_highbd_dc_left_predictor_16x32 = aom_highbd_dc_left_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_16x32 =
+        aom_highbd_dc_left_predictor_16x32_sse2;
+  aom_highbd_dc_left_predictor_16x8 = aom_highbd_dc_left_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_16x8 = aom_highbd_dc_left_predictor_16x8_sse2;
+  aom_highbd_dc_left_predictor_32x16 = aom_highbd_dc_left_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_32x16 =
+        aom_highbd_dc_left_predictor_32x16_sse2;
+  aom_highbd_dc_left_predictor_32x32 = aom_highbd_dc_left_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_32x32 =
+        aom_highbd_dc_left_predictor_32x32_sse2;
+  aom_highbd_dc_left_predictor_4x4 = aom_highbd_dc_left_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_4x4 = aom_highbd_dc_left_predictor_4x4_sse2;
+  aom_highbd_dc_left_predictor_4x8 = aom_highbd_dc_left_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_4x8 = aom_highbd_dc_left_predictor_4x8_sse2;
+  aom_highbd_dc_left_predictor_8x16 = aom_highbd_dc_left_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_8x16 = aom_highbd_dc_left_predictor_8x16_sse2;
+  aom_highbd_dc_left_predictor_8x4 = aom_highbd_dc_left_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_8x4 = aom_highbd_dc_left_predictor_8x4_sse2;
+  aom_highbd_dc_left_predictor_8x8 = aom_highbd_dc_left_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_8x8 = aom_highbd_dc_left_predictor_8x8_sse2;
+  aom_highbd_dc_predictor_16x16 = aom_highbd_dc_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_16x16 = aom_highbd_dc_predictor_16x16_sse2;
+  aom_highbd_dc_predictor_16x32 = aom_highbd_dc_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_16x32 = aom_highbd_dc_predictor_16x32_sse2;
+  aom_highbd_dc_predictor_16x8 = aom_highbd_dc_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_16x8 = aom_highbd_dc_predictor_16x8_sse2;
+  aom_highbd_dc_predictor_32x16 = aom_highbd_dc_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_32x16 = aom_highbd_dc_predictor_32x16_sse2;
+  aom_highbd_dc_predictor_32x32 = aom_highbd_dc_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_32x32 = aom_highbd_dc_predictor_32x32_sse2;
+  aom_highbd_dc_predictor_4x4 = aom_highbd_dc_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_4x4 = aom_highbd_dc_predictor_4x4_sse2;
+  aom_highbd_dc_predictor_4x8 = aom_highbd_dc_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_4x8 = aom_highbd_dc_predictor_4x8_sse2;
+  aom_highbd_dc_predictor_8x16 = aom_highbd_dc_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_8x16 = aom_highbd_dc_predictor_8x16_sse2;
+  aom_highbd_dc_predictor_8x4 = aom_highbd_dc_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_8x4 = aom_highbd_dc_predictor_8x4_sse2;
+  aom_highbd_dc_predictor_8x8 = aom_highbd_dc_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_8x8 = aom_highbd_dc_predictor_8x8_sse2;
+  aom_highbd_dc_top_predictor_16x16 = aom_highbd_dc_top_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_16x16 = aom_highbd_dc_top_predictor_16x16_sse2;
+  aom_highbd_dc_top_predictor_16x32 = aom_highbd_dc_top_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_16x32 = aom_highbd_dc_top_predictor_16x32_sse2;
+  aom_highbd_dc_top_predictor_16x8 = aom_highbd_dc_top_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_16x8 = aom_highbd_dc_top_predictor_16x8_sse2;
+  aom_highbd_dc_top_predictor_32x16 = aom_highbd_dc_top_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_32x16 = aom_highbd_dc_top_predictor_32x16_sse2;
+  aom_highbd_dc_top_predictor_32x32 = aom_highbd_dc_top_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_32x32 = aom_highbd_dc_top_predictor_32x32_sse2;
+  aom_highbd_dc_top_predictor_4x4 = aom_highbd_dc_top_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_4x4 = aom_highbd_dc_top_predictor_4x4_sse2;
+  aom_highbd_dc_top_predictor_4x8 = aom_highbd_dc_top_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_4x8 = aom_highbd_dc_top_predictor_4x8_sse2;
+  aom_highbd_dc_top_predictor_8x16 = aom_highbd_dc_top_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_8x16 = aom_highbd_dc_top_predictor_8x16_sse2;
+  aom_highbd_dc_top_predictor_8x4 = aom_highbd_dc_top_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_8x4 = aom_highbd_dc_top_predictor_8x4_sse2;
+  aom_highbd_dc_top_predictor_8x8 = aom_highbd_dc_top_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_8x8 = aom_highbd_dc_top_predictor_8x8_sse2;
+  aom_highbd_h_predictor_16x16 = aom_highbd_h_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_16x16 = aom_highbd_h_predictor_16x16_sse2;
+  aom_highbd_h_predictor_16x32 = aom_highbd_h_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_16x32 = aom_highbd_h_predictor_16x32_sse2;
+  aom_highbd_h_predictor_16x8 = aom_highbd_h_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_16x8 = aom_highbd_h_predictor_16x8_sse2;
+  aom_highbd_h_predictor_32x16 = aom_highbd_h_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_32x16 = aom_highbd_h_predictor_32x16_sse2;
+  aom_highbd_h_predictor_32x32 = aom_highbd_h_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_32x32 = aom_highbd_h_predictor_32x32_sse2;
+  aom_highbd_h_predictor_4x4 = aom_highbd_h_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_4x4 = aom_highbd_h_predictor_4x4_sse2;
+  aom_highbd_h_predictor_4x8 = aom_highbd_h_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_4x8 = aom_highbd_h_predictor_4x8_sse2;
+  aom_highbd_h_predictor_8x16 = aom_highbd_h_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_8x16 = aom_highbd_h_predictor_8x16_sse2;
+  aom_highbd_h_predictor_8x4 = aom_highbd_h_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_8x4 = aom_highbd_h_predictor_8x4_sse2;
+  aom_highbd_h_predictor_8x8 = aom_highbd_h_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_8x8 = aom_highbd_h_predictor_8x8_sse2;
+  aom_highbd_lpf_horizontal_14 = aom_highbd_lpf_horizontal_14_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_14 = aom_highbd_lpf_horizontal_14_sse2;
+  aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_avx2;
+  aom_highbd_lpf_horizontal_4 = aom_highbd_lpf_horizontal_4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_4 = aom_highbd_lpf_horizontal_4_sse2;
+  aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_avx2;
+  aom_highbd_lpf_horizontal_6 = aom_highbd_lpf_horizontal_6_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_6 = aom_highbd_lpf_horizontal_6_sse2;
+  aom_highbd_lpf_horizontal_6_dual = aom_highbd_lpf_horizontal_6_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_6_dual = aom_highbd_lpf_horizontal_6_dual_sse2;
+  aom_highbd_lpf_horizontal_8 = aom_highbd_lpf_horizontal_8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_8 = aom_highbd_lpf_horizontal_8_sse2;
+  aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_avx2;
+  aom_highbd_lpf_vertical_14 = aom_highbd_lpf_vertical_14_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_14 = aom_highbd_lpf_vertical_14_sse2;
+  aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_avx2;
+  aom_highbd_lpf_vertical_4 = aom_highbd_lpf_vertical_4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_4 = aom_highbd_lpf_vertical_4_sse2;
+  aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_avx2;
+  aom_highbd_lpf_vertical_6 = aom_highbd_lpf_vertical_6_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_6 = aom_highbd_lpf_vertical_6_sse2;
+  aom_highbd_lpf_vertical_6_dual = aom_highbd_lpf_vertical_6_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_6_dual = aom_highbd_lpf_vertical_6_dual_sse2;
+  aom_highbd_lpf_vertical_8 = aom_highbd_lpf_vertical_8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_8 = aom_highbd_lpf_vertical_8_sse2;
+  aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_avx2;
+  aom_highbd_v_predictor_16x16 = aom_highbd_v_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_16x16 = aom_highbd_v_predictor_16x16_sse2;
+  aom_highbd_v_predictor_16x32 = aom_highbd_v_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_16x32 = aom_highbd_v_predictor_16x32_sse2;
+  aom_highbd_v_predictor_16x8 = aom_highbd_v_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_16x8 = aom_highbd_v_predictor_16x8_sse2;
+  aom_highbd_v_predictor_32x16 = aom_highbd_v_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_32x16 = aom_highbd_v_predictor_32x16_sse2;
+  aom_highbd_v_predictor_32x32 = aom_highbd_v_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_32x32 = aom_highbd_v_predictor_32x32_sse2;
+  aom_highbd_v_predictor_4x4 = aom_highbd_v_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_4x4 = aom_highbd_v_predictor_4x4_sse2;
+  aom_highbd_v_predictor_4x8 = aom_highbd_v_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_4x8 = aom_highbd_v_predictor_4x8_sse2;
+  aom_highbd_v_predictor_8x16 = aom_highbd_v_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_8x16 = aom_highbd_v_predictor_8x16_sse2;
+  aom_highbd_v_predictor_8x4 = aom_highbd_v_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_8x4 = aom_highbd_v_predictor_8x4_sse2;
+  aom_highbd_v_predictor_8x8 = aom_highbd_v_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_8x8 = aom_highbd_v_predictor_8x8_sse2;
+  aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_sse4_1;
+  aom_lpf_horizontal_14 = aom_lpf_horizontal_14_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_14 = aom_lpf_horizontal_14_sse2;
+  aom_lpf_horizontal_14_dual = aom_lpf_horizontal_14_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_14_dual = aom_lpf_horizontal_14_dual_sse2;
+  aom_lpf_horizontal_4 = aom_lpf_horizontal_4_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_4 = aom_lpf_horizontal_4_sse2;
+  aom_lpf_horizontal_4_dual = aom_lpf_horizontal_4_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_4_dual = aom_lpf_horizontal_4_dual_sse2;
+  aom_lpf_horizontal_6 = aom_lpf_horizontal_6_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_6 = aom_lpf_horizontal_6_sse2;
+  aom_lpf_horizontal_6_dual = aom_lpf_horizontal_6_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_6_dual = aom_lpf_horizontal_6_dual_sse2;
+  aom_lpf_horizontal_8 = aom_lpf_horizontal_8_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_8 = aom_lpf_horizontal_8_sse2;
+  aom_lpf_horizontal_8_dual = aom_lpf_horizontal_8_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_8_dual = aom_lpf_horizontal_8_dual_sse2;
+  aom_lpf_vertical_14 = aom_lpf_vertical_14_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_14 = aom_lpf_vertical_14_sse2;
+  aom_lpf_vertical_14_dual = aom_lpf_vertical_14_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_14_dual = aom_lpf_vertical_14_dual_sse2;
+  aom_lpf_vertical_4 = aom_lpf_vertical_4_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_4 = aom_lpf_vertical_4_sse2;
+  aom_lpf_vertical_4_dual = aom_lpf_vertical_4_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_4_dual = aom_lpf_vertical_4_dual_sse2;
+  aom_lpf_vertical_6 = aom_lpf_vertical_6_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_6 = aom_lpf_vertical_6_sse2;
+  aom_lpf_vertical_6_dual = aom_lpf_vertical_6_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_6_dual = aom_lpf_vertical_6_dual_sse2;
+  aom_lpf_vertical_8 = aom_lpf_vertical_8_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_8 = aom_lpf_vertical_8_sse2;
+  aom_lpf_vertical_8_dual = aom_lpf_vertical_8_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_8_dual = aom_lpf_vertical_8_dual_sse2;
+  aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_avx2;
+  aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_avx2;
+  aom_paeth_predictor_16x4 = aom_paeth_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x4 = aom_paeth_predictor_16x4_ssse3;
+  aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_avx2;
+  aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_avx2;
+  aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_avx2;
+  aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_avx2;
+  aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_avx2;
+  aom_paeth_predictor_32x8 = aom_paeth_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x8 = aom_paeth_predictor_32x8_ssse3;
+  aom_paeth_predictor_4x16 = aom_paeth_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x16 = aom_paeth_predictor_4x16_ssse3;
+  aom_paeth_predictor_4x4 = aom_paeth_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x4 = aom_paeth_predictor_4x4_ssse3;
+  aom_paeth_predictor_4x8 = aom_paeth_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x8 = aom_paeth_predictor_4x8_ssse3;
+  aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_avx2;
+  aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_avx2;
+  aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_avx2;
+  aom_paeth_predictor_8x16 = aom_paeth_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x16 = aom_paeth_predictor_8x16_ssse3;
+  aom_paeth_predictor_8x32 = aom_paeth_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x32 = aom_paeth_predictor_8x32_ssse3;
+  aom_paeth_predictor_8x4 = aom_paeth_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x4 = aom_paeth_predictor_8x4_ssse3;
+  aom_paeth_predictor_8x8 = aom_paeth_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x8 = aom_paeth_predictor_8x8_ssse3;
+  aom_smooth_h_predictor_16x16 = aom_smooth_h_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x16 = aom_smooth_h_predictor_16x16_ssse3;
+  aom_smooth_h_predictor_16x32 = aom_smooth_h_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x32 = aom_smooth_h_predictor_16x32_ssse3;
+  aom_smooth_h_predictor_16x4 = aom_smooth_h_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x4 = aom_smooth_h_predictor_16x4_ssse3;
+  aom_smooth_h_predictor_16x64 = aom_smooth_h_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x64 = aom_smooth_h_predictor_16x64_ssse3;
+  aom_smooth_h_predictor_16x8 = aom_smooth_h_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x8 = aom_smooth_h_predictor_16x8_ssse3;
+  aom_smooth_h_predictor_32x16 = aom_smooth_h_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x16 = aom_smooth_h_predictor_32x16_ssse3;
+  aom_smooth_h_predictor_32x32 = aom_smooth_h_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x32 = aom_smooth_h_predictor_32x32_ssse3;
+  aom_smooth_h_predictor_32x64 = aom_smooth_h_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x64 = aom_smooth_h_predictor_32x64_ssse3;
+  aom_smooth_h_predictor_32x8 = aom_smooth_h_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x8 = aom_smooth_h_predictor_32x8_ssse3;
+  aom_smooth_h_predictor_4x16 = aom_smooth_h_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x16 = aom_smooth_h_predictor_4x16_ssse3;
+  aom_smooth_h_predictor_4x4 = aom_smooth_h_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x4 = aom_smooth_h_predictor_4x4_ssse3;
+  aom_smooth_h_predictor_4x8 = aom_smooth_h_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x8 = aom_smooth_h_predictor_4x8_ssse3;
+  aom_smooth_h_predictor_64x16 = aom_smooth_h_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x16 = aom_smooth_h_predictor_64x16_ssse3;
+  aom_smooth_h_predictor_64x32 = aom_smooth_h_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x32 = aom_smooth_h_predictor_64x32_ssse3;
+  aom_smooth_h_predictor_64x64 = aom_smooth_h_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x64 = aom_smooth_h_predictor_64x64_ssse3;
+  aom_smooth_h_predictor_8x16 = aom_smooth_h_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x16 = aom_smooth_h_predictor_8x16_ssse3;
+  aom_smooth_h_predictor_8x32 = aom_smooth_h_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x32 = aom_smooth_h_predictor_8x32_ssse3;
+  aom_smooth_h_predictor_8x4 = aom_smooth_h_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x4 = aom_smooth_h_predictor_8x4_ssse3;
+  aom_smooth_h_predictor_8x8 = aom_smooth_h_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x8 = aom_smooth_h_predictor_8x8_ssse3;
+  aom_smooth_predictor_16x16 = aom_smooth_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x16 = aom_smooth_predictor_16x16_ssse3;
+  aom_smooth_predictor_16x32 = aom_smooth_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x32 = aom_smooth_predictor_16x32_ssse3;
+  aom_smooth_predictor_16x4 = aom_smooth_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x4 = aom_smooth_predictor_16x4_ssse3;
+  aom_smooth_predictor_16x64 = aom_smooth_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x64 = aom_smooth_predictor_16x64_ssse3;
+  aom_smooth_predictor_16x8 = aom_smooth_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x8 = aom_smooth_predictor_16x8_ssse3;
+  aom_smooth_predictor_32x16 = aom_smooth_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x16 = aom_smooth_predictor_32x16_ssse3;
+  aom_smooth_predictor_32x32 = aom_smooth_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x32 = aom_smooth_predictor_32x32_ssse3;
+  aom_smooth_predictor_32x64 = aom_smooth_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x64 = aom_smooth_predictor_32x64_ssse3;
+  aom_smooth_predictor_32x8 = aom_smooth_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x8 = aom_smooth_predictor_32x8_ssse3;
+  aom_smooth_predictor_4x16 = aom_smooth_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x16 = aom_smooth_predictor_4x16_ssse3;
+  aom_smooth_predictor_4x4 = aom_smooth_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x4 = aom_smooth_predictor_4x4_ssse3;
+  aom_smooth_predictor_4x8 = aom_smooth_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x8 = aom_smooth_predictor_4x8_ssse3;
+  aom_smooth_predictor_64x16 = aom_smooth_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x16 = aom_smooth_predictor_64x16_ssse3;
+  aom_smooth_predictor_64x32 = aom_smooth_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x32 = aom_smooth_predictor_64x32_ssse3;
+  aom_smooth_predictor_64x64 = aom_smooth_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x64 = aom_smooth_predictor_64x64_ssse3;
+  aom_smooth_predictor_8x16 = aom_smooth_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x16 = aom_smooth_predictor_8x16_ssse3;
+  aom_smooth_predictor_8x32 = aom_smooth_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x32 = aom_smooth_predictor_8x32_ssse3;
+  aom_smooth_predictor_8x4 = aom_smooth_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x4 = aom_smooth_predictor_8x4_ssse3;
+  aom_smooth_predictor_8x8 = aom_smooth_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x8 = aom_smooth_predictor_8x8_ssse3;
+  aom_smooth_v_predictor_16x16 = aom_smooth_v_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x16 = aom_smooth_v_predictor_16x16_ssse3;
+  aom_smooth_v_predictor_16x32 = aom_smooth_v_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x32 = aom_smooth_v_predictor_16x32_ssse3;
+  aom_smooth_v_predictor_16x4 = aom_smooth_v_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x4 = aom_smooth_v_predictor_16x4_ssse3;
+  aom_smooth_v_predictor_16x64 = aom_smooth_v_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x64 = aom_smooth_v_predictor_16x64_ssse3;
+  aom_smooth_v_predictor_16x8 = aom_smooth_v_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x8 = aom_smooth_v_predictor_16x8_ssse3;
+  aom_smooth_v_predictor_32x16 = aom_smooth_v_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x16 = aom_smooth_v_predictor_32x16_ssse3;
+  aom_smooth_v_predictor_32x32 = aom_smooth_v_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x32 = aom_smooth_v_predictor_32x32_ssse3;
+  aom_smooth_v_predictor_32x64 = aom_smooth_v_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x64 = aom_smooth_v_predictor_32x64_ssse3;
+  aom_smooth_v_predictor_32x8 = aom_smooth_v_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x8 = aom_smooth_v_predictor_32x8_ssse3;
+  aom_smooth_v_predictor_4x16 = aom_smooth_v_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x16 = aom_smooth_v_predictor_4x16_ssse3;
+  aom_smooth_v_predictor_4x4 = aom_smooth_v_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x4 = aom_smooth_v_predictor_4x4_ssse3;
+  aom_smooth_v_predictor_4x8 = aom_smooth_v_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x8 = aom_smooth_v_predictor_4x8_ssse3;
+  aom_smooth_v_predictor_64x16 = aom_smooth_v_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x16 = aom_smooth_v_predictor_64x16_ssse3;
+  aom_smooth_v_predictor_64x32 = aom_smooth_v_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x32 = aom_smooth_v_predictor_64x32_ssse3;
+  aom_smooth_v_predictor_64x64 = aom_smooth_v_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x64 = aom_smooth_v_predictor_64x64_ssse3;
+  aom_smooth_v_predictor_8x16 = aom_smooth_v_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x16 = aom_smooth_v_predictor_8x16_ssse3;
+  aom_smooth_v_predictor_8x32 = aom_smooth_v_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x32 = aom_smooth_v_predictor_8x32_ssse3;
+  aom_smooth_v_predictor_8x4 = aom_smooth_v_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x4 = aom_smooth_v_predictor_8x4_ssse3;
+  aom_smooth_v_predictor_8x8 = aom_smooth_v_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x8 = aom_smooth_v_predictor_8x8_ssse3;
+  aom_v_predictor_16x16 = aom_v_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x16 = aom_v_predictor_16x16_sse2;
+  aom_v_predictor_16x32 = aom_v_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x32 = aom_v_predictor_16x32_sse2;
+  aom_v_predictor_16x4 = aom_v_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x4 = aom_v_predictor_16x4_sse2;
+  aom_v_predictor_16x64 = aom_v_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x64 = aom_v_predictor_16x64_sse2;
+  aom_v_predictor_16x8 = aom_v_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x8 = aom_v_predictor_16x8_sse2;
+  aom_v_predictor_32x16 = aom_v_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_32x16 = aom_v_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x16 = aom_v_predictor_32x16_avx2;
+  aom_v_predictor_32x32 = aom_v_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_32x32 = aom_v_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x32 = aom_v_predictor_32x32_avx2;
+  aom_v_predictor_32x64 = aom_v_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_32x64 = aom_v_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x64 = aom_v_predictor_32x64_avx2;
+  aom_v_predictor_32x8 = aom_v_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_32x8 = aom_v_predictor_32x8_sse2;
+  aom_v_predictor_4x16 = aom_v_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_4x16 = aom_v_predictor_4x16_sse2;
+  aom_v_predictor_4x4 = aom_v_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_4x4 = aom_v_predictor_4x4_sse2;
+  aom_v_predictor_4x8 = aom_v_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_4x8 = aom_v_predictor_4x8_sse2;
+  aom_v_predictor_64x16 = aom_v_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_64x16 = aom_v_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x16 = aom_v_predictor_64x16_avx2;
+  aom_v_predictor_64x32 = aom_v_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_64x32 = aom_v_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x32 = aom_v_predictor_64x32_avx2;
+  aom_v_predictor_64x64 = aom_v_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_64x64 = aom_v_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x64 = aom_v_predictor_64x64_avx2;
+  aom_v_predictor_8x16 = aom_v_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_8x16 = aom_v_predictor_8x16_sse2;
+  aom_v_predictor_8x32 = aom_v_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_8x32 = aom_v_predictor_8x32_sse2;
+  aom_v_predictor_8x4 = aom_v_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_8x4 = aom_v_predictor_8x4_sse2;
+  aom_v_predictor_8x8 = aom_v_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_8x8 = aom_v_predictor_8x8_sse2;
+  av1_round_shift_array = av1_round_shift_array_c;
+  if (flags & HAS_SSE4_1)
+    av1_round_shift_array = av1_round_shift_array_sse4_1;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h b/third_party/libaom/source/config/linux/ia32/config/aom_scale_rtcd.h
similarity index 71%
rename from third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
rename to third_party/libaom/source/config/linux/ia32/config/aom_scale_rtcd.h
index fbf3bde..9fe39d9 100644
--- a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
+++ b/third_party/libaom/source/config/linux/ia32/config/aom_scale_rtcd.h
@@ -1,3 +1,4 @@
+// This file is generated. Do not edit.
 #ifndef AOM_SCALE_RTCD_H_
 #define AOM_SCALE_RTCD_H_
 
@@ -13,13 +14,15 @@
 extern "C" {
 #endif
 
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                const int num_planes);
 #define aom_extend_frame_borders aom_extend_frame_borders_c
 
 void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
 #define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
 
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf,
+                                      const int num_planes);
 #define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
 
 void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
@@ -69,7 +72,8 @@
 #define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
 
 void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
+                           struct yv12_buffer_config* dst_bc,
+                           const int num_planes);
 #define aom_yv12_copy_frame aom_yv12_copy_frame_c
 
 void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
@@ -84,9 +88,34 @@
                        struct yv12_buffer_config* dst_ybc);
 #define aom_yv12_copy_y aom_yv12_copy_y_c
 
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                     const int num_planes);
 #define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
 
+void aom_yv12_partial_copy_u_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_u aom_yv12_partial_copy_u_c
+
+void aom_yv12_partial_copy_v_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_v aom_yv12_partial_copy_v_c
+
+void aom_yv12_partial_copy_y_c(const struct yv12_buffer_config* src_ybc,
+                               struct yv12_buffer_config* dst_ybc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_y aom_yv12_partial_copy_y_c
+
 void aom_scale_rtcd(void);
 
 #ifdef RTCD_C
diff --git a/third_party/libaom/source/config/linux/ia32/config/av1_rtcd.h b/third_party/libaom/source/config/linux/ia32/config/av1_rtcd.h
new file mode 100644
index 0000000..724cd0b68
--- /dev/null
+++ b/third_party/libaom/source/config/linux/ia32/config/av1_rtcd.h
@@ -0,0 +1,2225 @@
+// This file is generated. Do not edit.
+#ifndef AV1_RTCD_H_
+#define AV1_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * AV1
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/txfm_common.h"
+#include "av1/common/av1_txfm.h"
+#include "av1/common/common.h"
+#include "av1/common/convolve.h"
+#include "av1/common/enums.h"
+#include "av1/common/filter.h"
+#include "av1/common/odintrin.h"
+#include "av1/common/quant_common.h"
+#include "av1/common/restoration.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct txfm_param;
+struct aom_variance_vtable;
+struct search_site_config;
+struct yv12_buffer_config;
+
+/* Function pointers return by CfL functions */
+typedef void (*cfl_subsample_lbd_fn)(const uint8_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subsample_hbd_fn)(const uint16_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subtract_average_fn)(const uint16_t* src, int16_t* dst);
+
+typedef void (*cfl_predict_lbd_fn)(const int16_t* src,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3);
+
+typedef void (*cfl_predict_hbd_fn)(const int16_t* src,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3,
+                                   int bd);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void apply_selfguided_restoration_c(const uint8_t* dat,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    int eps,
+                                    const int* xqd,
+                                    uint8_t* dst,
+                                    int dst_stride,
+                                    int32_t* tmpbuf,
+                                    int bit_depth,
+                                    int highbd);
+void apply_selfguided_restoration_sse4_1(const uint8_t* dat,
+                                         int width,
+                                         int height,
+                                         int stride,
+                                         int eps,
+                                         const int* xqd,
+                                         uint8_t* dst,
+                                         int dst_stride,
+                                         int32_t* tmpbuf,
+                                         int bit_depth,
+                                         int highbd);
+void apply_selfguided_restoration_avx2(const uint8_t* dat,
+                                       int width,
+                                       int height,
+                                       int stride,
+                                       int eps,
+                                       const int* xqd,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int32_t* tmpbuf,
+                                       int bit_depth,
+                                       int highbd);
+RTCD_EXTERN void (*apply_selfguided_restoration)(const uint8_t* dat,
+                                                 int width,
+                                                 int height,
+                                                 int stride,
+                                                 int eps,
+                                                 const int* xqd,
+                                                 uint8_t* dst,
+                                                 int dst_stride,
+                                                 int32_t* tmpbuf,
+                                                 int bit_depth,
+                                                 int highbd);
+
+void av1_build_compound_diffwtd_mask_c(uint8_t* mask,
+                                       DIFFWTD_MASK_TYPE mask_type,
+                                       const uint8_t* src0,
+                                       int src0_stride,
+                                       const uint8_t* src1,
+                                       int src1_stride,
+                                       int h,
+                                       int w);
+void av1_build_compound_diffwtd_mask_sse4_1(uint8_t* mask,
+                                            DIFFWTD_MASK_TYPE mask_type,
+                                            const uint8_t* src0,
+                                            int src0_stride,
+                                            const uint8_t* src1,
+                                            int src1_stride,
+                                            int h,
+                                            int w);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask)(uint8_t* mask,
+                                                    DIFFWTD_MASK_TYPE mask_type,
+                                                    const uint8_t* src0,
+                                                    int src0_stride,
+                                                    const uint8_t* src1,
+                                                    int src1_stride,
+                                                    int h,
+                                                    int w);
+
+void av1_build_compound_diffwtd_mask_d16_c(uint8_t* mask,
+                                           DIFFWTD_MASK_TYPE mask_type,
+                                           const CONV_BUF_TYPE* src0,
+                                           int src0_stride,
+                                           const CONV_BUF_TYPE* src1,
+                                           int src1_stride,
+                                           int h,
+                                           int w,
+                                           ConvolveParams* conv_params,
+                                           int bd);
+void av1_build_compound_diffwtd_mask_d16_sse4_1(uint8_t* mask,
+                                                DIFFWTD_MASK_TYPE mask_type,
+                                                const CONV_BUF_TYPE* src0,
+                                                int src0_stride,
+                                                const CONV_BUF_TYPE* src1,
+                                                int src1_stride,
+                                                int h,
+                                                int w,
+                                                ConvolveParams* conv_params,
+                                                int bd);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask_d16)(
+    uint8_t* mask,
+    DIFFWTD_MASK_TYPE mask_type,
+    const CONV_BUF_TYPE* src0,
+    int src0_stride,
+    const CONV_BUF_TYPE* src1,
+    int src1_stride,
+    int h,
+    int w,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_build_compound_diffwtd_mask_highbd_c(uint8_t* mask,
+                                              DIFFWTD_MASK_TYPE mask_type,
+                                              const uint8_t* src0,
+                                              int src0_stride,
+                                              const uint8_t* src1,
+                                              int src1_stride,
+                                              int h,
+                                              int w,
+                                              int bd);
+void av1_build_compound_diffwtd_mask_highbd_ssse3(uint8_t* mask,
+                                                  DIFFWTD_MASK_TYPE mask_type,
+                                                  const uint8_t* src0,
+                                                  int src0_stride,
+                                                  const uint8_t* src1,
+                                                  int src1_stride,
+                                                  int h,
+                                                  int w,
+                                                  int bd);
+void av1_build_compound_diffwtd_mask_highbd_avx2(uint8_t* mask,
+                                                 DIFFWTD_MASK_TYPE mask_type,
+                                                 const uint8_t* src0,
+                                                 int src0_stride,
+                                                 const uint8_t* src1,
+                                                 int src1_stride,
+                                                 int h,
+                                                 int w,
+                                                 int bd);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask_highbd)(
+    uint8_t* mask,
+    DIFFWTD_MASK_TYPE mask_type,
+    const uint8_t* src0,
+    int src0_stride,
+    const uint8_t* src1,
+    int src1_stride,
+    int h,
+    int w,
+    int bd);
+
+void av1_convolve_2d_copy_sr_c(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_sse2(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_avx2(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_copy_sr)(const uint8_t* src,
+                                            int src_stride,
+                                            uint8_t* dst,
+                                            int dst_stride,
+                                            int w,
+                                            int h,
+                                            InterpFilterParams* filter_params_x,
+                                            InterpFilterParams* filter_params_y,
+                                            const int subpel_x_q4,
+                                            const int subpel_y_q4,
+                                            ConvolveParams* conv_params);
+
+void av1_convolve_2d_scale_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_qn,
+                             const int x_step_qn,
+                             const int subpel_y_q4,
+                             const int y_step_qn,
+                             ConvolveParams* conv_params);
+void av1_convolve_2d_scale_sse4_1(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_qn,
+                                  const int x_step_qn,
+                                  const int subpel_y_q4,
+                                  const int y_step_qn,
+                                  ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_scale)(const uint8_t* src,
+                                          int src_stride,
+                                          uint8_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          InterpFilterParams* filter_params_x,
+                                          InterpFilterParams* filter_params_y,
+                                          const int subpel_x_qn,
+                                          const int x_step_qn,
+                                          const int subpel_y_q4,
+                                          const int y_step_qn,
+                                          ConvolveParams* conv_params);
+
+void av1_convolve_2d_sr_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_convolve_2d_sr_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_convolve_2d_sr_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_sr)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_convolve_horiz_rs_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             const int16_t* x_filters,
+                             int x0_qn,
+                             int x_step_qn);
+void av1_convolve_horiz_rs_sse4_1(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  const int16_t* x_filters,
+                                  int x0_qn,
+                                  int x_step_qn);
+RTCD_EXTERN void (*av1_convolve_horiz_rs)(const uint8_t* src,
+                                          int src_stride,
+                                          uint8_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          const int16_t* x_filters,
+                                          int x0_qn,
+                                          int x_step_qn);
+
+void av1_convolve_x_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_x_sr_sse2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+void av1_convolve_x_sr_avx2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_x_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_convolve_y_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_y_sr_sse2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+void av1_convolve_y_sr_avx2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_y_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_dr_prediction_z1_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z1 av1_dr_prediction_z1_c
+
+void av1_dr_prediction_z2_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z2 av1_dr_prediction_z2_c
+
+void av1_dr_prediction_z3_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z3 av1_dr_prediction_z3_c
+
+void av1_filter_intra_edge_c(uint8_t* p, int sz, int strength);
+void av1_filter_intra_edge_sse4_1(uint8_t* p, int sz, int strength);
+RTCD_EXTERN void (*av1_filter_intra_edge)(uint8_t* p, int sz, int strength);
+
+void av1_filter_intra_edge_high_c(uint16_t* p, int sz, int strength);
+void av1_filter_intra_edge_high_sse4_1(uint16_t* p, int sz, int strength);
+RTCD_EXTERN void (*av1_filter_intra_edge_high)(uint16_t* p,
+                                               int sz,
+                                               int strength);
+
+void av1_filter_intra_predictor_c(uint8_t* dst,
+                                  ptrdiff_t stride,
+                                  TX_SIZE tx_size,
+                                  const uint8_t* above,
+                                  const uint8_t* left,
+                                  int mode);
+void av1_filter_intra_predictor_sse4_1(uint8_t* dst,
+                                       ptrdiff_t stride,
+                                       TX_SIZE tx_size,
+                                       const uint8_t* above,
+                                       const uint8_t* left,
+                                       int mode);
+RTCD_EXTERN void (*av1_filter_intra_predictor)(uint8_t* dst,
+                                               ptrdiff_t stride,
+                                               TX_SIZE tx_size,
+                                               const uint8_t* above,
+                                               const uint8_t* left,
+                                               int mode);
+
+void av1_highbd_convolve8_c(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h,
+                            int bps);
+#define av1_highbd_convolve8 av1_highbd_convolve8_c
+
+void av1_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define av1_highbd_convolve8_horiz av1_highbd_convolve8_horiz_c
+
+void av1_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define av1_highbd_convolve8_vert av1_highbd_convolve8_vert_c
+
+void av1_highbd_convolve_2d_copy_sr_c(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_convolve_2d_copy_sr_sse2(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int subpel_y_q4,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+void av1_highbd_convolve_2d_copy_sr_avx2(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int subpel_y_q4,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_copy_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_2d_scale_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int x_step_qn,
+                                    const int subpel_y_q4,
+                                    const int y_step_qn,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_2d_scale_sse4_1(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int x_step_qn,
+                                         const int subpel_y_q4,
+                                         const int y_step_qn,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_scale)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int x_step_qn,
+    const int subpel_y_q4,
+    const int y_step_qn,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_2d_sr_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_convolve_2d_sr_ssse3(const uint16_t* src,
+                                     int src_stride,
+                                     uint16_t* dst,
+                                     int dst_stride,
+                                     int w,
+                                     int h,
+                                     InterpFilterParams* filter_params_x,
+                                     InterpFilterParams* filter_params_y,
+                                     const int subpel_x_q4,
+                                     const int subpel_y_q4,
+                                     ConvolveParams* conv_params,
+                                     int bd);
+void av1_highbd_convolve_2d_sr_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_avg_c(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve_avg av1_highbd_convolve_avg_c
+
+void av1_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define av1_highbd_convolve_copy av1_highbd_convolve_copy_c
+
+void av1_highbd_convolve_horiz_rs_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    const int16_t* x_filters,
+                                    int x0_qn,
+                                    int x_step_qn,
+                                    int bd);
+void av1_highbd_convolve_horiz_rs_sse4_1(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         const int16_t* x_filters,
+                                         int x0_qn,
+                                         int x_step_qn,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_horiz_rs)(const uint16_t* src,
+                                                 int src_stride,
+                                                 uint16_t* dst,
+                                                 int dst_stride,
+                                                 int w,
+                                                 int h,
+                                                 const int16_t* x_filters,
+                                                 int x0_qn,
+                                                 int x_step_qn,
+                                                 int bd);
+
+void av1_highbd_convolve_x_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+void av1_highbd_convolve_x_sr_ssse3(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_x_sr_avx2(const uint16_t* src,
+                                   int src_stride,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params,
+                                   int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_x_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_y_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+void av1_highbd_convolve_y_sr_ssse3(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_y_sr_avx2(const uint16_t* src,
+                                   int src_stride,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params,
+                                   int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_y_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_dr_prediction_z1_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z1 av1_highbd_dr_prediction_z1_c
+
+void av1_highbd_dr_prediction_z2_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z2 av1_highbd_dr_prediction_z2_c
+
+void av1_highbd_dr_prediction_z3_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z3 av1_highbd_dr_prediction_z3_c
+
+void av1_highbd_iwht4x4_16_add_c(const tran_low_t* input,
+                                 uint8_t* dest,
+                                 int dest_stride,
+                                 int bd);
+#define av1_highbd_iwht4x4_16_add av1_highbd_iwht4x4_16_add_c
+
+void av1_highbd_iwht4x4_1_add_c(const tran_low_t* input,
+                                uint8_t* dest,
+                                int dest_stride,
+                                int bd);
+#define av1_highbd_iwht4x4_1_add av1_highbd_iwht4x4_1_add_c
+
+void av1_highbd_jnt_convolve_2d_c(const uint16_t* src,
+                                  int src_stride,
+                                  uint16_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params,
+                                  int bd);
+void av1_highbd_jnt_convolve_2d_sse4_1(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+void av1_highbd_jnt_convolve_2d_avx2(const uint16_t* src,
+                                     int src_stride,
+                                     uint16_t* dst,
+                                     int dst_stride,
+                                     int w,
+                                     int h,
+                                     InterpFilterParams* filter_params_x,
+                                     InterpFilterParams* filter_params_y,
+                                     const int subpel_x_q4,
+                                     const int subpel_y_q4,
+                                     ConvolveParams* conv_params,
+                                     int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_2d)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_2d_copy_c(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+void av1_highbd_jnt_convolve_2d_copy_sse4_1(const uint16_t* src,
+                                            int src_stride,
+                                            uint16_t* dst,
+                                            int dst_stride,
+                                            int w,
+                                            int h,
+                                            InterpFilterParams* filter_params_x,
+                                            InterpFilterParams* filter_params_y,
+                                            const int subpel_x_q4,
+                                            const int subpel_y_q4,
+                                            ConvolveParams* conv_params,
+                                            int bd);
+void av1_highbd_jnt_convolve_2d_copy_avx2(const uint16_t* src,
+                                          int src_stride,
+                                          uint16_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          InterpFilterParams* filter_params_x,
+                                          InterpFilterParams* filter_params_y,
+                                          const int subpel_x_q4,
+                                          const int subpel_y_q4,
+                                          ConvolveParams* conv_params,
+                                          int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_2d_copy)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_x_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_jnt_convolve_x_sse4_1(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_jnt_convolve_x_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_x)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_y_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_jnt_convolve_y_sse4_1(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_jnt_convolve_y_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_y)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_warp_affine_c(const int32_t* mat,
+                              const uint16_t* ref,
+                              int width,
+                              int height,
+                              int stride,
+                              uint16_t* pred,
+                              int p_col,
+                              int p_row,
+                              int p_width,
+                              int p_height,
+                              int p_stride,
+                              int subsampling_x,
+                              int subsampling_y,
+                              int bd,
+                              ConvolveParams* conv_params,
+                              int16_t alpha,
+                              int16_t beta,
+                              int16_t gamma,
+                              int16_t delta);
+void av1_highbd_warp_affine_sse4_1(const int32_t* mat,
+                                   const uint16_t* ref,
+                                   int width,
+                                   int height,
+                                   int stride,
+                                   uint16_t* pred,
+                                   int p_col,
+                                   int p_row,
+                                   int p_width,
+                                   int p_height,
+                                   int p_stride,
+                                   int subsampling_x,
+                                   int subsampling_y,
+                                   int bd,
+                                   ConvolveParams* conv_params,
+                                   int16_t alpha,
+                                   int16_t beta,
+                                   int16_t gamma,
+                                   int16_t delta);
+RTCD_EXTERN void (*av1_highbd_warp_affine)(const int32_t* mat,
+                                           const uint16_t* ref,
+                                           int width,
+                                           int height,
+                                           int stride,
+                                           uint16_t* pred,
+                                           int p_col,
+                                           int p_row,
+                                           int p_width,
+                                           int p_height,
+                                           int p_stride,
+                                           int subsampling_x,
+                                           int subsampling_y,
+                                           int bd,
+                                           ConvolveParams* conv_params,
+                                           int16_t alpha,
+                                           int16_t beta,
+                                           int16_t gamma,
+                                           int16_t delta);
+
+void av1_highbd_wiener_convolve_add_src_c(const uint8_t* src,
+                                          ptrdiff_t src_stride,
+                                          uint8_t* dst,
+                                          ptrdiff_t dst_stride,
+                                          const int16_t* filter_x,
+                                          int x_step_q4,
+                                          const int16_t* filter_y,
+                                          int y_step_q4,
+                                          int w,
+                                          int h,
+                                          const ConvolveParams* conv_params,
+                                          int bps);
+void av1_highbd_wiener_convolve_add_src_ssse3(const uint8_t* src,
+                                              ptrdiff_t src_stride,
+                                              uint8_t* dst,
+                                              ptrdiff_t dst_stride,
+                                              const int16_t* filter_x,
+                                              int x_step_q4,
+                                              const int16_t* filter_y,
+                                              int y_step_q4,
+                                              int w,
+                                              int h,
+                                              const ConvolveParams* conv_params,
+                                              int bps);
+void av1_highbd_wiener_convolve_add_src_avx2(const uint8_t* src,
+                                             ptrdiff_t src_stride,
+                                             uint8_t* dst,
+                                             ptrdiff_t dst_stride,
+                                             const int16_t* filter_x,
+                                             int x_step_q4,
+                                             const int16_t* filter_y,
+                                             int y_step_q4,
+                                             int w,
+                                             int h,
+                                             const ConvolveParams* conv_params,
+                                             int bps);
+RTCD_EXTERN void (*av1_highbd_wiener_convolve_add_src)(
+    const uint8_t* src,
+    ptrdiff_t src_stride,
+    uint8_t* dst,
+    ptrdiff_t dst_stride,
+    const int16_t* filter_x,
+    int x_step_q4,
+    const int16_t* filter_y,
+    int y_step_q4,
+    int w,
+    int h,
+    const ConvolveParams* conv_params,
+    int bps);
+
+void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_16x16_sse4_1(const int32_t* input,
+                                     uint16_t* output,
+                                     int stride,
+                                     TX_TYPE tx_type,
+                                     int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_16x16)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
+
+void av1_inv_txfm2d_add_16x4_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x4 av1_inv_txfm2d_add_16x4_c
+
+void av1_inv_txfm2d_add_16x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x64 av1_inv_txfm2d_add_16x64_c
+
+void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
+
+void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
+
+void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_32x32_avx2(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_32x32)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_32x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x64 av1_inv_txfm2d_add_32x64_c
+
+void av1_inv_txfm2d_add_32x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_32x8 av1_inv_txfm2d_add_32x8_c
+
+void av1_inv_txfm2d_add_4x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_4x16 av1_inv_txfm2d_add_4x16_c
+
+void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+void av1_inv_txfm2d_add_4x4_sse4_1(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_4x4)(const int32_t* input,
+                                           uint16_t* output,
+                                           int stride,
+                                           TX_TYPE tx_type,
+                                           int bd);
+
+void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
+
+void av1_inv_txfm2d_add_64x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x16 av1_inv_txfm2d_add_64x16_c
+
+void av1_inv_txfm2d_add_64x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x32 av1_inv_txfm2d_add_64x32_c
+
+void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_64x64_sse4_1(const int32_t* input,
+                                     uint16_t* output,
+                                     int stride,
+                                     TX_TYPE tx_type,
+                                     int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_64x64)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
+
+void av1_inv_txfm2d_add_8x32_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x32 av1_inv_txfm2d_add_8x32_c
+
+void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
+
+void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+void av1_inv_txfm2d_add_8x8_sse4_1(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_8x8)(const int32_t* input,
+                                           uint16_t* output,
+                                           int stride,
+                                           TX_TYPE tx_type,
+                                           int bd);
+
+void av1_inv_txfm_add_c(const tran_low_t* dqcoeff,
+                        uint8_t* dst,
+                        int stride,
+                        const TxfmParam* txfm_param);
+void av1_inv_txfm_add_ssse3(const tran_low_t* dqcoeff,
+                            uint8_t* dst,
+                            int stride,
+                            const TxfmParam* txfm_param);
+void av1_inv_txfm_add_avx2(const tran_low_t* dqcoeff,
+                           uint8_t* dst,
+                           int stride,
+                           const TxfmParam* txfm_param);
+RTCD_EXTERN void (*av1_inv_txfm_add)(const tran_low_t* dqcoeff,
+                                     uint8_t* dst,
+                                     int stride,
+                                     const TxfmParam* txfm_param);
+
+void av1_jnt_convolve_2d_c(const uint8_t* src,
+                           int src_stride,
+                           uint8_t* dst,
+                           int dst_stride,
+                           int w,
+                           int h,
+                           InterpFilterParams* filter_params_x,
+                           InterpFilterParams* filter_params_y,
+                           const int subpel_x_q4,
+                           const int subpel_y_q4,
+                           ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_ssse3(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_avx2(const uint8_t* src,
+                              int src_stride,
+                              uint8_t* dst,
+                              int dst_stride,
+                              int w,
+                              int h,
+                              InterpFilterParams* filter_params_x,
+                              InterpFilterParams* filter_params_y,
+                              const int subpel_x_q4,
+                              const int subpel_y_q4,
+                              ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d)(const uint8_t* src,
+                                        int src_stride,
+                                        uint8_t* dst,
+                                        int dst_stride,
+                                        int w,
+                                        int h,
+                                        InterpFilterParams* filter_params_x,
+                                        InterpFilterParams* filter_params_y,
+                                        const int subpel_x_q4,
+                                        const int subpel_y_q4,
+                                        ConvolveParams* conv_params);
+
+void av1_jnt_convolve_2d_copy_c(const uint8_t* src,
+                                int src_stride,
+                                uint8_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_sse2(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_avx2(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d_copy)(
+    const uint8_t* src,
+    int src_stride,
+    uint8_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params);
+
+void av1_jnt_convolve_x_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_x_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_jnt_convolve_x_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_x)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_jnt_convolve_y_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_y_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_jnt_convolve_y_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_y)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_selfguided_restoration_c(const uint8_t* dgd8,
+                                  int width,
+                                  int height,
+                                  int dgd_stride,
+                                  int32_t* flt0,
+                                  int32_t* flt1,
+                                  int flt_stride,
+                                  int sgr_params_idx,
+                                  int bit_depth,
+                                  int highbd);
+void av1_selfguided_restoration_sse4_1(const uint8_t* dgd8,
+                                       int width,
+                                       int height,
+                                       int dgd_stride,
+                                       int32_t* flt0,
+                                       int32_t* flt1,
+                                       int flt_stride,
+                                       int sgr_params_idx,
+                                       int bit_depth,
+                                       int highbd);
+void av1_selfguided_restoration_avx2(const uint8_t* dgd8,
+                                     int width,
+                                     int height,
+                                     int dgd_stride,
+                                     int32_t* flt0,
+                                     int32_t* flt1,
+                                     int flt_stride,
+                                     int sgr_params_idx,
+                                     int bit_depth,
+                                     int highbd);
+RTCD_EXTERN void (*av1_selfguided_restoration)(const uint8_t* dgd8,
+                                               int width,
+                                               int height,
+                                               int dgd_stride,
+                                               int32_t* flt0,
+                                               int32_t* flt1,
+                                               int flt_stride,
+                                               int sgr_params_idx,
+                                               int bit_depth,
+                                               int highbd);
+
+void av1_upsample_intra_edge_c(uint8_t* p, int sz);
+void av1_upsample_intra_edge_sse4_1(uint8_t* p, int sz);
+RTCD_EXTERN void (*av1_upsample_intra_edge)(uint8_t* p, int sz);
+
+void av1_upsample_intra_edge_high_c(uint16_t* p, int sz, int bd);
+void av1_upsample_intra_edge_high_sse4_1(uint16_t* p, int sz, int bd);
+RTCD_EXTERN void (*av1_upsample_intra_edge_high)(uint16_t* p, int sz, int bd);
+
+void av1_warp_affine_c(const int32_t* mat,
+                       const uint8_t* ref,
+                       int width,
+                       int height,
+                       int stride,
+                       uint8_t* pred,
+                       int p_col,
+                       int p_row,
+                       int p_width,
+                       int p_height,
+                       int p_stride,
+                       int subsampling_x,
+                       int subsampling_y,
+                       ConvolveParams* conv_params,
+                       int16_t alpha,
+                       int16_t beta,
+                       int16_t gamma,
+                       int16_t delta);
+void av1_warp_affine_sse4_1(const int32_t* mat,
+                            const uint8_t* ref,
+                            int width,
+                            int height,
+                            int stride,
+                            uint8_t* pred,
+                            int p_col,
+                            int p_row,
+                            int p_width,
+                            int p_height,
+                            int p_stride,
+                            int subsampling_x,
+                            int subsampling_y,
+                            ConvolveParams* conv_params,
+                            int16_t alpha,
+                            int16_t beta,
+                            int16_t gamma,
+                            int16_t delta);
+RTCD_EXTERN void (*av1_warp_affine)(const int32_t* mat,
+                                    const uint8_t* ref,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    uint8_t* pred,
+                                    int p_col,
+                                    int p_row,
+                                    int p_width,
+                                    int p_height,
+                                    int p_stride,
+                                    int subsampling_x,
+                                    int subsampling_y,
+                                    ConvolveParams* conv_params,
+                                    int16_t alpha,
+                                    int16_t beta,
+                                    int16_t gamma,
+                                    int16_t delta);
+
+void av1_wiener_convolve_add_src_c(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_sse2(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_avx2(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_wiener_convolve_add_src)(
+    const uint8_t* src,
+    ptrdiff_t src_stride,
+    uint8_t* dst,
+    ptrdiff_t dst_stride,
+    const int16_t* filter_x,
+    int x_step_q4,
+    const int16_t* filter_y,
+    int y_step_q4,
+    int w,
+    int h,
+    const ConvolveParams* conv_params);
+
+void cdef_filter_block_c(uint8_t* dst8,
+                         uint16_t* dst16,
+                         int dstride,
+                         const uint16_t* in,
+                         int pri_strength,
+                         int sec_strength,
+                         int dir,
+                         int pri_damping,
+                         int sec_damping,
+                         int bsize,
+                         int max,
+                         int coeff_shift);
+void cdef_filter_block_sse2(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+void cdef_filter_block_ssse3(uint8_t* dst8,
+                             uint16_t* dst16,
+                             int dstride,
+                             const uint16_t* in,
+                             int pri_strength,
+                             int sec_strength,
+                             int dir,
+                             int pri_damping,
+                             int sec_damping,
+                             int bsize,
+                             int max,
+                             int coeff_shift);
+void cdef_filter_block_sse4_1(uint8_t* dst8,
+                              uint16_t* dst16,
+                              int dstride,
+                              const uint16_t* in,
+                              int pri_strength,
+                              int sec_strength,
+                              int dir,
+                              int pri_damping,
+                              int sec_damping,
+                              int bsize,
+                              int max,
+                              int coeff_shift);
+void cdef_filter_block_avx2(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+RTCD_EXTERN void (*cdef_filter_block)(uint8_t* dst8,
+                                      uint16_t* dst16,
+                                      int dstride,
+                                      const uint16_t* in,
+                                      int pri_strength,
+                                      int sec_strength,
+                                      int dir,
+                                      int pri_damping,
+                                      int sec_damping,
+                                      int bsize,
+                                      int max,
+                                      int coeff_shift);
+
+int cdef_find_dir_c(const uint16_t* img,
+                    int stride,
+                    int32_t* var,
+                    int coeff_shift);
+int cdef_find_dir_sse2(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+int cdef_find_dir_ssse3(const uint16_t* img,
+                        int stride,
+                        int32_t* var,
+                        int coeff_shift);
+int cdef_find_dir_sse4_1(const uint16_t* img,
+                         int stride,
+                         int32_t* var,
+                         int coeff_shift);
+int cdef_find_dir_avx2(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+RTCD_EXTERN int (*cdef_find_dir)(const uint16_t* img,
+                                 int stride,
+                                 int32_t* var,
+                                 int coeff_shift);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_420_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_420_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_422_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_422_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_444_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_444_lbd)(
+    TX_SIZE tx_size);
+
+void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
+                                 int dstride,
+                                 const uint16_t* src,
+                                 int sstride,
+                                 int v,
+                                 int h);
+void copy_rect8_16bit_to_16bit_sse2(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+void copy_rect8_16bit_to_16bit_ssse3(uint16_t* dst,
+                                     int dstride,
+                                     const uint16_t* src,
+                                     int sstride,
+                                     int v,
+                                     int h);
+void copy_rect8_16bit_to_16bit_sse4_1(uint16_t* dst,
+                                      int dstride,
+                                      const uint16_t* src,
+                                      int sstride,
+                                      int v,
+                                      int h);
+void copy_rect8_16bit_to_16bit_avx2(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+RTCD_EXTERN void (*copy_rect8_16bit_to_16bit)(uint16_t* dst,
+                                              int dstride,
+                                              const uint16_t* src,
+                                              int sstride,
+                                              int v,
+                                              int h);
+
+void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
+                                int dstride,
+                                const uint8_t* src,
+                                int sstride,
+                                int v,
+                                int h);
+void copy_rect8_8bit_to_16bit_sse2(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+void copy_rect8_8bit_to_16bit_ssse3(uint16_t* dst,
+                                    int dstride,
+                                    const uint8_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+void copy_rect8_8bit_to_16bit_sse4_1(uint16_t* dst,
+                                     int dstride,
+                                     const uint8_t* src,
+                                     int sstride,
+                                     int v,
+                                     int h);
+void copy_rect8_8bit_to_16bit_avx2(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+RTCD_EXTERN void (*copy_rect8_8bit_to_16bit)(uint16_t* dst,
+                                             int dstride,
+                                             const uint8_t* src,
+                                             int sstride,
+                                             int v,
+                                             int h);
+
+cfl_predict_hbd_fn get_predict_hbd_fn_c(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_ssse3(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_hbd_fn (*get_predict_hbd_fn)(TX_SIZE tx_size);
+
+cfl_predict_lbd_fn get_predict_lbd_fn_c(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_ssse3(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_lbd_fn (*get_predict_lbd_fn)(TX_SIZE tx_size);
+
+cfl_subtract_average_fn get_subtract_average_fn_c(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_sse2(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subtract_average_fn (*get_subtract_average_fn)(TX_SIZE tx_size);
+
+void av1_rtcd(void);
+
+#ifdef RTCD_C
+#include "aom_ports/x86.h"
+static void setup_rtcd_internal(void) {
+  int flags = x86_simd_caps();
+
+  (void)flags;
+
+  apply_selfguided_restoration = apply_selfguided_restoration_c;
+  if (flags & HAS_SSE4_1)
+    apply_selfguided_restoration = apply_selfguided_restoration_sse4_1;
+  if (flags & HAS_AVX2)
+    apply_selfguided_restoration = apply_selfguided_restoration_avx2;
+  av1_build_compound_diffwtd_mask = av1_build_compound_diffwtd_mask_c;
+  if (flags & HAS_SSE4_1)
+    av1_build_compound_diffwtd_mask = av1_build_compound_diffwtd_mask_sse4_1;
+  av1_build_compound_diffwtd_mask_d16 = av1_build_compound_diffwtd_mask_d16_c;
+  if (flags & HAS_SSE4_1)
+    av1_build_compound_diffwtd_mask_d16 =
+        av1_build_compound_diffwtd_mask_d16_sse4_1;
+  av1_build_compound_diffwtd_mask_highbd =
+      av1_build_compound_diffwtd_mask_highbd_c;
+  if (flags & HAS_SSSE3)
+    av1_build_compound_diffwtd_mask_highbd =
+        av1_build_compound_diffwtd_mask_highbd_ssse3;
+  if (flags & HAS_AVX2)
+    av1_build_compound_diffwtd_mask_highbd =
+        av1_build_compound_diffwtd_mask_highbd_avx2;
+  av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_c;
+  if (flags & HAS_SSE2)
+    av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_avx2;
+  av1_convolve_2d_scale = av1_convolve_2d_scale_c;
+  if (flags & HAS_SSE4_1)
+    av1_convolve_2d_scale = av1_convolve_2d_scale_sse4_1;
+  av1_convolve_2d_sr = av1_convolve_2d_sr_c;
+  if (flags & HAS_SSE2)
+    av1_convolve_2d_sr = av1_convolve_2d_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_2d_sr = av1_convolve_2d_sr_avx2;
+  av1_convolve_horiz_rs = av1_convolve_horiz_rs_c;
+  if (flags & HAS_SSE4_1)
+    av1_convolve_horiz_rs = av1_convolve_horiz_rs_sse4_1;
+  av1_convolve_x_sr = av1_convolve_x_sr_c;
+  if (flags & HAS_SSE2)
+    av1_convolve_x_sr = av1_convolve_x_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_x_sr = av1_convolve_x_sr_avx2;
+  av1_convolve_y_sr = av1_convolve_y_sr_c;
+  if (flags & HAS_SSE2)
+    av1_convolve_y_sr = av1_convolve_y_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_y_sr = av1_convolve_y_sr_avx2;
+  av1_filter_intra_edge = av1_filter_intra_edge_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_edge = av1_filter_intra_edge_sse4_1;
+  av1_filter_intra_edge_high = av1_filter_intra_edge_high_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_edge_high = av1_filter_intra_edge_high_sse4_1;
+  av1_filter_intra_predictor = av1_filter_intra_predictor_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_predictor = av1_filter_intra_predictor_sse4_1;
+  av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_c;
+  if (flags & HAS_SSE2)
+    av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_avx2;
+  av1_highbd_convolve_2d_scale = av1_highbd_convolve_2d_scale_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_convolve_2d_scale = av1_highbd_convolve_2d_scale_sse4_1;
+  av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_avx2;
+  av1_highbd_convolve_horiz_rs = av1_highbd_convolve_horiz_rs_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_convolve_horiz_rs = av1_highbd_convolve_horiz_rs_sse4_1;
+  av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_avx2;
+  av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_avx2;
+  av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_avx2;
+  av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_avx2;
+  av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_avx2;
+  av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_avx2;
+  av1_highbd_warp_affine = av1_highbd_warp_affine_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_warp_affine = av1_highbd_warp_affine_sse4_1;
+  av1_highbd_wiener_convolve_add_src = av1_highbd_wiener_convolve_add_src_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_wiener_convolve_add_src =
+        av1_highbd_wiener_convolve_add_src_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_wiener_convolve_add_src =
+        av1_highbd_wiener_convolve_add_src_avx2;
+  av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_sse4_1;
+  av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_c;
+  if (flags & HAS_AVX2)
+    av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_avx2;
+  av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_sse4_1;
+  av1_inv_txfm2d_add_64x64 = av1_inv_txfm2d_add_64x64_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_64x64 = av1_inv_txfm2d_add_64x64_sse4_1;
+  av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_sse4_1;
+  av1_inv_txfm_add = av1_inv_txfm_add_c;
+  if (flags & HAS_SSSE3)
+    av1_inv_txfm_add = av1_inv_txfm_add_ssse3;
+  if (flags & HAS_AVX2)
+    av1_inv_txfm_add = av1_inv_txfm_add_avx2;
+  av1_jnt_convolve_2d = av1_jnt_convolve_2d_c;
+  if (flags & HAS_SSSE3)
+    av1_jnt_convolve_2d = av1_jnt_convolve_2d_ssse3;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_2d = av1_jnt_convolve_2d_avx2;
+  av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_c;
+  if (flags & HAS_SSE2)
+    av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_avx2;
+  av1_jnt_convolve_x = av1_jnt_convolve_x_c;
+  if (flags & HAS_SSE2)
+    av1_jnt_convolve_x = av1_jnt_convolve_x_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_x = av1_jnt_convolve_x_avx2;
+  av1_jnt_convolve_y = av1_jnt_convolve_y_c;
+  if (flags & HAS_SSE2)
+    av1_jnt_convolve_y = av1_jnt_convolve_y_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_y = av1_jnt_convolve_y_avx2;
+  av1_selfguided_restoration = av1_selfguided_restoration_c;
+  if (flags & HAS_SSE4_1)
+    av1_selfguided_restoration = av1_selfguided_restoration_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_selfguided_restoration = av1_selfguided_restoration_avx2;
+  av1_upsample_intra_edge = av1_upsample_intra_edge_c;
+  if (flags & HAS_SSE4_1)
+    av1_upsample_intra_edge = av1_upsample_intra_edge_sse4_1;
+  av1_upsample_intra_edge_high = av1_upsample_intra_edge_high_c;
+  if (flags & HAS_SSE4_1)
+    av1_upsample_intra_edge_high = av1_upsample_intra_edge_high_sse4_1;
+  av1_warp_affine = av1_warp_affine_c;
+  if (flags & HAS_SSE4_1)
+    av1_warp_affine = av1_warp_affine_sse4_1;
+  av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_c;
+  if (flags & HAS_SSE2)
+    av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_sse2;
+  if (flags & HAS_AVX2)
+    av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_avx2;
+  cdef_filter_block = cdef_filter_block_c;
+  if (flags & HAS_SSE2)
+    cdef_filter_block = cdef_filter_block_sse2;
+  if (flags & HAS_SSSE3)
+    cdef_filter_block = cdef_filter_block_ssse3;
+  if (flags & HAS_SSE4_1)
+    cdef_filter_block = cdef_filter_block_sse4_1;
+  if (flags & HAS_AVX2)
+    cdef_filter_block = cdef_filter_block_avx2;
+  cdef_find_dir = cdef_find_dir_c;
+  if (flags & HAS_SSE2)
+    cdef_find_dir = cdef_find_dir_sse2;
+  if (flags & HAS_SSSE3)
+    cdef_find_dir = cdef_find_dir_ssse3;
+  if (flags & HAS_SSE4_1)
+    cdef_find_dir = cdef_find_dir_sse4_1;
+  if (flags & HAS_AVX2)
+    cdef_find_dir = cdef_find_dir_avx2;
+  cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_avx2;
+  cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_avx2;
+  cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_avx2;
+  cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_avx2;
+  cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_avx2;
+  cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_avx2;
+  copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_c;
+  if (flags & HAS_SSE2)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse2;
+  if (flags & HAS_SSSE3)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_ssse3;
+  if (flags & HAS_SSE4_1)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse4_1;
+  if (flags & HAS_AVX2)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_avx2;
+  copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_c;
+  if (flags & HAS_SSE2)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse2;
+  if (flags & HAS_SSSE3)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_ssse3;
+  if (flags & HAS_SSE4_1)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse4_1;
+  if (flags & HAS_AVX2)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_avx2;
+  get_predict_hbd_fn = get_predict_hbd_fn_c;
+  if (flags & HAS_SSSE3)
+    get_predict_hbd_fn = get_predict_hbd_fn_ssse3;
+  if (flags & HAS_AVX2)
+    get_predict_hbd_fn = get_predict_hbd_fn_avx2;
+  get_predict_lbd_fn = get_predict_lbd_fn_c;
+  if (flags & HAS_SSSE3)
+    get_predict_lbd_fn = get_predict_lbd_fn_ssse3;
+  if (flags & HAS_AVX2)
+    get_predict_lbd_fn = get_predict_lbd_fn_avx2;
+  get_subtract_average_fn = get_subtract_average_fn_c;
+  if (flags & HAS_SSE2)
+    get_subtract_average_fn = get_subtract_average_fn_sse2;
+  if (flags & HAS_AVX2)
+    get_subtract_average_fn = get_subtract_average_fn_avx2;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/x64/aom_config.asm b/third_party/libaom/source/config/linux/x64/aom_config.asm
deleted file mode 100644
index 0c593b5..0000000
--- a/third_party/libaom/source/config/linux/x64/aom_config.asm
+++ /dev/null
@@ -1,168 +0,0 @@
-%define ARCH_ARM 0
-%define ARCH_MIPS 0
-%define ARCH_X86 0
-%define ARCH_X86_64 1
-%define HAVE_NEON 0
-%define HAVE_NEON_ASM 0
-%define HAVE_MIPS32 0
-%define HAVE_DSPR2 0
-%define HAVE_MSA 0
-%define HAVE_MIPS64 0
-%define HAVE_MMX 1
-%define HAVE_SSE 1
-%define HAVE_SSE2 1
-%define HAVE_SSE3 1
-%define HAVE_SSSE3 1
-%define HAVE_SSE4_1 1
-%define HAVE_AVX 1
-%define HAVE_AVX2 1
-%define HAVE_AOM_PORTS 1
-%define HAVE_FEXCEPT 1
-%define HAVE_PTHREAD_H 1
-%define HAVE_UNISTD_H 1
-%define HAVE_WXWIDGETS 0
-%define CONFIG_DEPENDENCY_TRACKING 1
-%define CONFIG_EXTERNAL_BUILD 1
-%define CONFIG_INSTALL_DOCS 0
-%define CONFIG_INSTALL_BINS 1
-%define CONFIG_INSTALL_LIBS 1
-%define CONFIG_INSTALL_SRCS 0
-%define CONFIG_DEBUG 0
-%define CONFIG_GPROF 0
-%define CONFIG_GCOV 0
-%define CONFIG_RVCT 0
-%define CONFIG_GCC 1
-%define CONFIG_MSVS 0
-%define CONFIG_PIC 1
-%define CONFIG_BIG_ENDIAN 0
-%define CONFIG_CODEC_SRCS 0
-%define CONFIG_DEBUG_LIBS 0
-%define CONFIG_RUNTIME_CPU_DETECT 1
-%define CONFIG_POSTPROC 1
-%define CONFIG_MULTITHREAD 1
-%define CONFIG_INTERNAL_STATS 0
-%define CONFIG_AV1_ENCODER 0
-%define CONFIG_AV1_DECODER 1
-%define CONFIG_AV1 1
-%define CONFIG_STATIC_MSVCRT 0
-%define CONFIG_SPATIAL_RESAMPLING 1
-%define CONFIG_REALTIME_ONLY 1
-%define CONFIG_SHARED 0
-%define CONFIG_STATIC 1
-%define CONFIG_SMALL 0
-%define CONFIG_POSTPROC_VISUALIZER 0
-%define CONFIG_OS_SUPPORT 1
-%define CONFIG_UNIT_TESTS 1
-%define CONFIG_WEBM_IO 1
-%define CONFIG_LIBYUV 1
-%define CONFIG_ACCOUNTING 0
-%define CONFIG_INSPECTION 0
-%define CONFIG_DECODE_PERF_TESTS 0
-%define CONFIG_ENCODE_PERF_TESTS 0
-%define CONFIG_COEFFICIENT_RANGE_CHECKING 0
-%define CONFIG_LOWBITDEPTH 1
-%define CONFIG_HIGHBITDEPTH 0
-%define CONFIG_EXPERIMENTAL 0
-%define CONFIG_SIZE_LIMIT 1
-%define CONFIG_FP_MB_STATS 0
-%define CONFIG_CDEF 1
-%define CONFIG_CDEF_SINGLEPASS 0
-%define CONFIG_VAR_TX 1
-%define CONFIG_RECT_TX 1
-%define CONFIG_RECT_TX_EXT 0
-%define CONFIG_TPL_MV 0
-%define CONFIG_DUAL_FILTER 1
-%define CONFIG_CONVOLVE_ROUND 1
-%define CONFIG_COMPOUND_ROUND 0
-%define CONFIG_EXT_TX 1
-%define CONFIG_DPCM_INTRA 0
-%define CONFIG_TX64X64 0
-%define CONFIG_EXT_INTRA 1
-%define CONFIG_INTRA_INTERP 0
-%define CONFIG_FILTER_INTRA 0
-%define CONFIG_INTRA_EDGE 0
-%define CONFIG_INTRABC 0
-%define CONFIG_EXT_INTER 1
-%define CONFIG_INTERINTRA 1
-%define CONFIG_WEDGE 1
-%define CONFIG_COMPOUND_SEGMENT 1
-%define CONFIG_EXT_REFS 1
-%define CONFIG_SPEED_REFS 0
-%define CONFIG_GF_GROUPS 0
-%define CONFIG_GLOBAL_MOTION 1
-%define CONFIG_NEW_QUANT 0
-%define CONFIG_SUPERTX 0
-%define CONFIG_ANS 0
-%define CONFIG_LOOP_RESTORATION 0
-%define CONFIG_EXT_PARTITION 0
-%define CONFIG_EXT_PARTITION_TYPES 0
-%define CONFIG_UNPOISON_PARTITION_CTX 0
-%define CONFIG_EXT_TILE 0
-%define CONFIG_MOTION_VAR 1
-%define CONFIG_NCOBMC 0
-%define CONFIG_WARPED_MOTION 1
-%define CONFIG_Q_ADAPT_PROBS 0
-%define CONFIG_BITSTREAM_DEBUG 0
-%define CONFIG_INTER_STATS_ONLY 0
-%define CONFIG_PALETTE_DELTA_ENCODING 0
-%define CONFIG_RAWBITS 0
-%define CONFIG_PVQ 0
-%define CONFIG_CFL 0
-%define CONFIG_XIPHRC 0
-%define CONFIG_DCT_ONLY 0
-%define CONFIG_DAALA_DCT4 0
-%define CONFIG_DAALA_DCT8 0
-%define CONFIG_DAALA_DCT16 0
-%define CONFIG_DAALA_DCT32 0
-%define CONFIG_DAALA_DCT64 0
-%define CONFIG_CB4X4 1
-%define CONFIG_CHROMA_2X2 0
-%define CONFIG_CHROMA_SUB8X8 1
-%define CONFIG_FRAME_SIZE 0
-%define CONFIG_DELTA_Q 1
-%define CONFIG_EXT_DELTA_Q 1
-%define CONFIG_ADAPT_SCAN 0
-%define CONFIG_FILTER_7BIT 1
-%define CONFIG_PARALLEL_DEBLOCKING 1
-%define CONFIG_LOOPFILTERING_ACROSS_TILES 1
-%define CONFIG_TEMPMV_SIGNALING 1
-%define CONFIG_RD_DEBUG 0
-%define CONFIG_REFERENCE_BUFFER 1
-%define CONFIG_COEF_INTERLEAVE 0
-%define CONFIG_ENTROPY_STATS 0
-%define CONFIG_MASKED_TX 0
-%define CONFIG_DEPENDENT_HORZTILES 0
-%define CONFIG_DIST_8X8 1
-%define CONFIG_TRIPRED 0
-%define CONFIG_PALETTE_THROUGHPUT 1
-%define CONFIG_REF_ADAPT 0
-%define CONFIG_LV_MAP 0
-%define CONFIG_TXK_SEL 0
-%define CONFIG_MV_COMPRESS 1
-%define CONFIG_SEGMENT_ZEROMV 0
-%define CONFIG_FRAME_SUPERRES 0
-%define CONFIG_NEW_MULTISYMBOL 0
-%define CONFIG_COMPOUND_SINGLEREF 0
-%define CONFIG_AOM_QM 1
-%define CONFIG_ONE_SIDED_COMPOUND 1
-%define CONFIG_EXT_COMP_REFS 1
-%define CONFIG_SMOOTH_HV 1
-%define CONFIG_VAR_REFS 0
-%define CONFIG_RECT_INTRA_PRED 1
-%define CONFIG_LGT 0
-%define CONFIG_SBL_SYMBOL 0
-%define CONFIG_NCOBMC_ADAPT_WEIGHT 0
-%define CONFIG_BGSPRITE 0
-%define CONFIG_VAR_TX_NO_TX_MODE 0
-%define CONFIG_MRC_TX 0
-%define CONFIG_LPF_DIRECT 0
-%define CONFIG_LOOPFILTER_LEVEL 0
-%define CONFIG_NO_FRAME_CONTEXT_SIGNALING 0
-%define CONFIG_TXMG 0
-%define CONFIG_HASH_ME 0
-%define CONFIG_COLORSPACE_HEADERS 0
-%define CONFIG_MFMV 0
-%define CONFIG_JNT_COMP 0
-%define CONFIG_ANALYZER 0
-%define DECODE_WIDTH_LIMIT 16384
-%define DECODE_HEIGHT_LIMIT 16384
diff --git a/third_party/libaom/source/config/linux/x64/aom_config.c b/third_party/libaom/source/config/linux/x64/aom_config.c
deleted file mode 100644
index 0166e5a..0000000
--- a/third_party/libaom/source/config/linux/x64/aom_config.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-#include "aom/aom_codec.h"
-static const char* const cfg = "--target=x86_64-linux-gcc --enable-external-build --enable-postproc --disable-av1-encoder --size-limit=16384x16384 --enable-realtime-only --disable-install-docs --disable-highbitdepth --enable-pic --as=yasm";
-const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/x64/aom_config.h b/third_party/libaom/source/config/linux/x64/aom_config.h
deleted file mode 100644
index 9429d44..0000000
--- a/third_party/libaom/source/config/linux/x64/aom_config.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-/* This file automatically generated by configure. Do not edit! */
-#ifndef AOM_CONFIG_H
-#define AOM_CONFIG_H
-#define RESTRICT    
-#define INLINE      inline
-#define ARCH_ARM 0
-#define ARCH_MIPS 0
-#define ARCH_X86 0
-#define ARCH_X86_64 1
-#define HAVE_NEON 0
-#define HAVE_NEON_ASM 0
-#define HAVE_MIPS32 0
-#define HAVE_DSPR2 0
-#define HAVE_MSA 0
-#define HAVE_MIPS64 0
-#define HAVE_MMX 1
-#define HAVE_SSE 1
-#define HAVE_SSE2 1
-#define HAVE_SSE3 1
-#define HAVE_SSSE3 1
-#define HAVE_SSE4_1 1
-#define HAVE_AVX 1
-#define HAVE_AVX2 1
-#define HAVE_AOM_PORTS 1
-#define HAVE_FEXCEPT 1
-#define HAVE_PTHREAD_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_WXWIDGETS 0
-#define CONFIG_DEPENDENCY_TRACKING 1
-#define CONFIG_EXTERNAL_BUILD 1
-#define CONFIG_INSTALL_DOCS 0
-#define CONFIG_INSTALL_BINS 1
-#define CONFIG_INSTALL_LIBS 1
-#define CONFIG_INSTALL_SRCS 0
-#define CONFIG_DEBUG 0
-#define CONFIG_GPROF 0
-#define CONFIG_GCOV 0
-#define CONFIG_RVCT 0
-#define CONFIG_GCC 1
-#define CONFIG_MSVS 0
-#define CONFIG_PIC 1
-#define CONFIG_BIG_ENDIAN 0
-#define CONFIG_CODEC_SRCS 0
-#define CONFIG_DEBUG_LIBS 0
-#define CONFIG_RUNTIME_CPU_DETECT 1
-#define CONFIG_POSTPROC 1
-#define CONFIG_MULTITHREAD 1
-#define CONFIG_INTERNAL_STATS 0
-#define CONFIG_AV1_ENCODER 0
-#define CONFIG_AV1_DECODER 1
-#define CONFIG_AV1 1
-#define CONFIG_STATIC_MSVCRT 0
-#define CONFIG_SPATIAL_RESAMPLING 1
-#define CONFIG_REALTIME_ONLY 1
-#define CONFIG_SHARED 0
-#define CONFIG_STATIC 1
-#define CONFIG_SMALL 0
-#define CONFIG_POSTPROC_VISUALIZER 0
-#define CONFIG_OS_SUPPORT 1
-#define CONFIG_UNIT_TESTS 1
-#define CONFIG_WEBM_IO 1
-#define CONFIG_LIBYUV 1
-#define CONFIG_ACCOUNTING 0
-#define CONFIG_INSPECTION 0
-#define CONFIG_DECODE_PERF_TESTS 0
-#define CONFIG_ENCODE_PERF_TESTS 0
-#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
-#define CONFIG_LOWBITDEPTH 1
-#define CONFIG_HIGHBITDEPTH 0
-#define CONFIG_EXPERIMENTAL 0
-#define CONFIG_SIZE_LIMIT 1
-#define CONFIG_FP_MB_STATS 0
-#define CONFIG_CDEF 1
-#define CONFIG_CDEF_SINGLEPASS 0
-#define CONFIG_VAR_TX 1
-#define CONFIG_RECT_TX 1
-#define CONFIG_RECT_TX_EXT 0
-#define CONFIG_TPL_MV 0
-#define CONFIG_DUAL_FILTER 1
-#define CONFIG_CONVOLVE_ROUND 1
-#define CONFIG_COMPOUND_ROUND 0
-#define CONFIG_EXT_TX 1
-#define CONFIG_DPCM_INTRA 0
-#define CONFIG_TX64X64 0
-#define CONFIG_EXT_INTRA 1
-#define CONFIG_INTRA_INTERP 0
-#define CONFIG_FILTER_INTRA 0
-#define CONFIG_INTRA_EDGE 0
-#define CONFIG_INTRABC 0
-#define CONFIG_EXT_INTER 1
-#define CONFIG_INTERINTRA 1
-#define CONFIG_WEDGE 1
-#define CONFIG_COMPOUND_SEGMENT 1
-#define CONFIG_EXT_REFS 1
-#define CONFIG_SPEED_REFS 0
-#define CONFIG_GF_GROUPS 0
-#define CONFIG_GLOBAL_MOTION 1
-#define CONFIG_NEW_QUANT 0
-#define CONFIG_SUPERTX 0
-#define CONFIG_ANS 0
-#define CONFIG_LOOP_RESTORATION 0
-#define CONFIG_EXT_PARTITION 0
-#define CONFIG_EXT_PARTITION_TYPES 0
-#define CONFIG_UNPOISON_PARTITION_CTX 0
-#define CONFIG_EXT_TILE 0
-#define CONFIG_MOTION_VAR 1
-#define CONFIG_NCOBMC 0
-#define CONFIG_WARPED_MOTION 1
-#define CONFIG_Q_ADAPT_PROBS 0
-#define CONFIG_BITSTREAM_DEBUG 0
-#define CONFIG_INTER_STATS_ONLY 0
-#define CONFIG_PALETTE_DELTA_ENCODING 0
-#define CONFIG_RAWBITS 0
-#define CONFIG_PVQ 0
-#define CONFIG_CFL 0
-#define CONFIG_XIPHRC 0
-#define CONFIG_DCT_ONLY 0
-#define CONFIG_DAALA_DCT4 0
-#define CONFIG_DAALA_DCT8 0
-#define CONFIG_DAALA_DCT16 0
-#define CONFIG_DAALA_DCT32 0
-#define CONFIG_DAALA_DCT64 0
-#define CONFIG_CB4X4 1
-#define CONFIG_CHROMA_2X2 0
-#define CONFIG_CHROMA_SUB8X8 1
-#define CONFIG_FRAME_SIZE 0
-#define CONFIG_DELTA_Q 1
-#define CONFIG_EXT_DELTA_Q 1
-#define CONFIG_ADAPT_SCAN 0
-#define CONFIG_FILTER_7BIT 1
-#define CONFIG_PARALLEL_DEBLOCKING 1
-#define CONFIG_LOOPFILTERING_ACROSS_TILES 1
-#define CONFIG_TEMPMV_SIGNALING 1
-#define CONFIG_RD_DEBUG 0
-#define CONFIG_REFERENCE_BUFFER 1
-#define CONFIG_COEF_INTERLEAVE 0
-#define CONFIG_ENTROPY_STATS 0
-#define CONFIG_MASKED_TX 0
-#define CONFIG_DEPENDENT_HORZTILES 0
-#define CONFIG_DIST_8X8 1
-#define CONFIG_TRIPRED 0
-#define CONFIG_PALETTE_THROUGHPUT 1
-#define CONFIG_REF_ADAPT 0
-#define CONFIG_LV_MAP 0
-#define CONFIG_TXK_SEL 0
-#define CONFIG_MV_COMPRESS 1
-#define CONFIG_SEGMENT_ZEROMV 0
-#define CONFIG_FRAME_SUPERRES 0
-#define CONFIG_NEW_MULTISYMBOL 0
-#define CONFIG_COMPOUND_SINGLEREF 0
-#define CONFIG_AOM_QM 1
-#define CONFIG_ONE_SIDED_COMPOUND 1
-#define CONFIG_EXT_COMP_REFS 1
-#define CONFIG_SMOOTH_HV 1
-#define CONFIG_VAR_REFS 0
-#define CONFIG_RECT_INTRA_PRED 1
-#define CONFIG_LGT 0
-#define CONFIG_SBL_SYMBOL 0
-#define CONFIG_NCOBMC_ADAPT_WEIGHT 0
-#define CONFIG_BGSPRITE 0
-#define CONFIG_VAR_TX_NO_TX_MODE 0
-#define CONFIG_MRC_TX 0
-#define CONFIG_LPF_DIRECT 0
-#define CONFIG_LOOPFILTER_LEVEL 0
-#define CONFIG_NO_FRAME_CONTEXT_SIGNALING 0
-#define CONFIG_TXMG 0
-#define CONFIG_HASH_ME 0
-#define CONFIG_COLORSPACE_HEADERS 0
-#define CONFIG_MFMV 0
-#define CONFIG_JNT_COMP 0
-#define CONFIG_ANALYZER 0
-#define DECODE_WIDTH_LIMIT 16384
-#define DECODE_HEIGHT_LIMIT 16384
-#endif /* AOM_CONFIG_H */
diff --git a/third_party/libaom/source/config/linux/x64/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/x64/aom_dsp_rtcd.h
deleted file mode 100644
index 91e5bf5..0000000
--- a/third_party/libaom/source/config/linux/x64/aom_dsp_rtcd.h
+++ /dev/null
@@ -1,2230 +0,0 @@
-#ifndef AOM_DSP_RTCD_H_
-#define AOM_DSP_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * DSP
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/aom_dsp_common.h"
-#include "av1/common/enums.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_blend_a64_d32_mask_c(int32_t* dst,
-                              uint32_t dst_stride,
-                              const int32_t* src0,
-                              uint32_t src0_stride,
-                              const int32_t* src1,
-                              uint32_t src1_stride,
-                              const uint8_t* mask,
-                              uint32_t mask_stride,
-                              int h,
-                              int w,
-                              int suby,
-                              int subx);
-#define aom_blend_a64_d32_mask aom_blend_a64_d32_mask_c
-
-void aom_blend_a64_hmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-void aom_blend_a64_hmask_sse4_1(uint8_t* dst,
-                                uint32_t dst_stride,
-                                const uint8_t* src0,
-                                uint32_t src0_stride,
-                                const uint8_t* src1,
-                                uint32_t src1_stride,
-                                const uint8_t* mask,
-                                int h,
-                                int w);
-RTCD_EXTERN void (*aom_blend_a64_hmask)(uint8_t* dst,
-                                        uint32_t dst_stride,
-                                        const uint8_t* src0,
-                                        uint32_t src0_stride,
-                                        const uint8_t* src1,
-                                        uint32_t src1_stride,
-                                        const uint8_t* mask,
-                                        int h,
-                                        int w);
-
-void aom_blend_a64_mask_c(uint8_t* dst,
-                          uint32_t dst_stride,
-                          const uint8_t* src0,
-                          uint32_t src0_stride,
-                          const uint8_t* src1,
-                          uint32_t src1_stride,
-                          const uint8_t* mask,
-                          uint32_t mask_stride,
-                          int h,
-                          int w,
-                          int suby,
-                          int subx);
-void aom_blend_a64_mask_sse4_1(uint8_t* dst,
-                               uint32_t dst_stride,
-                               const uint8_t* src0,
-                               uint32_t src0_stride,
-                               const uint8_t* src1,
-                               uint32_t src1_stride,
-                               const uint8_t* mask,
-                               uint32_t mask_stride,
-                               int h,
-                               int w,
-                               int suby,
-                               int subx);
-RTCD_EXTERN void (*aom_blend_a64_mask)(uint8_t* dst,
-                                       uint32_t dst_stride,
-                                       const uint8_t* src0,
-                                       uint32_t src0_stride,
-                                       const uint8_t* src1,
-                                       uint32_t src1_stride,
-                                       const uint8_t* mask,
-                                       uint32_t mask_stride,
-                                       int h,
-                                       int w,
-                                       int suby,
-                                       int subx);
-
-void aom_blend_a64_vmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-void aom_blend_a64_vmask_sse4_1(uint8_t* dst,
-                                uint32_t dst_stride,
-                                const uint8_t* src0,
-                                uint32_t src0_stride,
-                                const uint8_t* src1,
-                                uint32_t src1_stride,
-                                const uint8_t* mask,
-                                int h,
-                                int w);
-RTCD_EXTERN void (*aom_blend_a64_vmask)(uint8_t* dst,
-                                        uint32_t dst_stride,
-                                        const uint8_t* src0,
-                                        uint32_t src0_stride,
-                                        const uint8_t* src1,
-                                        uint32_t src1_stride,
-                                        const uint8_t* mask,
-                                        int h,
-                                        int w);
-
-void aom_convolve8_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-void aom_convolve8_sse2(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-void aom_convolve8_ssse3(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve8_avx2(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-RTCD_EXTERN void (*aom_convolve8)(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-
-void aom_convolve8_avg_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve8_avg_sse2(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-void aom_convolve8_avg_ssse3(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-RTCD_EXTERN void (*aom_convolve8_avg)(const uint8_t* src,
-                                      ptrdiff_t src_stride,
-                                      uint8_t* dst,
-                                      ptrdiff_t dst_stride,
-                                      const int16_t* filter_x,
-                                      int x_step_q4,
-                                      const int16_t* filter_y,
-                                      int y_step_q4,
-                                      int w,
-                                      int h);
-
-void aom_convolve8_avg_horiz_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-void aom_convolve8_avg_horiz_sse2(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-void aom_convolve8_avg_horiz_ssse3(const uint8_t* src,
-                                   ptrdiff_t src_stride,
-                                   uint8_t* dst,
-                                   ptrdiff_t dst_stride,
-                                   const int16_t* filter_x,
-                                   int x_step_q4,
-                                   const int16_t* filter_y,
-                                   int y_step_q4,
-                                   int w,
-                                   int h);
-RTCD_EXTERN void (*aom_convolve8_avg_horiz)(const uint8_t* src,
-                                            ptrdiff_t src_stride,
-                                            uint8_t* dst,
-                                            ptrdiff_t dst_stride,
-                                            const int16_t* filter_x,
-                                            int x_step_q4,
-                                            const int16_t* filter_y,
-                                            int y_step_q4,
-                                            int w,
-                                            int h);
-
-void aom_convolve8_avg_horiz_scale_c(const uint8_t* src,
-                                     ptrdiff_t src_stride,
-                                     uint8_t* dst,
-                                     ptrdiff_t dst_stride,
-                                     const int16_t* filter_x,
-                                     int subpel_x,
-                                     int x_step_q4,
-                                     const int16_t* filter_y,
-                                     int subpel_y,
-                                     int y_step_q4,
-                                     int w,
-                                     int h);
-#define aom_convolve8_avg_horiz_scale aom_convolve8_avg_horiz_scale_c
-
-void aom_convolve8_avg_scale_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int subpel_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int subpel_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-#define aom_convolve8_avg_scale aom_convolve8_avg_scale_c
-
-void aom_convolve8_avg_vert_c(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_avg_vert_sse2(const uint8_t* src,
-                                 ptrdiff_t src_stride,
-                                 uint8_t* dst,
-                                 ptrdiff_t dst_stride,
-                                 const int16_t* filter_x,
-                                 int x_step_q4,
-                                 const int16_t* filter_y,
-                                 int y_step_q4,
-                                 int w,
-                                 int h);
-void aom_convolve8_avg_vert_ssse3(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-RTCD_EXTERN void (*aom_convolve8_avg_vert)(const uint8_t* src,
-                                           ptrdiff_t src_stride,
-                                           uint8_t* dst,
-                                           ptrdiff_t dst_stride,
-                                           const int16_t* filter_x,
-                                           int x_step_q4,
-                                           const int16_t* filter_y,
-                                           int y_step_q4,
-                                           int w,
-                                           int h);
-
-void aom_convolve8_avg_vert_scale_c(const uint8_t* src,
-                                    ptrdiff_t src_stride,
-                                    uint8_t* dst,
-                                    ptrdiff_t dst_stride,
-                                    const int16_t* filter_x,
-                                    int subpel_x,
-                                    int x_step_q4,
-                                    const int16_t* filter_y,
-                                    int subpel_y,
-                                    int y_step_q4,
-                                    int w,
-                                    int h);
-#define aom_convolve8_avg_vert_scale aom_convolve8_avg_vert_scale_c
-
-void aom_convolve8_horiz_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-void aom_convolve8_horiz_sse2(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_horiz_ssse3(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-void aom_convolve8_horiz_avx2(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-RTCD_EXTERN void (*aom_convolve8_horiz)(const uint8_t* src,
-                                        ptrdiff_t src_stride,
-                                        uint8_t* dst,
-                                        ptrdiff_t dst_stride,
-                                        const int16_t* filter_x,
-                                        int x_step_q4,
-                                        const int16_t* filter_y,
-                                        int y_step_q4,
-                                        int w,
-                                        int h);
-
-void aom_convolve8_horiz_scale_c(const uint8_t* src,
-                                 ptrdiff_t src_stride,
-                                 uint8_t* dst,
-                                 ptrdiff_t dst_stride,
-                                 const int16_t* filter_x,
-                                 int subpel_x,
-                                 int x_step_q4,
-                                 const int16_t* filter_y,
-                                 int subpel_y,
-                                 int y_step_q4,
-                                 int w,
-                                 int h);
-#define aom_convolve8_horiz_scale aom_convolve8_horiz_scale_c
-
-void aom_convolve8_scale_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int subpel_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int subpel_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_convolve8_scale aom_convolve8_scale_c
-
-void aom_convolve8_vert_c(const uint8_t* src,
-                          ptrdiff_t src_stride,
-                          uint8_t* dst,
-                          ptrdiff_t dst_stride,
-                          const int16_t* filter_x,
-                          int x_step_q4,
-                          const int16_t* filter_y,
-                          int y_step_q4,
-                          int w,
-                          int h);
-void aom_convolve8_vert_sse2(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-void aom_convolve8_vert_ssse3(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_vert_avx2(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-RTCD_EXTERN void (*aom_convolve8_vert)(const uint8_t* src,
-                                       ptrdiff_t src_stride,
-                                       uint8_t* dst,
-                                       ptrdiff_t dst_stride,
-                                       const int16_t* filter_x,
-                                       int x_step_q4,
-                                       const int16_t* filter_y,
-                                       int y_step_q4,
-                                       int w,
-                                       int h);
-
-void aom_convolve8_vert_scale_c(const uint8_t* src,
-                                ptrdiff_t src_stride,
-                                uint8_t* dst,
-                                ptrdiff_t dst_stride,
-                                const int16_t* filter_x,
-                                int subpel_x,
-                                int x_step_q4,
-                                const int16_t* filter_y,
-                                int subpel_y,
-                                int y_step_q4,
-                                int w,
-                                int h);
-#define aom_convolve8_vert_scale aom_convolve8_vert_scale_c
-
-void aom_convolve_avg_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-void aom_convolve_avg_sse2(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_convolve_avg aom_convolve_avg_sse2
-
-void aom_convolve_copy_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve_copy_sse2(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-#define aom_convolve_copy aom_convolve_copy_sse2
-
-void aom_d117_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x16 aom_d117_predictor_16x16_c
-
-void aom_d117_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x32 aom_d117_predictor_16x32_c
-
-void aom_d117_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_16x8 aom_d117_predictor_16x8_c
-
-void aom_d117_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_2x2 aom_d117_predictor_2x2_c
-
-void aom_d117_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x16 aom_d117_predictor_32x16_c
-
-void aom_d117_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x32 aom_d117_predictor_32x32_c
-
-void aom_d117_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x4 aom_d117_predictor_4x4_c
-
-void aom_d117_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x8 aom_d117_predictor_4x8_c
-
-void aom_d117_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_8x16 aom_d117_predictor_8x16_c
-
-void aom_d117_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x4 aom_d117_predictor_8x4_c
-
-void aom_d117_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x8 aom_d117_predictor_8x8_c
-
-void aom_d135_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x16 aom_d135_predictor_16x16_c
-
-void aom_d135_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x32 aom_d135_predictor_16x32_c
-
-void aom_d135_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_16x8 aom_d135_predictor_16x8_c
-
-void aom_d135_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_2x2 aom_d135_predictor_2x2_c
-
-void aom_d135_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x16 aom_d135_predictor_32x16_c
-
-void aom_d135_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x32 aom_d135_predictor_32x32_c
-
-void aom_d135_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x4 aom_d135_predictor_4x4_c
-
-void aom_d135_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x8 aom_d135_predictor_4x8_c
-
-void aom_d135_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_8x16 aom_d135_predictor_8x16_c
-
-void aom_d135_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x4 aom_d135_predictor_8x4_c
-
-void aom_d135_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x8 aom_d135_predictor_8x8_c
-
-void aom_d153_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_d153_predictor_16x16_ssse3(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_16x16)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_d153_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_16x32 aom_d153_predictor_16x32_c
-
-void aom_d153_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_16x8 aom_d153_predictor_16x8_c
-
-void aom_d153_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_2x2 aom_d153_predictor_2x2_c
-
-void aom_d153_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_32x16 aom_d153_predictor_32x16_c
-
-void aom_d153_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_d153_predictor_32x32_ssse3(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_32x32)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_d153_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d153_predictor_4x4_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_4x4)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d153_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_4x8 aom_d153_predictor_4x8_c
-
-void aom_d153_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_8x16 aom_d153_predictor_8x16_c
-
-void aom_d153_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_8x4 aom_d153_predictor_8x4_c
-
-void aom_d153_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d153_predictor_8x8_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_8x8)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d207e_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x16 aom_d207e_predictor_16x16_c
-
-void aom_d207e_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x32 aom_d207e_predictor_16x32_c
-
-void aom_d207e_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_16x8 aom_d207e_predictor_16x8_c
-
-void aom_d207e_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_2x2 aom_d207e_predictor_2x2_c
-
-void aom_d207e_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x16 aom_d207e_predictor_32x16_c
-
-void aom_d207e_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x32 aom_d207e_predictor_32x32_c
-
-void aom_d207e_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x4 aom_d207e_predictor_4x4_c
-
-void aom_d207e_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x8 aom_d207e_predictor_4x8_c
-
-void aom_d207e_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_8x16 aom_d207e_predictor_8x16_c
-
-void aom_d207e_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x4 aom_d207e_predictor_8x4_c
-
-void aom_d207e_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x8 aom_d207e_predictor_8x8_c
-
-void aom_d45e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x16 aom_d45e_predictor_16x16_c
-
-void aom_d45e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x32 aom_d45e_predictor_16x32_c
-
-void aom_d45e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_16x8 aom_d45e_predictor_16x8_c
-
-void aom_d45e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_2x2 aom_d45e_predictor_2x2_c
-
-void aom_d45e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x16 aom_d45e_predictor_32x16_c
-
-void aom_d45e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x32 aom_d45e_predictor_32x32_c
-
-void aom_d45e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x4 aom_d45e_predictor_4x4_c
-
-void aom_d45e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x8 aom_d45e_predictor_4x8_c
-
-void aom_d45e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_8x16 aom_d45e_predictor_8x16_c
-
-void aom_d45e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x4 aom_d45e_predictor_8x4_c
-
-void aom_d45e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x8 aom_d45e_predictor_8x8_c
-
-void aom_d63e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x16 aom_d63e_predictor_16x16_c
-
-void aom_d63e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x32 aom_d63e_predictor_16x32_c
-
-void aom_d63e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_16x8 aom_d63e_predictor_16x8_c
-
-void aom_d63e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_2x2 aom_d63e_predictor_2x2_c
-
-void aom_d63e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x16 aom_d63e_predictor_32x16_c
-
-void aom_d63e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x32 aom_d63e_predictor_32x32_c
-
-void aom_d63e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d63e_predictor_4x4_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d63e_predictor_4x4)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d63e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_4x8 aom_d63e_predictor_4x8_c
-
-void aom_d63e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_8x16 aom_d63e_predictor_8x16_c
-
-void aom_d63e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x4 aom_d63e_predictor_8x4_c
-
-void aom_d63e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x8 aom_d63e_predictor_8x8_c
-
-void aom_dc_128_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_128_predictor_16x16_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-#define aom_dc_128_predictor_16x16 aom_dc_128_predictor_16x16_sse2
-
-void aom_dc_128_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
-
-void aom_dc_128_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
-
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
-void aom_dc_128_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
-
-void aom_dc_128_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_128_predictor_32x32_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-#define aom_dc_128_predictor_32x32 aom_dc_128_predictor_32x32_sse2
-
-void aom_dc_128_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_128_predictor_4x4_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_128_predictor_4x4 aom_dc_128_predictor_4x4_sse2
-
-void aom_dc_128_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
-
-void aom_dc_128_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
-
-void aom_dc_128_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
-
-void aom_dc_128_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_128_predictor_8x8_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_128_predictor_8x8 aom_dc_128_predictor_8x8_sse2
-
-void aom_dc_left_predictor_16x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-void aom_dc_left_predictor_16x16_sse2(uint8_t* dst,
-                                      ptrdiff_t y_stride,
-                                      const uint8_t* above,
-                                      const uint8_t* left);
-#define aom_dc_left_predictor_16x16 aom_dc_left_predictor_16x16_sse2
-
-void aom_dc_left_predictor_16x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
-
-void aom_dc_left_predictor_16x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
-
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
-void aom_dc_left_predictor_32x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
-
-void aom_dc_left_predictor_32x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-void aom_dc_left_predictor_32x32_sse2(uint8_t* dst,
-                                      ptrdiff_t y_stride,
-                                      const uint8_t* above,
-                                      const uint8_t* left);
-#define aom_dc_left_predictor_32x32 aom_dc_left_predictor_32x32_sse2
-
-void aom_dc_left_predictor_4x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-void aom_dc_left_predictor_4x4_sse2(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_dc_left_predictor_4x4 aom_dc_left_predictor_4x4_sse2
-
-void aom_dc_left_predictor_4x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
-
-void aom_dc_left_predictor_8x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
-
-void aom_dc_left_predictor_8x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
-
-void aom_dc_left_predictor_8x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-void aom_dc_left_predictor_8x8_sse2(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_dc_left_predictor_8x8 aom_dc_left_predictor_8x8_sse2
-
-void aom_dc_predictor_16x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_dc_predictor_16x16_sse2(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_predictor_16x16 aom_dc_predictor_16x16_sse2
-
-void aom_dc_predictor_16x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
-
-void aom_dc_predictor_16x8_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
-
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
-void aom_dc_predictor_32x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
-
-void aom_dc_predictor_32x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_dc_predictor_32x32_sse2(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_predictor_32x32 aom_dc_predictor_32x32_sse2
-
-void aom_dc_predictor_4x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-void aom_dc_predictor_4x4_sse2(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_dc_predictor_4x4 aom_dc_predictor_4x4_sse2
-
-void aom_dc_predictor_4x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
-
-void aom_dc_predictor_8x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
-
-void aom_dc_predictor_8x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
-
-void aom_dc_predictor_8x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-void aom_dc_predictor_8x8_sse2(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_dc_predictor_8x8 aom_dc_predictor_8x8_sse2
-
-void aom_dc_top_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_top_predictor_16x16_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-#define aom_dc_top_predictor_16x16 aom_dc_top_predictor_16x16_sse2
-
-void aom_dc_top_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
-
-void aom_dc_top_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
-
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
-void aom_dc_top_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
-
-void aom_dc_top_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_top_predictor_32x32_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-#define aom_dc_top_predictor_32x32 aom_dc_top_predictor_32x32_sse2
-
-void aom_dc_top_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_top_predictor_4x4_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_top_predictor_4x4 aom_dc_top_predictor_4x4_sse2
-
-void aom_dc_top_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
-
-void aom_dc_top_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
-
-void aom_dc_top_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
-
-void aom_dc_top_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_top_predictor_8x8_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_top_predictor_8x8 aom_dc_top_predictor_8x8_sse2
-
-void aom_h_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_h_predictor_16x16_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_h_predictor_16x16 aom_h_predictor_16x16_sse2
-
-void aom_h_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
-
-void aom_h_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
-
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
-void aom_h_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
-
-void aom_h_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_h_predictor_32x32_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_h_predictor_32x32 aom_h_predictor_32x32_sse2
-
-void aom_h_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_h_predictor_4x4_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_h_predictor_4x4 aom_h_predictor_4x4_sse2
-
-void aom_h_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
-
-void aom_h_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
-
-void aom_h_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
-
-void aom_h_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_h_predictor_8x8_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_h_predictor_8x8 aom_h_predictor_8x8_sse2
-
-void aom_highbd_iwht4x4_16_add_c(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride,
-                                 int bd);
-#define aom_highbd_iwht4x4_16_add aom_highbd_iwht4x4_16_add_c
-
-void aom_highbd_iwht4x4_1_add_c(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride,
-                                int bd);
-#define aom_highbd_iwht4x4_1_add aom_highbd_iwht4x4_1_add_c
-
-void aom_idct16x16_10_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct16x16_10_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-void aom_idct16x16_10_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_10_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct16x16_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-void aom_idct16x16_1_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct16x16_1_add_avx2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_1_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride);
-
-void aom_idct16x16_256_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct16x16_256_add_sse2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-void aom_idct16x16_256_add_avx2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_256_add)(const tran_low_t* input,
-                                          uint8_t* dest,
-                                          int dest_stride);
-
-void aom_idct16x16_38_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct16x16_38_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_38_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct32x32_1024_add_c(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct32x32_1024_add_sse2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_1024_add_ssse3(const tran_low_t* input,
-                                  uint8_t* dest,
-                                  int dest_stride);
-void aom_idct32x32_1024_add_avx2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_1024_add)(const tran_low_t* input,
-                                           uint8_t* dest,
-                                           int dest_stride);
-
-void aom_idct32x32_135_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct32x32_1024_add_sse2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_135_add_ssse3(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_135_add_avx2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_135_add)(const tran_low_t* input,
-                                          uint8_t* dest,
-                                          int dest_stride);
-
-void aom_idct32x32_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-void aom_idct32x32_1_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct32x32_1_add_avx2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_1_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride);
-
-void aom_idct32x32_34_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct32x32_34_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-void aom_idct32x32_34_add_ssse3(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-void aom_idct32x32_34_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_34_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct4x4_16_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-#define aom_idct4x4_16_add aom_idct4x4_16_add_sse2
-
-void aom_idct4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-void aom_idct4x4_1_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-#define aom_idct4x4_1_add aom_idct4x4_1_add_sse2
-
-void aom_idct8x8_12_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct8x8_12_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct8x8_12_add_ssse3(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_12_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_idct8x8_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-void aom_idct8x8_1_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-#define aom_idct8x8_1_add aom_idct8x8_1_add_sse2
-
-void aom_idct8x8_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct8x8_64_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct8x8_64_add_ssse3(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_64_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_iwht4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_iwht4x4_16_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-#define aom_iwht4x4_16_add aom_iwht4x4_16_add_sse2
-
-void aom_iwht4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-#define aom_iwht4x4_1_add aom_iwht4x4_1_add_c
-
-void aom_lpf_horizontal_4_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-void aom_lpf_horizontal_4_sse2(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit,
-                               const uint8_t* limit,
-                               const uint8_t* thresh);
-#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_sse2
-
-void aom_lpf_horizontal_4_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
-
-void aom_lpf_horizontal_8_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-void aom_lpf_horizontal_8_sse2(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit,
-                               const uint8_t* limit,
-                               const uint8_t* thresh);
-#define aom_lpf_horizontal_8 aom_lpf_horizontal_8_sse2
-
-void aom_lpf_horizontal_8_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
-
-void aom_lpf_horizontal_edge_16_c(uint8_t* s,
-                                  int pitch,
-                                  const uint8_t* blimit,
-                                  const uint8_t* limit,
-                                  const uint8_t* thresh);
-void aom_lpf_horizontal_edge_16_sse2(uint8_t* s,
-                                     int pitch,
-                                     const uint8_t* blimit,
-                                     const uint8_t* limit,
-                                     const uint8_t* thresh);
-#define aom_lpf_horizontal_edge_16 aom_lpf_horizontal_edge_16_sse2
-
-void aom_lpf_horizontal_edge_8_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit,
-                                 const uint8_t* limit,
-                                 const uint8_t* thresh);
-void aom_lpf_horizontal_edge_8_sse2(uint8_t* s,
-                                    int pitch,
-                                    const uint8_t* blimit,
-                                    const uint8_t* limit,
-                                    const uint8_t* thresh);
-#define aom_lpf_horizontal_edge_8 aom_lpf_horizontal_edge_8_sse2
-
-void aom_lpf_vertical_16_c(uint8_t* s,
-                           int pitch,
-                           const uint8_t* blimit,
-                           const uint8_t* limit,
-                           const uint8_t* thresh);
-void aom_lpf_vertical_16_sse2(uint8_t* s,
-                              int pitch,
-                              const uint8_t* blimit,
-                              const uint8_t* limit,
-                              const uint8_t* thresh);
-#define aom_lpf_vertical_16 aom_lpf_vertical_16_sse2
-
-void aom_lpf_vertical_16_dual_c(uint8_t* s,
-                                int pitch,
-                                const uint8_t* blimit,
-                                const uint8_t* limit,
-                                const uint8_t* thresh);
-#define aom_lpf_vertical_16_dual aom_lpf_vertical_16_dual_c
-
-void aom_lpf_vertical_4_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-void aom_lpf_vertical_4_sse2(uint8_t* s,
-                             int pitch,
-                             const uint8_t* blimit,
-                             const uint8_t* limit,
-                             const uint8_t* thresh);
-#define aom_lpf_vertical_4 aom_lpf_vertical_4_sse2
-
-void aom_lpf_vertical_4_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
-
-void aom_lpf_vertical_8_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-void aom_lpf_vertical_8_sse2(uint8_t* s,
-                             int pitch,
-                             const uint8_t* blimit,
-                             const uint8_t* limit,
-                             const uint8_t* thresh);
-#define aom_lpf_vertical_8 aom_lpf_vertical_8_sse2
-
-void aom_lpf_vertical_8_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
-
-void aom_paeth_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
-
-void aom_paeth_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
-
-void aom_paeth_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
-
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
-void aom_paeth_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
-
-void aom_paeth_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
-
-void aom_paeth_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
-
-void aom_paeth_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
-
-void aom_paeth_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
-
-void aom_paeth_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
-
-void aom_paeth_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
-
-void aom_scaled_2d_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-void aom_scaled_2d_ssse3(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-RTCD_EXTERN void (*aom_scaled_2d)(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-
-void aom_scaled_avg_2d_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-#define aom_scaled_avg_2d aom_scaled_avg_2d_c
-
-void aom_scaled_avg_horiz_c(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-#define aom_scaled_avg_horiz aom_scaled_avg_horiz_c
-
-void aom_scaled_avg_vert_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_scaled_avg_vert aom_scaled_avg_vert_c
-
-void aom_scaled_horiz_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-#define aom_scaled_horiz aom_scaled_horiz_c
-
-void aom_scaled_vert_c(const uint8_t* src,
-                       ptrdiff_t src_stride,
-                       uint8_t* dst,
-                       ptrdiff_t dst_stride,
-                       const int16_t* filter_x,
-                       int x_step_q4,
-                       const int16_t* filter_y,
-                       int y_step_q4,
-                       int w,
-                       int h);
-#define aom_scaled_vert aom_scaled_vert_c
-
-void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
-
-void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
-
-void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
-
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
-void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
-
-void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
-
-void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
-
-void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
-
-void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
-
-void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
-
-void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
-
-void aom_smooth_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
-
-void aom_smooth_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
-
-void aom_smooth_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
-
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
-void aom_smooth_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
-
-void aom_smooth_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
-
-void aom_smooth_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
-
-void aom_smooth_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
-
-void aom_smooth_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
-
-void aom_smooth_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
-
-void aom_smooth_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
-
-void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
-
-void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
-
-void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
-
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
-void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
-
-void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
-
-void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
-
-void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
-
-void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
-
-void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
-
-void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
-
-void aom_v_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_v_predictor_16x16_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_v_predictor_16x16 aom_v_predictor_16x16_sse2
-
-void aom_v_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
-
-void aom_v_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
-
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
-void aom_v_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
-
-void aom_v_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_v_predictor_32x32_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_v_predictor_32x32 aom_v_predictor_32x32_sse2
-
-void aom_v_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_v_predictor_4x4_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_v_predictor_4x4 aom_v_predictor_4x4_sse2
-
-void aom_v_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
-
-void aom_v_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
-
-void aom_v_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
-
-void aom_v_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_v_predictor_8x8_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_v_predictor_8x8 aom_v_predictor_8x8_sse2
-
-void aom_dsp_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-
-  aom_blend_a64_hmask = aom_blend_a64_hmask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_hmask = aom_blend_a64_hmask_sse4_1;
-  aom_blend_a64_mask = aom_blend_a64_mask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_mask = aom_blend_a64_mask_sse4_1;
-  aom_blend_a64_vmask = aom_blend_a64_vmask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_vmask = aom_blend_a64_vmask_sse4_1;
-  aom_convolve8 = aom_convolve8_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8 = aom_convolve8_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8 = aom_convolve8_avx2;
-  aom_convolve8_avg = aom_convolve8_avg_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg = aom_convolve8_avg_ssse3;
-  aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_ssse3;
-  aom_convolve8_avg_vert = aom_convolve8_avg_vert_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg_vert = aom_convolve8_avg_vert_ssse3;
-  aom_convolve8_horiz = aom_convolve8_horiz_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_horiz = aom_convolve8_horiz_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8_horiz = aom_convolve8_horiz_avx2;
-  aom_convolve8_vert = aom_convolve8_vert_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_vert = aom_convolve8_vert_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8_vert = aom_convolve8_vert_avx2;
-  aom_d153_predictor_16x16 = aom_d153_predictor_16x16_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_16x16 = aom_d153_predictor_16x16_ssse3;
-  aom_d153_predictor_32x32 = aom_d153_predictor_32x32_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_32x32 = aom_d153_predictor_32x32_ssse3;
-  aom_d153_predictor_4x4 = aom_d153_predictor_4x4_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_4x4 = aom_d153_predictor_4x4_ssse3;
-  aom_d153_predictor_8x8 = aom_d153_predictor_8x8_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_8x8 = aom_d153_predictor_8x8_ssse3;
-  aom_d63e_predictor_4x4 = aom_d63e_predictor_4x4_c;
-  if (flags & HAS_SSSE3)
-    aom_d63e_predictor_4x4 = aom_d63e_predictor_4x4_ssse3;
-  aom_idct16x16_10_add = aom_idct16x16_10_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_10_add = aom_idct16x16_10_add_avx2;
-  aom_idct16x16_1_add = aom_idct16x16_1_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_1_add = aom_idct16x16_1_add_avx2;
-  aom_idct16x16_256_add = aom_idct16x16_256_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_256_add = aom_idct16x16_256_add_avx2;
-  aom_idct16x16_38_add = aom_idct16x16_38_add_c;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_38_add = aom_idct16x16_38_add_avx2;
-  aom_idct32x32_1024_add = aom_idct32x32_1024_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_avx2;
-  aom_idct32x32_135_add = aom_idct32x32_1024_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_135_add = aom_idct32x32_135_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_135_add = aom_idct32x32_135_add_avx2;
-  aom_idct32x32_1_add = aom_idct32x32_1_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_1_add = aom_idct32x32_1_add_avx2;
-  aom_idct32x32_34_add = aom_idct32x32_34_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_avx2;
-  aom_idct8x8_12_add = aom_idct8x8_12_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct8x8_12_add = aom_idct8x8_12_add_ssse3;
-  aom_idct8x8_64_add = aom_idct8x8_64_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct8x8_64_add = aom_idct8x8_64_add_ssse3;
-  aom_scaled_2d = aom_scaled_2d_c;
-  if (flags & HAS_SSSE3)
-    aom_scaled_2d = aom_scaled_2d_ssse3;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/linux/x64/aom_scale_rtcd.h b/third_party/libaom/source/config/linux/x64/aom_scale_rtcd.h
deleted file mode 100644
index fbf3bde..0000000
--- a/third_party/libaom/source/config/linux/x64/aom_scale_rtcd.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef AOM_SCALE_RTCD_H_
-#define AOM_SCALE_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-struct yv12_buffer_config;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
-#define aom_extend_frame_borders aom_extend_frame_borders_c
-
-void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
-#define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
-
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
-#define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
-
-void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
-                                     unsigned int source_width,
-                                     unsigned char* dest,
-                                     unsigned int dest_width);
-#define aom_horizontal_line_2_1_scale aom_horizontal_line_2_1_scale_c
-
-void aom_horizontal_line_5_3_scale_c(const unsigned char* source,
-                                     unsigned int source_width,
-                                     unsigned char* dest,
-                                     unsigned int dest_width);
-#define aom_horizontal_line_5_3_scale aom_horizontal_line_5_3_scale_c
-
-void aom_horizontal_line_5_4_scale_c(const unsigned char* source,
-                                     unsigned int source_width,
-                                     unsigned char* dest,
-                                     unsigned int dest_width);
-#define aom_horizontal_line_5_4_scale aom_horizontal_line_5_4_scale_c
-
-void aom_vertical_band_2_1_scale_c(unsigned char* source,
-                                   int src_pitch,
-                                   unsigned char* dest,
-                                   int dest_pitch,
-                                   unsigned int dest_width);
-#define aom_vertical_band_2_1_scale aom_vertical_band_2_1_scale_c
-
-void aom_vertical_band_2_1_scale_i_c(unsigned char* source,
-                                     int src_pitch,
-                                     unsigned char* dest,
-                                     int dest_pitch,
-                                     unsigned int dest_width);
-#define aom_vertical_band_2_1_scale_i aom_vertical_band_2_1_scale_i_c
-
-void aom_vertical_band_5_3_scale_c(unsigned char* source,
-                                   int src_pitch,
-                                   unsigned char* dest,
-                                   int dest_pitch,
-                                   unsigned int dest_width);
-#define aom_vertical_band_5_3_scale aom_vertical_band_5_3_scale_c
-
-void aom_vertical_band_5_4_scale_c(unsigned char* source,
-                                   int src_pitch,
-                                   unsigned char* dest,
-                                   int dest_pitch,
-                                   unsigned int dest_width);
-#define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
-
-void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
-#define aom_yv12_copy_frame aom_yv12_copy_frame_c
-
-void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
-                       struct yv12_buffer_config* dst_bc);
-#define aom_yv12_copy_u aom_yv12_copy_u_c
-
-void aom_yv12_copy_v_c(const struct yv12_buffer_config* src_bc,
-                       struct yv12_buffer_config* dst_bc);
-#define aom_yv12_copy_v aom_yv12_copy_v_c
-
-void aom_yv12_copy_y_c(const struct yv12_buffer_config* src_ybc,
-                       struct yv12_buffer_config* dst_ybc);
-#define aom_yv12_copy_y aom_yv12_copy_y_c
-
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
-#define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
-
-void aom_scale_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/linux/x64/av1_rtcd.h b/third_party/libaom/source/config/linux/x64/av1_rtcd.h
deleted file mode 100644
index 68f06b3..0000000
--- a/third_party/libaom/source/config/linux/x64/av1_rtcd.h
+++ /dev/null
@@ -1,983 +0,0 @@
-#ifndef AV1_RTCD_H_
-#define AV1_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * AV1
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/txfm_common.h"
-#include "av1/common/av1_txfm.h"
-#include "av1/common/common.h"
-#include "av1/common/convolve.h"
-#include "av1/common/enums.h"
-#include "av1/common/filter.h"
-#include "av1/common/odintrin.h"
-#include "av1/common/quant_common.h"
-
-struct macroblockd;
-
-/* Encoder forward decls */
-struct macroblock;
-struct txfm_param;
-struct aom_variance_vtable;
-struct search_site_config;
-struct mv;
-union int_mv;
-struct yv12_buffer_config;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_clpf_block_c(uint8_t* dst,
-                      const uint16_t* src,
-                      int dstride,
-                      int sstride,
-                      int sizex,
-                      int sizey,
-                      unsigned int strength,
-                      unsigned int bd);
-void aom_clpf_block_sse2(uint8_t* dst,
-                         const uint16_t* src,
-                         int dstride,
-                         int sstride,
-                         int sizex,
-                         int sizey,
-                         unsigned int strength,
-                         unsigned int bd);
-void aom_clpf_block_ssse3(uint8_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_block_sse4_1(uint8_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_block)(uint8_t* dst,
-                                   const uint16_t* src,
-                                   int dstride,
-                                   int sstride,
-                                   int sizex,
-                                   int sizey,
-                                   unsigned int strength,
-                                   unsigned int bd);
-
-void aom_clpf_block_hbd_c(uint16_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_block_hbd_sse2(uint16_t* dst,
-                             const uint16_t* src,
-                             int dstride,
-                             int sstride,
-                             int sizex,
-                             int sizey,
-                             unsigned int strength,
-                             unsigned int bd);
-void aom_clpf_block_hbd_ssse3(uint16_t* dst,
-                              const uint16_t* src,
-                              int dstride,
-                              int sstride,
-                              int sizex,
-                              int sizey,
-                              unsigned int strength,
-                              unsigned int bd);
-void aom_clpf_block_hbd_sse4_1(uint16_t* dst,
-                               const uint16_t* src,
-                               int dstride,
-                               int sstride,
-                               int sizex,
-                               int sizey,
-                               unsigned int strength,
-                               unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_block_hbd)(uint16_t* dst,
-                                       const uint16_t* src,
-                                       int dstride,
-                                       int sstride,
-                                       int sizex,
-                                       int sizey,
-                                       unsigned int strength,
-                                       unsigned int bd);
-
-void aom_clpf_hblock_c(uint8_t* dst,
-                       const uint16_t* src,
-                       int dstride,
-                       int sstride,
-                       int sizex,
-                       int sizey,
-                       unsigned int strength,
-                       unsigned int bd);
-void aom_clpf_hblock_sse2(uint8_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_hblock_ssse3(uint8_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-void aom_clpf_hblock_sse4_1(uint8_t* dst,
-                            const uint16_t* src,
-                            int dstride,
-                            int sstride,
-                            int sizex,
-                            int sizey,
-                            unsigned int strength,
-                            unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_hblock)(uint8_t* dst,
-                                    const uint16_t* src,
-                                    int dstride,
-                                    int sstride,
-                                    int sizex,
-                                    int sizey,
-                                    unsigned int strength,
-                                    unsigned int bd);
-
-void aom_clpf_hblock_hbd_c(uint16_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-void aom_clpf_hblock_hbd_sse2(uint16_t* dst,
-                              const uint16_t* src,
-                              int dstride,
-                              int sstride,
-                              int sizex,
-                              int sizey,
-                              unsigned int strength,
-                              unsigned int bd);
-void aom_clpf_hblock_hbd_ssse3(uint16_t* dst,
-                               const uint16_t* src,
-                               int dstride,
-                               int sstride,
-                               int sizex,
-                               int sizey,
-                               unsigned int strength,
-                               unsigned int bd);
-void aom_clpf_hblock_hbd_sse4_1(uint16_t* dst,
-                                const uint16_t* src,
-                                int dstride,
-                                int sstride,
-                                int sizex,
-                                int sizey,
-                                unsigned int strength,
-                                unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_hblock_hbd)(uint16_t* dst,
-                                        const uint16_t* src,
-                                        int dstride,
-                                        int sstride,
-                                        int sizex,
-                                        int sizey,
-                                        unsigned int strength,
-                                        unsigned int bd);
-
-void av1_convolve_2d_c(const uint8_t* src,
-                       int src_stride,
-                       CONV_BUF_TYPE* dst,
-                       int dst_stride,
-                       int w,
-                       int h,
-                       InterpFilterParams* filter_params_x,
-                       InterpFilterParams* filter_params_y,
-                       const int subpel_x_q4,
-                       const int subpel_y_q4,
-                       ConvolveParams* conv_params);
-void av1_convolve_2d_sse2(const uint8_t* src,
-                          int src_stride,
-                          CONV_BUF_TYPE* dst,
-                          int dst_stride,
-                          int w,
-                          int h,
-                          InterpFilterParams* filter_params_x,
-                          InterpFilterParams* filter_params_y,
-                          const int subpel_x_q4,
-                          const int subpel_y_q4,
-                          ConvolveParams* conv_params);
-#define av1_convolve_2d av1_convolve_2d_sse2
-
-void av1_convolve_2d_scale_c(const uint8_t* src,
-                             int src_stride,
-                             CONV_BUF_TYPE* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             InterpFilterParams* filter_params_x,
-                             InterpFilterParams* filter_params_y,
-                             const int subpel_x_qn,
-                             const int x_step_qn,
-                             const int subpel_y_q4,
-                             const int y_step_qn,
-                             ConvolveParams* conv_params);
-#define av1_convolve_2d_scale av1_convolve_2d_scale_c
-
-void av1_convolve_horiz_c(const uint8_t* src,
-                          int src_stride,
-                          uint8_t* dst,
-                          int dst_stride,
-                          int w,
-                          int h,
-                          const InterpFilterParams fp,
-                          const int subpel_x_q4,
-                          int x_step_q4,
-                          ConvolveParams* conv_params);
-void av1_convolve_horiz_ssse3(const uint8_t* src,
-                              int src_stride,
-                              uint8_t* dst,
-                              int dst_stride,
-                              int w,
-                              int h,
-                              const InterpFilterParams fp,
-                              const int subpel_x_q4,
-                              int x_step_q4,
-                              ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_horiz)(const uint8_t* src,
-                                       int src_stride,
-                                       uint8_t* dst,
-                                       int dst_stride,
-                                       int w,
-                                       int h,
-                                       const InterpFilterParams fp,
-                                       const int subpel_x_q4,
-                                       int x_step_q4,
-                                       ConvolveParams* conv_params);
-
-void av1_convolve_rounding_c(const int32_t* src,
-                             int src_stride,
-                             uint8_t* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             int bits);
-void av1_convolve_rounding_avx2(const int32_t* src,
-                                int src_stride,
-                                uint8_t* dst,
-                                int dst_stride,
-                                int w,
-                                int h,
-                                int bits);
-RTCD_EXTERN void (*av1_convolve_rounding)(const int32_t* src,
-                                          int src_stride,
-                                          uint8_t* dst,
-                                          int dst_stride,
-                                          int w,
-                                          int h,
-                                          int bits);
-
-void av1_convolve_vert_c(const uint8_t* src,
-                         int src_stride,
-                         uint8_t* dst,
-                         int dst_stride,
-                         int w,
-                         int h,
-                         const InterpFilterParams fp,
-                         const int subpel_x_q4,
-                         int x_step_q4,
-                         ConvolveParams* conv_params);
-void av1_convolve_vert_ssse3(const uint8_t* src,
-                             int src_stride,
-                             uint8_t* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             const InterpFilterParams fp,
-                             const int subpel_x_q4,
-                             int x_step_q4,
-                             ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_vert)(const uint8_t* src,
-                                      int src_stride,
-                                      uint8_t* dst,
-                                      int dst_stride,
-                                      int w,
-                                      int h,
-                                      const InterpFilterParams fp,
-                                      const int subpel_x_q4,
-                                      int x_step_q4,
-                                      ConvolveParams* conv_params);
-
-void av1_iht16x16_256_add_c(const tran_low_t* input,
-                            uint8_t* output,
-                            int pitch,
-                            const struct txfm_param* param);
-void av1_iht16x16_256_add_sse2(const tran_low_t* input,
-                               uint8_t* output,
-                               int pitch,
-                               const struct txfm_param* param);
-void av1_iht16x16_256_add_avx2(const tran_low_t* input,
-                               uint8_t* output,
-                               int pitch,
-                               const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht16x16_256_add)(const tran_low_t* input,
-                                         uint8_t* output,
-                                         int pitch,
-                                         const struct txfm_param* param);
-
-void av1_iht16x32_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-void av1_iht16x32_512_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride,
-                               const struct txfm_param* param);
-#define av1_iht16x32_512_add av1_iht16x32_512_add_sse2
-
-void av1_iht16x4_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht16x4_64_add av1_iht16x4_64_add_c
-
-void av1_iht16x8_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-void av1_iht16x8_128_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride,
-                              const struct txfm_param* param);
-#define av1_iht16x8_128_add av1_iht16x8_128_add_sse2
-
-void av1_iht32x16_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-void av1_iht32x16_512_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride,
-                               const struct txfm_param* param);
-#define av1_iht32x16_512_add av1_iht32x16_512_add_sse2
-
-void av1_iht32x32_1024_add_c(const tran_low_t* input,
-                             uint8_t* output,
-                             int pitch,
-                             const struct txfm_param* param);
-#define av1_iht32x32_1024_add av1_iht32x32_1024_add_c
-
-void av1_iht32x8_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht32x8_256_add av1_iht32x8_256_add_c
-
-void av1_iht4x16_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht4x16_64_add av1_iht4x16_64_add_c
-
-void av1_iht4x4_16_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht4x4_16_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht4x4_16_add av1_iht4x4_16_add_sse2
-
-void av1_iht4x8_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht4x8_32_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht4x8_32_add av1_iht4x8_32_add_sse2
-
-void av1_iht8x16_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-void av1_iht8x16_128_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride,
-                              const struct txfm_param* param);
-#define av1_iht8x16_128_add av1_iht8x16_128_add_sse2
-
-void av1_iht8x32_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht8x32_256_add av1_iht8x32_256_add_c
-
-void av1_iht8x4_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht8x4_32_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht8x4_32_add av1_iht8x4_32_add_sse2
-
-void av1_iht8x8_64_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht8x8_64_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht8x8_64_add av1_iht8x8_64_add_sse2
-
-void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-void av1_inv_txfm2d_add_16x16_sse4_1(const int32_t* input,
-                                     uint16_t* output,
-                                     int stride,
-                                     int tx_type,
-                                     int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_16x16)(const int32_t* input,
-                                             uint16_t* output,
-                                             int stride,
-                                             int tx_type,
-                                             int bd);
-
-void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
-
-void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
-
-void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
-
-void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-void av1_inv_txfm2d_add_32x32_avx2(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_32x32)(const int32_t* input,
-                                             uint16_t* output,
-                                             int stride,
-                                             int tx_type,
-                                             int bd);
-
-void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-void av1_inv_txfm2d_add_4x4_sse4_1(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_4x4)(const int32_t* input,
-                                           uint16_t* output,
-                                           int stride,
-                                           int tx_type,
-                                           int bd);
-
-void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
-
-void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
-
-void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
-
-void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
-
-void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-void av1_inv_txfm2d_add_8x8_sse4_1(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_8x8)(const int32_t* input,
-                                           uint16_t* output,
-                                           int stride,
-                                           int tx_type,
-                                           int bd);
-
-void av1_lowbd_convolve_init_c(void);
-void av1_lowbd_convolve_init_ssse3(void);
-RTCD_EXTERN void (*av1_lowbd_convolve_init)(void);
-
-void av1_warp_affine_c(const int32_t* mat,
-                       const uint8_t* ref,
-                       int width,
-                       int height,
-                       int stride,
-                       uint8_t* pred,
-                       int p_col,
-                       int p_row,
-                       int p_width,
-                       int p_height,
-                       int p_stride,
-                       int subsampling_x,
-                       int subsampling_y,
-                       ConvolveParams* conv_params,
-                       int16_t alpha,
-                       int16_t beta,
-                       int16_t gamma,
-                       int16_t delta);
-void av1_warp_affine_sse2(const int32_t* mat,
-                          const uint8_t* ref,
-                          int width,
-                          int height,
-                          int stride,
-                          uint8_t* pred,
-                          int p_col,
-                          int p_row,
-                          int p_width,
-                          int p_height,
-                          int p_stride,
-                          int subsampling_x,
-                          int subsampling_y,
-                          ConvolveParams* conv_params,
-                          int16_t alpha,
-                          int16_t beta,
-                          int16_t gamma,
-                          int16_t delta);
-void av1_warp_affine_ssse3(const int32_t* mat,
-                           const uint8_t* ref,
-                           int width,
-                           int height,
-                           int stride,
-                           uint8_t* pred,
-                           int p_col,
-                           int p_row,
-                           int p_width,
-                           int p_height,
-                           int p_stride,
-                           int subsampling_x,
-                           int subsampling_y,
-                           ConvolveParams* conv_params,
-                           int16_t alpha,
-                           int16_t beta,
-                           int16_t gamma,
-                           int16_t delta);
-RTCD_EXTERN void (*av1_warp_affine)(const int32_t* mat,
-                                    const uint8_t* ref,
-                                    int width,
-                                    int height,
-                                    int stride,
-                                    uint8_t* pred,
-                                    int p_col,
-                                    int p_row,
-                                    int p_width,
-                                    int p_height,
-                                    int p_stride,
-                                    int subsampling_x,
-                                    int subsampling_y,
-                                    ConvolveParams* conv_params,
-                                    int16_t alpha,
-                                    int16_t beta,
-                                    int16_t gamma,
-                                    int16_t delta);
-
-void cdef_direction_4x4_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-void cdef_direction_4x4_sse2(uint16_t* y,
-                             int ystride,
-                             const uint16_t* in,
-                             int threshold,
-                             int dir,
-                             int damping);
-void cdef_direction_4x4_ssse3(uint16_t* y,
-                              int ystride,
-                              const uint16_t* in,
-                              int threshold,
-                              int dir,
-                              int damping);
-void cdef_direction_4x4_sse4_1(uint16_t* y,
-                               int ystride,
-                               const uint16_t* in,
-                               int threshold,
-                               int dir,
-                               int damping);
-RTCD_EXTERN void (*cdef_direction_4x4)(uint16_t* y,
-                                       int ystride,
-                                       const uint16_t* in,
-                                       int threshold,
-                                       int dir,
-                                       int damping);
-
-void cdef_direction_8x8_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-void cdef_direction_8x8_sse2(uint16_t* y,
-                             int ystride,
-                             const uint16_t* in,
-                             int threshold,
-                             int dir,
-                             int damping);
-void cdef_direction_8x8_ssse3(uint16_t* y,
-                              int ystride,
-                              const uint16_t* in,
-                              int threshold,
-                              int dir,
-                              int damping);
-void cdef_direction_8x8_sse4_1(uint16_t* y,
-                               int ystride,
-                               const uint16_t* in,
-                               int threshold,
-                               int dir,
-                               int damping);
-RTCD_EXTERN void (*cdef_direction_8x8)(uint16_t* y,
-                                       int ystride,
-                                       const uint16_t* in,
-                                       int threshold,
-                                       int dir,
-                                       int damping);
-
-int cdef_find_dir_c(const uint16_t* img,
-                    int stride,
-                    int32_t* var,
-                    int coeff_shift);
-int cdef_find_dir_sse2(const uint16_t* img,
-                       int stride,
-                       int32_t* var,
-                       int coeff_shift);
-int cdef_find_dir_ssse3(const uint16_t* img,
-                        int stride,
-                        int32_t* var,
-                        int coeff_shift);
-int cdef_find_dir_sse4_1(const uint16_t* img,
-                         int stride,
-                         int32_t* var,
-                         int coeff_shift);
-RTCD_EXTERN int (*cdef_find_dir)(const uint16_t* img,
-                                 int stride,
-                                 int32_t* var,
-                                 int coeff_shift);
-
-void copy_4x4_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-void copy_4x4_16bit_to_16bit_sse2(uint16_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_4x4_16bit_to_16bit_ssse3(uint16_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-void copy_4x4_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride);
-RTCD_EXTERN void (*copy_4x4_16bit_to_16bit)(uint16_t* dst,
-                                            int dstride,
-                                            const uint16_t* src,
-                                            int sstride);
-
-void copy_4x4_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-void copy_4x4_16bit_to_8bit_sse2(uint8_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride);
-void copy_4x4_16bit_to_8bit_ssse3(uint8_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_4x4_16bit_to_8bit_sse4_1(uint8_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-RTCD_EXTERN void (*copy_4x4_16bit_to_8bit)(uint8_t* dst,
-                                           int dstride,
-                                           const uint16_t* src,
-                                           int sstride);
-
-void copy_8x8_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-void copy_8x8_16bit_to_16bit_sse2(uint16_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_8x8_16bit_to_16bit_ssse3(uint16_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-void copy_8x8_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride);
-RTCD_EXTERN void (*copy_8x8_16bit_to_16bit)(uint16_t* dst,
-                                            int dstride,
-                                            const uint16_t* src,
-                                            int sstride);
-
-void copy_8x8_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-void copy_8x8_16bit_to_8bit_sse2(uint8_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride);
-void copy_8x8_16bit_to_8bit_ssse3(uint8_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_8x8_16bit_to_8bit_sse4_1(uint8_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-RTCD_EXTERN void (*copy_8x8_16bit_to_8bit)(uint8_t* dst,
-                                           int dstride,
-                                           const uint16_t* src,
-                                           int sstride);
-
-void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride,
-                                 int v,
-                                 int h);
-void copy_rect8_16bit_to_16bit_sse2(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride,
-                                    int v,
-                                    int h);
-void copy_rect8_16bit_to_16bit_ssse3(uint16_t* dst,
-                                     int dstride,
-                                     const uint16_t* src,
-                                     int sstride,
-                                     int v,
-                                     int h);
-void copy_rect8_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                      int dstride,
-                                      const uint16_t* src,
-                                      int sstride,
-                                      int v,
-                                      int h);
-RTCD_EXTERN void (*copy_rect8_16bit_to_16bit)(uint16_t* dst,
-                                              int dstride,
-                                              const uint16_t* src,
-                                              int sstride,
-                                              int v,
-                                              int h);
-
-void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
-                                int dstride,
-                                const uint8_t* src,
-                                int sstride,
-                                int v,
-                                int h);
-void copy_rect8_8bit_to_16bit_sse2(uint16_t* dst,
-                                   int dstride,
-                                   const uint8_t* src,
-                                   int sstride,
-                                   int v,
-                                   int h);
-void copy_rect8_8bit_to_16bit_ssse3(uint16_t* dst,
-                                    int dstride,
-                                    const uint8_t* src,
-                                    int sstride,
-                                    int v,
-                                    int h);
-void copy_rect8_8bit_to_16bit_sse4_1(uint16_t* dst,
-                                     int dstride,
-                                     const uint8_t* src,
-                                     int sstride,
-                                     int v,
-                                     int h);
-RTCD_EXTERN void (*copy_rect8_8bit_to_16bit)(uint16_t* dst,
-                                             int dstride,
-                                             const uint8_t* src,
-                                             int sstride,
-                                             int v,
-                                             int h);
-
-void av1_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-
-  aom_clpf_block = aom_clpf_block_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_block = aom_clpf_block_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_block = aom_clpf_block_sse4_1;
-  aom_clpf_block_hbd = aom_clpf_block_hbd_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_sse4_1;
-  aom_clpf_hblock = aom_clpf_hblock_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_hblock = aom_clpf_hblock_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_hblock = aom_clpf_hblock_sse4_1;
-  aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_sse4_1;
-  av1_convolve_horiz = av1_convolve_horiz_c;
-  if (flags & HAS_SSSE3)
-    av1_convolve_horiz = av1_convolve_horiz_ssse3;
-  av1_convolve_rounding = av1_convolve_rounding_c;
-  if (flags & HAS_AVX2)
-    av1_convolve_rounding = av1_convolve_rounding_avx2;
-  av1_convolve_vert = av1_convolve_vert_c;
-  if (flags & HAS_SSSE3)
-    av1_convolve_vert = av1_convolve_vert_ssse3;
-  av1_iht16x16_256_add = av1_iht16x16_256_add_sse2;
-  if (flags & HAS_AVX2)
-    av1_iht16x16_256_add = av1_iht16x16_256_add_avx2;
-  av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_sse4_1;
-  av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_c;
-  if (flags & HAS_AVX2)
-    av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_avx2;
-  av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_sse4_1;
-  av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_sse4_1;
-  av1_lowbd_convolve_init = av1_lowbd_convolve_init_c;
-  if (flags & HAS_SSSE3)
-    av1_lowbd_convolve_init = av1_lowbd_convolve_init_ssse3;
-  av1_warp_affine = av1_warp_affine_sse2;
-  if (flags & HAS_SSSE3)
-    av1_warp_affine = av1_warp_affine_ssse3;
-  cdef_direction_4x4 = cdef_direction_4x4_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_direction_4x4 = cdef_direction_4x4_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_direction_4x4 = cdef_direction_4x4_sse4_1;
-  cdef_direction_8x8 = cdef_direction_8x8_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_direction_8x8 = cdef_direction_8x8_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_direction_8x8 = cdef_direction_8x8_sse4_1;
-  cdef_find_dir = cdef_find_dir_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_find_dir = cdef_find_dir_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_find_dir = cdef_find_dir_sse4_1;
-  copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_sse4_1;
-  copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_sse4_1;
-  copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_sse4_1;
-  copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_sse4_1;
-  copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse4_1;
-  copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse4_1;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.asm b/third_party/libaom/source/config/linux/x64/config/aom_config.asm
new file mode 100644
index 0000000..33e20cf
--- /dev/null
+++ b/third_party/libaom/source/config/linux/x64/config/aom_config.asm
@@ -0,0 +1,63 @@
+%define ARCH_ARM 0
+%define ARCH_MIPS 0
+%define ARCH_PPC 0
+%define ARCH_X86 0
+%define ARCH_X86_64 1
+%define CONFIG_ACCOUNTING 0
+%define CONFIG_ANALYZER 0
+%define CONFIG_AV1_DECODER 1
+%define CONFIG_AV1_ENCODER 0
+%define CONFIG_BIG_ENDIAN 0
+%define CONFIG_BITSTREAM_DEBUG 0
+%define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+%define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+%define CONFIG_COLLECT_RD_STATS 0
+%define CONFIG_DEBUG 0
+%define CONFIG_DECODE_PERF_TESTS 0
+%define CONFIG_DIST_8X8 1
+%define CONFIG_ENCODE_PERF_TESTS 0
+%define CONFIG_ENTROPY_STATS 0
+%define CONFIG_FILEOPTIONS 1
+%define CONFIG_FP_MB_STATS 0
+%define CONFIG_GCC 1
+%define CONFIG_GCOV 0
+%define CONFIG_GPROF 0
+%define CONFIG_INSPECTION 0
+%define CONFIG_INTERNAL_STATS 0
+%define CONFIG_INTER_STATS_ONLY 0
+%define CONFIG_LIBYUV 1
+%define CONFIG_LOWBITDEPTH 1
+%define CONFIG_MISMATCH_DEBUG 0
+%define CONFIG_MSVS 0
+%define CONFIG_MULTITHREAD 1
+%define CONFIG_OS_SUPPORT 1
+%define CONFIG_PIC 0
+%define CONFIG_RD_DEBUG 0
+%define CONFIG_RUNTIME_CPU_DETECT 1
+%define CONFIG_SHARED 0
+%define CONFIG_SIZE_LIMIT 1
+%define CONFIG_SPATIAL_RESAMPLING 1
+%define CONFIG_STATIC 1
+%define CONFIG_UNIT_TESTS 1
+%define CONFIG_WEBM_IO 1
+%define DECODE_HEIGHT_LIMIT 16384
+%define DECODE_WIDTH_LIMIT 16384
+%define HAVE_AVX 1
+%define HAVE_AVX2 1
+%define HAVE_DSPR2 0
+%define HAVE_FEXCEPT 1
+%define HAVE_MIPS32 0
+%define HAVE_MIPS64 0
+%define HAVE_MMX 1
+%define HAVE_MSA 0
+%define HAVE_NEON 0
+%define HAVE_PTHREAD_H 1
+%define HAVE_SSE 1
+%define HAVE_SSE2 1
+%define HAVE_SSE3 1
+%define HAVE_SSE4_1 1
+%define HAVE_SSE4_2 1
+%define HAVE_SSSE3 1
+%define HAVE_UNISTD_H 1
+%define HAVE_VSX 0
+%define HAVE_WXWIDGETS 0
diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.c b/third_party/libaom/source/config/linux/x64/config/aom_config.c
new file mode 100644
index 0000000..a064ea3
--- /dev/null
+++ b/third_party/libaom/source/config/linux/x64/config/aom_config.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2016, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#include "aom/aom_codec.h"
+static const char* const cfg = "-G \"Unix Makefiles\" -DAOM_TARGET_CPU=x86_64 -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=1 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=16384 -DDECODE_WIDTH_LIMIT=16384";
+const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.h b/third_party/libaom/source/config/linux/x64/config/aom_config.h
new file mode 100644
index 0000000..627d0182
--- /dev/null
+++ b/third_party/libaom/source/config/linux/x64/config/aom_config.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#ifndef AOM_CONFIG_H_
+#define AOM_CONFIG_H_
+#define ARCH_ARM 0
+#define ARCH_MIPS 0
+#define ARCH_PPC 0
+#define ARCH_X86 0
+#define ARCH_X86_64 1
+#define CONFIG_ACCOUNTING 0
+#define CONFIG_ANALYZER 0
+#define CONFIG_AV1_DECODER 1
+#define CONFIG_AV1_ENCODER 0
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+#define CONFIG_COLLECT_RD_STATS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_DIST_8X8 1
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_ENTROPY_STATS 0
+#define CONFIG_FILEOPTIONS 1
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_GCC 1
+#define CONFIG_GCOV 0
+#define CONFIG_GPROF 0
+#define CONFIG_INSPECTION 0
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_INTER_STATS_ONLY 0
+#define CONFIG_LIBYUV 1
+#define CONFIG_LOWBITDEPTH 1
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_MSVS 0
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_PIC 0
+#define CONFIG_RD_DEBUG 0
+#define CONFIG_RUNTIME_CPU_DETECT 1
+#define CONFIG_SHARED 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_STATIC 1
+#define CONFIG_UNIT_TESTS 1
+#define CONFIG_WEBM_IO 1
+#define DECODE_HEIGHT_LIMIT 16384
+#define DECODE_WIDTH_LIMIT 16384
+#define HAVE_AVX 1
+#define HAVE_AVX2 1
+#define HAVE_DSPR2 0
+#define HAVE_FEXCEPT 1
+#define HAVE_MIPS32 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 1
+#define HAVE_MSA 0
+#define HAVE_NEON 0
+#define HAVE_PTHREAD_H 1
+#define HAVE_SSE 1
+#define HAVE_SSE2 1
+#define HAVE_SSE3 1
+#define HAVE_SSE4_1 1
+#define HAVE_SSE4_2 1
+#define HAVE_SSSE3 1
+#define HAVE_UNISTD_H 1
+#define HAVE_VSX 0
+#define HAVE_WXWIDGETS 0
+#define INLINE inline
+#endif /* AOM_CONFIG_H_ */
diff --git a/third_party/libaom/source/config/linux/x64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/x64/config/aom_dsp_rtcd.h
new file mode 100644
index 0000000..be22893
--- /dev/null
+++ b/third_party/libaom/source/config/linux/x64/config/aom_dsp_rtcd.h
@@ -0,0 +1,5737 @@
+// This file is generated. Do not edit.
+#ifndef AOM_DSP_RTCD_H_
+#define AOM_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/aom_dsp_common.h"
+#include "av1/common/blockd.h"
+#include "av1/common/enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void aom_blend_a64_hmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+void aom_blend_a64_hmask_sse4_1(uint8_t* dst,
+                                uint32_t dst_stride,
+                                const uint8_t* src0,
+                                uint32_t src0_stride,
+                                const uint8_t* src1,
+                                uint32_t src1_stride,
+                                const uint8_t* mask,
+                                int w,
+                                int h);
+RTCD_EXTERN void (*aom_blend_a64_hmask)(uint8_t* dst,
+                                        uint32_t dst_stride,
+                                        const uint8_t* src0,
+                                        uint32_t src0_stride,
+                                        const uint8_t* src1,
+                                        uint32_t src1_stride,
+                                        const uint8_t* mask,
+                                        int w,
+                                        int h);
+
+void aom_blend_a64_mask_c(uint8_t* dst,
+                          uint32_t dst_stride,
+                          const uint8_t* src0,
+                          uint32_t src0_stride,
+                          const uint8_t* src1,
+                          uint32_t src1_stride,
+                          const uint8_t* mask,
+                          uint32_t mask_stride,
+                          int w,
+                          int h,
+                          int subx,
+                          int suby);
+void aom_blend_a64_mask_sse4_1(uint8_t* dst,
+                               uint32_t dst_stride,
+                               const uint8_t* src0,
+                               uint32_t src0_stride,
+                               const uint8_t* src1,
+                               uint32_t src1_stride,
+                               const uint8_t* mask,
+                               uint32_t mask_stride,
+                               int w,
+                               int h,
+                               int subx,
+                               int suby);
+RTCD_EXTERN void (*aom_blend_a64_mask)(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       uint32_t mask_stride,
+                                       int w,
+                                       int h,
+                                       int subx,
+                                       int suby);
+
+void aom_blend_a64_vmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+void aom_blend_a64_vmask_sse4_1(uint8_t* dst,
+                                uint32_t dst_stride,
+                                const uint8_t* src0,
+                                uint32_t src0_stride,
+                                const uint8_t* src1,
+                                uint32_t src1_stride,
+                                const uint8_t* mask,
+                                int w,
+                                int h);
+RTCD_EXTERN void (*aom_blend_a64_vmask)(uint8_t* dst,
+                                        uint32_t dst_stride,
+                                        const uint8_t* src0,
+                                        uint32_t src0_stride,
+                                        const uint8_t* src1,
+                                        uint32_t src1_stride,
+                                        const uint8_t* mask,
+                                        int w,
+                                        int h);
+
+void aom_convolve8_horiz_c(const uint8_t* src,
+                           ptrdiff_t src_stride,
+                           uint8_t* dst,
+                           ptrdiff_t dst_stride,
+                           const int16_t* filter_x,
+                           int x_step_q4,
+                           const int16_t* filter_y,
+                           int y_step_q4,
+                           int w,
+                           int h);
+void aom_convolve8_horiz_sse2(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+void aom_convolve8_horiz_ssse3(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h);
+void aom_convolve8_horiz_avx2(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+RTCD_EXTERN void (*aom_convolve8_horiz)(const uint8_t* src,
+                                        ptrdiff_t src_stride,
+                                        uint8_t* dst,
+                                        ptrdiff_t dst_stride,
+                                        const int16_t* filter_x,
+                                        int x_step_q4,
+                                        const int16_t* filter_y,
+                                        int y_step_q4,
+                                        int w,
+                                        int h);
+
+void aom_convolve8_vert_c(const uint8_t* src,
+                          ptrdiff_t src_stride,
+                          uint8_t* dst,
+                          ptrdiff_t dst_stride,
+                          const int16_t* filter_x,
+                          int x_step_q4,
+                          const int16_t* filter_y,
+                          int y_step_q4,
+                          int w,
+                          int h);
+void aom_convolve8_vert_sse2(const uint8_t* src,
+                             ptrdiff_t src_stride,
+                             uint8_t* dst,
+                             ptrdiff_t dst_stride,
+                             const int16_t* filter_x,
+                             int x_step_q4,
+                             const int16_t* filter_y,
+                             int y_step_q4,
+                             int w,
+                             int h);
+void aom_convolve8_vert_ssse3(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+void aom_convolve8_vert_avx2(const uint8_t* src,
+                             ptrdiff_t src_stride,
+                             uint8_t* dst,
+                             ptrdiff_t dst_stride,
+                             const int16_t* filter_x,
+                             int x_step_q4,
+                             const int16_t* filter_y,
+                             int y_step_q4,
+                             int w,
+                             int h);
+RTCD_EXTERN void (*aom_convolve8_vert)(const uint8_t* src,
+                                       ptrdiff_t src_stride,
+                                       uint8_t* dst,
+                                       ptrdiff_t dst_stride,
+                                       const int16_t* filter_x,
+                                       int x_step_q4,
+                                       const int16_t* filter_y,
+                                       int y_step_q4,
+                                       int w,
+                                       int h);
+
+void aom_convolve_copy_c(const uint8_t* src,
+                         ptrdiff_t src_stride,
+                         uint8_t* dst,
+                         ptrdiff_t dst_stride,
+                         const int16_t* filter_x,
+                         int x_step_q4,
+                         const int16_t* filter_y,
+                         int y_step_q4,
+                         int w,
+                         int h);
+void aom_convolve_copy_sse2(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h);
+#define aom_convolve_copy aom_convolve_copy_sse2
+
+void aom_dc_128_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_16x16 aom_dc_128_predictor_16x16_sse2
+
+void aom_dc_128_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_sse2
+
+void aom_dc_128_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_16x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_16x4 aom_dc_128_predictor_16x4_sse2
+
+void aom_dc_128_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_16x64 aom_dc_128_predictor_16x64_sse2
+
+void aom_dc_128_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_16x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_sse2
+
+void aom_dc_128_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
+
+void aom_dc_128_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_32x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_32x8 aom_dc_128_predictor_32x8_sse2
+
+void aom_dc_128_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_4x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_4x16 aom_dc_128_predictor_4x16_sse2
+
+void aom_dc_128_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_4x4 aom_dc_128_predictor_4x4_sse2
+
+void aom_dc_128_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_sse2
+
+void aom_dc_128_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_8x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_sse2
+
+void aom_dc_128_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_8x32_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_8x32 aom_dc_128_predictor_8x32_sse2
+
+void aom_dc_128_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_sse2
+
+void aom_dc_128_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_8x8 aom_dc_128_predictor_8x8_sse2
+
+void aom_dc_left_predictor_16x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_16x16 aom_dc_left_predictor_16x16_sse2
+
+void aom_dc_left_predictor_16x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_sse2
+
+void aom_dc_left_predictor_16x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_16x4_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_16x4 aom_dc_left_predictor_16x4_sse2
+
+void aom_dc_left_predictor_16x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_16x64 aom_dc_left_predictor_16x64_sse2
+
+void aom_dc_left_predictor_16x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_16x8_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_sse2
+
+void aom_dc_left_predictor_2x2_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
+
+void aom_dc_left_predictor_32x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x16_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x32_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x64_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_32x8_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_32x8 aom_dc_left_predictor_32x8_sse2
+
+void aom_dc_left_predictor_4x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_4x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_4x16 aom_dc_left_predictor_4x16_sse2
+
+void aom_dc_left_predictor_4x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_4x4 aom_dc_left_predictor_4x4_sse2
+
+void aom_dc_left_predictor_4x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_sse2
+
+void aom_dc_left_predictor_64x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x16_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_64x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x32_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_64x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x64_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_8x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_8x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_sse2
+
+void aom_dc_left_predictor_8x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_8x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_8x32 aom_dc_left_predictor_8x32_sse2
+
+void aom_dc_left_predictor_8x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_sse2
+
+void aom_dc_left_predictor_8x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_8x8 aom_dc_left_predictor_8x8_sse2
+
+void aom_dc_predictor_16x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_16x16 aom_dc_predictor_16x16_sse2
+
+void aom_dc_predictor_16x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_sse2
+
+void aom_dc_predictor_16x4_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_16x4_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_16x4 aom_dc_predictor_16x4_sse2
+
+void aom_dc_predictor_16x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_16x64 aom_dc_predictor_16x64_sse2
+
+void aom_dc_predictor_16x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_16x8_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_sse2
+
+void aom_dc_predictor_2x2_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
+
+void aom_dc_predictor_32x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x16_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x32_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x64_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_32x8_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_32x8 aom_dc_predictor_32x8_sse2
+
+void aom_dc_predictor_4x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_4x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_4x16 aom_dc_predictor_4x16_sse2
+
+void aom_dc_predictor_4x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_4x4 aom_dc_predictor_4x4_sse2
+
+void aom_dc_predictor_4x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_sse2
+
+void aom_dc_predictor_64x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x16_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_64x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x32_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_64x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x64_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_8x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_8x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_sse2
+
+void aom_dc_predictor_8x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_8x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_8x32 aom_dc_predictor_8x32_sse2
+
+void aom_dc_predictor_8x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_sse2
+
+void aom_dc_predictor_8x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_8x8 aom_dc_predictor_8x8_sse2
+
+void aom_dc_top_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_16x16 aom_dc_top_predictor_16x16_sse2
+
+void aom_dc_top_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_sse2
+
+void aom_dc_top_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_16x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_16x4 aom_dc_top_predictor_16x4_sse2
+
+void aom_dc_top_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_16x64 aom_dc_top_predictor_16x64_sse2
+
+void aom_dc_top_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_16x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_sse2
+
+void aom_dc_top_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
+
+void aom_dc_top_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_32x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_32x8 aom_dc_top_predictor_32x8_sse2
+
+void aom_dc_top_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_4x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_4x16 aom_dc_top_predictor_4x16_sse2
+
+void aom_dc_top_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_4x4 aom_dc_top_predictor_4x4_sse2
+
+void aom_dc_top_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_sse2
+
+void aom_dc_top_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_8x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_sse2
+
+void aom_dc_top_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_8x32_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_8x32 aom_dc_top_predictor_8x32_sse2
+
+void aom_dc_top_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_sse2
+
+void aom_dc_top_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_8x8 aom_dc_top_predictor_8x8_sse2
+
+void aom_h_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_16x16 aom_h_predictor_16x16_sse2
+
+void aom_h_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_16x32 aom_h_predictor_16x32_sse2
+
+void aom_h_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_16x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_16x4 aom_h_predictor_16x4_sse2
+
+void aom_h_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_16x64 aom_h_predictor_16x64_sse2
+
+void aom_h_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_16x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_16x8 aom_h_predictor_16x8_sse2
+
+void aom_h_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
+
+void aom_h_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_32x16 aom_h_predictor_32x16_sse2
+
+void aom_h_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_h_predictor_32x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_32x64 aom_h_predictor_32x64_sse2
+
+void aom_h_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_32x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_32x8 aom_h_predictor_32x8_sse2
+
+void aom_h_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_4x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_4x16 aom_h_predictor_4x16_sse2
+
+void aom_h_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_4x4 aom_h_predictor_4x4_sse2
+
+void aom_h_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_4x8 aom_h_predictor_4x8_sse2
+
+void aom_h_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_64x16 aom_h_predictor_64x16_sse2
+
+void aom_h_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_64x32 aom_h_predictor_64x32_sse2
+
+void aom_h_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_64x64 aom_h_predictor_64x64_sse2
+
+void aom_h_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_8x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_8x16 aom_h_predictor_8x16_sse2
+
+void aom_h_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_8x32_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_8x32 aom_h_predictor_8x32_sse2
+
+void aom_h_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_8x4 aom_h_predictor_8x4_sse2
+
+void aom_h_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_8x8 aom_h_predictor_8x8_sse2
+
+void aom_highbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                     uint32_t dst_stride,
+                                     const CONV_BUF_TYPE* src0,
+                                     uint32_t src0_stride,
+                                     const CONV_BUF_TYPE* src1,
+                                     uint32_t src1_stride,
+                                     const uint8_t* mask,
+                                     uint32_t mask_stride,
+                                     int w,
+                                     int h,
+                                     int subx,
+                                     int suby,
+                                     ConvolveParams* conv_params,
+                                     const int bd);
+#define aom_highbd_blend_a64_d16_mask aom_highbd_blend_a64_d16_mask_c
+
+void aom_highbd_blend_a64_hmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+void aom_highbd_blend_a64_hmask_sse4_1(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       int w,
+                                       int h,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_hmask)(uint8_t* dst,
+                                               uint32_t dst_stride,
+                                               const uint8_t* src0,
+                                               uint32_t src0_stride,
+                                               const uint8_t* src1,
+                                               uint32_t src1_stride,
+                                               const uint8_t* mask,
+                                               int w,
+                                               int h,
+                                               int bd);
+
+void aom_highbd_blend_a64_mask_c(uint8_t* dst,
+                                 uint32_t dst_stride,
+                                 const uint8_t* src0,
+                                 uint32_t src0_stride,
+                                 const uint8_t* src1,
+                                 uint32_t src1_stride,
+                                 const uint8_t* mask,
+                                 uint32_t mask_stride,
+                                 int w,
+                                 int h,
+                                 int subx,
+                                 int suby,
+                                 int bd);
+void aom_highbd_blend_a64_mask_sse4_1(uint8_t* dst,
+                                      uint32_t dst_stride,
+                                      const uint8_t* src0,
+                                      uint32_t src0_stride,
+                                      const uint8_t* src1,
+                                      uint32_t src1_stride,
+                                      const uint8_t* mask,
+                                      uint32_t mask_stride,
+                                      int w,
+                                      int h,
+                                      int subx,
+                                      int suby,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_mask)(uint8_t* dst,
+                                              uint32_t dst_stride,
+                                              const uint8_t* src0,
+                                              uint32_t src0_stride,
+                                              const uint8_t* src1,
+                                              uint32_t src1_stride,
+                                              const uint8_t* mask,
+                                              uint32_t mask_stride,
+                                              int w,
+                                              int h,
+                                              int subx,
+                                              int suby,
+                                              int bd);
+
+void aom_highbd_blend_a64_vmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+void aom_highbd_blend_a64_vmask_sse4_1(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       int w,
+                                       int h,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_vmask)(uint8_t* dst,
+                                               uint32_t dst_stride,
+                                               const uint8_t* src0,
+                                               uint32_t src0_stride,
+                                               const uint8_t* src1,
+                                               uint32_t src1_stride,
+                                               const uint8_t* mask,
+                                               int w,
+                                               int h,
+                                               int bd);
+
+void aom_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+void aom_highbd_convolve8_horiz_sse2(const uint8_t* src,
+                                     ptrdiff_t src_stride,
+                                     uint8_t* dst,
+                                     ptrdiff_t dst_stride,
+                                     const int16_t* filter_x,
+                                     int x_step_q4,
+                                     const int16_t* filter_y,
+                                     int y_step_q4,
+                                     int w,
+                                     int h,
+                                     int bps);
+void aom_highbd_convolve8_horiz_avx2(const uint8_t* src,
+                                     ptrdiff_t src_stride,
+                                     uint8_t* dst,
+                                     ptrdiff_t dst_stride,
+                                     const int16_t* filter_x,
+                                     int x_step_q4,
+                                     const int16_t* filter_y,
+                                     int y_step_q4,
+                                     int w,
+                                     int h,
+                                     int bps);
+RTCD_EXTERN void (*aom_highbd_convolve8_horiz)(const uint8_t* src,
+                                               ptrdiff_t src_stride,
+                                               uint8_t* dst,
+                                               ptrdiff_t dst_stride,
+                                               const int16_t* filter_x,
+                                               int x_step_q4,
+                                               const int16_t* filter_y,
+                                               int y_step_q4,
+                                               int w,
+                                               int h,
+                                               int bps);
+
+void aom_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+void aom_highbd_convolve8_vert_sse2(const uint8_t* src,
+                                    ptrdiff_t src_stride,
+                                    uint8_t* dst,
+                                    ptrdiff_t dst_stride,
+                                    const int16_t* filter_x,
+                                    int x_step_q4,
+                                    const int16_t* filter_y,
+                                    int y_step_q4,
+                                    int w,
+                                    int h,
+                                    int bps);
+void aom_highbd_convolve8_vert_avx2(const uint8_t* src,
+                                    ptrdiff_t src_stride,
+                                    uint8_t* dst,
+                                    ptrdiff_t dst_stride,
+                                    const int16_t* filter_x,
+                                    int x_step_q4,
+                                    const int16_t* filter_y,
+                                    int y_step_q4,
+                                    int w,
+                                    int h,
+                                    int bps);
+RTCD_EXTERN void (*aom_highbd_convolve8_vert)(const uint8_t* src,
+                                              ptrdiff_t src_stride,
+                                              uint8_t* dst,
+                                              ptrdiff_t dst_stride,
+                                              const int16_t* filter_x,
+                                              int x_step_q4,
+                                              const int16_t* filter_y,
+                                              int y_step_q4,
+                                              int w,
+                                              int h,
+                                              int bps);
+
+void aom_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+void aom_highbd_convolve_copy_sse2(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   int bps);
+void aom_highbd_convolve_copy_avx2(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   int bps);
+RTCD_EXTERN void (*aom_highbd_convolve_copy)(const uint8_t* src,
+                                             ptrdiff_t src_stride,
+                                             uint8_t* dst,
+                                             ptrdiff_t dst_stride,
+                                             const int16_t* filter_x,
+                                             int x_step_q4,
+                                             const int16_t* filter_y,
+                                             int y_step_q4,
+                                             int w,
+                                             int h,
+                                             int bps);
+
+void aom_highbd_dc_128_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_16x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_128_predictor_16x16 aom_highbd_dc_128_predictor_16x16_sse2
+
+void aom_highbd_dc_128_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_16x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_128_predictor_16x32 aom_highbd_dc_128_predictor_16x32_sse2
+
+void aom_highbd_dc_128_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x4 aom_highbd_dc_128_predictor_16x4_c
+
+void aom_highbd_dc_128_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x64 aom_highbd_dc_128_predictor_16x64_c
+
+void aom_highbd_dc_128_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_128_predictor_16x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_128_predictor_16x8 aom_highbd_dc_128_predictor_16x8_sse2
+
+void aom_highbd_dc_128_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_2x2 aom_highbd_dc_128_predictor_2x2_c
+
+void aom_highbd_dc_128_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_32x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_128_predictor_32x16 aom_highbd_dc_128_predictor_32x16_sse2
+
+void aom_highbd_dc_128_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_32x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_128_predictor_32x32 aom_highbd_dc_128_predictor_32x32_sse2
+
+void aom_highbd_dc_128_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x64 aom_highbd_dc_128_predictor_32x64_c
+
+void aom_highbd_dc_128_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_32x8 aom_highbd_dc_128_predictor_32x8_c
+
+void aom_highbd_dc_128_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_4x16 aom_highbd_dc_128_predictor_4x16_c
+
+void aom_highbd_dc_128_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_4x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_128_predictor_4x4 aom_highbd_dc_128_predictor_4x4_sse2
+
+void aom_highbd_dc_128_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_4x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_128_predictor_4x8 aom_highbd_dc_128_predictor_4x8_sse2
+
+void aom_highbd_dc_128_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x16 aom_highbd_dc_128_predictor_64x16_c
+
+void aom_highbd_dc_128_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x32 aom_highbd_dc_128_predictor_64x32_c
+
+void aom_highbd_dc_128_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x64 aom_highbd_dc_128_predictor_64x64_c
+
+void aom_highbd_dc_128_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_128_predictor_8x16_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_128_predictor_8x16 aom_highbd_dc_128_predictor_8x16_sse2
+
+void aom_highbd_dc_128_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x32 aom_highbd_dc_128_predictor_8x32_c
+
+void aom_highbd_dc_128_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_8x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_128_predictor_8x4 aom_highbd_dc_128_predictor_8x4_sse2
+
+void aom_highbd_dc_128_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_8x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_128_predictor_8x8 aom_highbd_dc_128_predictor_8x8_sse2
+
+void aom_highbd_dc_left_predictor_16x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_16x16_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+#define aom_highbd_dc_left_predictor_16x16 \
+  aom_highbd_dc_left_predictor_16x16_sse2
+
+void aom_highbd_dc_left_predictor_16x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_16x32_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+#define aom_highbd_dc_left_predictor_16x32 \
+  aom_highbd_dc_left_predictor_16x32_sse2
+
+void aom_highbd_dc_left_predictor_16x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x4 aom_highbd_dc_left_predictor_16x4_c
+
+void aom_highbd_dc_left_predictor_16x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x64 aom_highbd_dc_left_predictor_16x64_c
+
+void aom_highbd_dc_left_predictor_16x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_left_predictor_16x8_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_left_predictor_16x8 aom_highbd_dc_left_predictor_16x8_sse2
+
+void aom_highbd_dc_left_predictor_2x2_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_2x2 aom_highbd_dc_left_predictor_2x2_c
+
+void aom_highbd_dc_left_predictor_32x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_32x16_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+#define aom_highbd_dc_left_predictor_32x16 \
+  aom_highbd_dc_left_predictor_32x16_sse2
+
+void aom_highbd_dc_left_predictor_32x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_32x32_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+#define aom_highbd_dc_left_predictor_32x32 \
+  aom_highbd_dc_left_predictor_32x32_sse2
+
+void aom_highbd_dc_left_predictor_32x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x64 aom_highbd_dc_left_predictor_32x64_c
+
+void aom_highbd_dc_left_predictor_32x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_32x8 aom_highbd_dc_left_predictor_32x8_c
+
+void aom_highbd_dc_left_predictor_4x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_4x16 aom_highbd_dc_left_predictor_4x16_c
+
+void aom_highbd_dc_left_predictor_4x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_4x4_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_left_predictor_4x4 aom_highbd_dc_left_predictor_4x4_sse2
+
+void aom_highbd_dc_left_predictor_4x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_4x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_left_predictor_4x8 aom_highbd_dc_left_predictor_4x8_sse2
+
+void aom_highbd_dc_left_predictor_64x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x16 aom_highbd_dc_left_predictor_64x16_c
+
+void aom_highbd_dc_left_predictor_64x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x32 aom_highbd_dc_left_predictor_64x32_c
+
+void aom_highbd_dc_left_predictor_64x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x64 aom_highbd_dc_left_predictor_64x64_c
+
+void aom_highbd_dc_left_predictor_8x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_left_predictor_8x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_left_predictor_8x16 aom_highbd_dc_left_predictor_8x16_sse2
+
+void aom_highbd_dc_left_predictor_8x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x32 aom_highbd_dc_left_predictor_8x32_c
+
+void aom_highbd_dc_left_predictor_8x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_8x4_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_left_predictor_8x4 aom_highbd_dc_left_predictor_8x4_sse2
+
+void aom_highbd_dc_left_predictor_8x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_8x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_left_predictor_8x8 aom_highbd_dc_left_predictor_8x8_sse2
+
+void aom_highbd_dc_predictor_16x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_16x16_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_predictor_16x16 aom_highbd_dc_predictor_16x16_sse2
+
+void aom_highbd_dc_predictor_16x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_16x32_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_predictor_16x32 aom_highbd_dc_predictor_16x32_sse2
+
+void aom_highbd_dc_predictor_16x4_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x4 aom_highbd_dc_predictor_16x4_c
+
+void aom_highbd_dc_predictor_16x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x64 aom_highbd_dc_predictor_16x64_c
+
+void aom_highbd_dc_predictor_16x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_dc_predictor_16x8_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_predictor_16x8 aom_highbd_dc_predictor_16x8_sse2
+
+void aom_highbd_dc_predictor_2x2_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_2x2 aom_highbd_dc_predictor_2x2_c
+
+void aom_highbd_dc_predictor_32x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_32x16_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_predictor_32x16 aom_highbd_dc_predictor_32x16_sse2
+
+void aom_highbd_dc_predictor_32x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_32x32_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_predictor_32x32 aom_highbd_dc_predictor_32x32_sse2
+
+void aom_highbd_dc_predictor_32x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x64 aom_highbd_dc_predictor_32x64_c
+
+void aom_highbd_dc_predictor_32x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_32x8 aom_highbd_dc_predictor_32x8_c
+
+void aom_highbd_dc_predictor_4x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_4x16 aom_highbd_dc_predictor_4x16_c
+
+void aom_highbd_dc_predictor_4x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_4x4_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_dc_predictor_4x4 aom_highbd_dc_predictor_4x4_sse2
+
+void aom_highbd_dc_predictor_4x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_4x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_dc_predictor_4x8 aom_highbd_dc_predictor_4x8_sse2
+
+void aom_highbd_dc_predictor_64x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x16 aom_highbd_dc_predictor_64x16_c
+
+void aom_highbd_dc_predictor_64x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x32 aom_highbd_dc_predictor_64x32_c
+
+void aom_highbd_dc_predictor_64x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x64 aom_highbd_dc_predictor_64x64_c
+
+void aom_highbd_dc_predictor_8x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_dc_predictor_8x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_predictor_8x16 aom_highbd_dc_predictor_8x16_sse2
+
+void aom_highbd_dc_predictor_8x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x32 aom_highbd_dc_predictor_8x32_c
+
+void aom_highbd_dc_predictor_8x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_8x4_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_dc_predictor_8x4 aom_highbd_dc_predictor_8x4_sse2
+
+void aom_highbd_dc_predictor_8x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_8x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_dc_predictor_8x8 aom_highbd_dc_predictor_8x8_sse2
+
+void aom_highbd_dc_top_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_16x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_top_predictor_16x16 aom_highbd_dc_top_predictor_16x16_sse2
+
+void aom_highbd_dc_top_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_16x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_top_predictor_16x32 aom_highbd_dc_top_predictor_16x32_sse2
+
+void aom_highbd_dc_top_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x4 aom_highbd_dc_top_predictor_16x4_c
+
+void aom_highbd_dc_top_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x64 aom_highbd_dc_top_predictor_16x64_c
+
+void aom_highbd_dc_top_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_top_predictor_16x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_top_predictor_16x8 aom_highbd_dc_top_predictor_16x8_sse2
+
+void aom_highbd_dc_top_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_2x2 aom_highbd_dc_top_predictor_2x2_c
+
+void aom_highbd_dc_top_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_32x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_top_predictor_32x16 aom_highbd_dc_top_predictor_32x16_sse2
+
+void aom_highbd_dc_top_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_32x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_top_predictor_32x32 aom_highbd_dc_top_predictor_32x32_sse2
+
+void aom_highbd_dc_top_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x64 aom_highbd_dc_top_predictor_32x64_c
+
+void aom_highbd_dc_top_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_32x8 aom_highbd_dc_top_predictor_32x8_c
+
+void aom_highbd_dc_top_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_4x16 aom_highbd_dc_top_predictor_4x16_c
+
+void aom_highbd_dc_top_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_4x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_top_predictor_4x4 aom_highbd_dc_top_predictor_4x4_sse2
+
+void aom_highbd_dc_top_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_4x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_top_predictor_4x8 aom_highbd_dc_top_predictor_4x8_sse2
+
+void aom_highbd_dc_top_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x16 aom_highbd_dc_top_predictor_64x16_c
+
+void aom_highbd_dc_top_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x32 aom_highbd_dc_top_predictor_64x32_c
+
+void aom_highbd_dc_top_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x64 aom_highbd_dc_top_predictor_64x64_c
+
+void aom_highbd_dc_top_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_top_predictor_8x16_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_top_predictor_8x16 aom_highbd_dc_top_predictor_8x16_sse2
+
+void aom_highbd_dc_top_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x32 aom_highbd_dc_top_predictor_8x32_c
+
+void aom_highbd_dc_top_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_8x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_top_predictor_8x4 aom_highbd_dc_top_predictor_8x4_sse2
+
+void aom_highbd_dc_top_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_8x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_top_predictor_8x8 aom_highbd_dc_top_predictor_8x8_sse2
+
+void aom_highbd_h_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_16x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_h_predictor_16x16 aom_highbd_h_predictor_16x16_sse2
+
+void aom_highbd_h_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_16x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_h_predictor_16x32 aom_highbd_h_predictor_16x32_sse2
+
+void aom_highbd_h_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x4 aom_highbd_h_predictor_16x4_c
+
+void aom_highbd_h_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x64 aom_highbd_h_predictor_16x64_c
+
+void aom_highbd_h_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_h_predictor_16x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_h_predictor_16x8 aom_highbd_h_predictor_16x8_sse2
+
+void aom_highbd_h_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_2x2 aom_highbd_h_predictor_2x2_c
+
+void aom_highbd_h_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_32x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_h_predictor_32x16 aom_highbd_h_predictor_32x16_sse2
+
+void aom_highbd_h_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_32x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_h_predictor_32x32 aom_highbd_h_predictor_32x32_sse2
+
+void aom_highbd_h_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x64 aom_highbd_h_predictor_32x64_c
+
+void aom_highbd_h_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_32x8 aom_highbd_h_predictor_32x8_c
+
+void aom_highbd_h_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_4x16 aom_highbd_h_predictor_4x16_c
+
+void aom_highbd_h_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_4x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_h_predictor_4x4 aom_highbd_h_predictor_4x4_sse2
+
+void aom_highbd_h_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_4x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_h_predictor_4x8 aom_highbd_h_predictor_4x8_sse2
+
+void aom_highbd_h_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x16 aom_highbd_h_predictor_64x16_c
+
+void aom_highbd_h_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x32 aom_highbd_h_predictor_64x32_c
+
+void aom_highbd_h_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x64 aom_highbd_h_predictor_64x64_c
+
+void aom_highbd_h_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_h_predictor_8x16_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_h_predictor_8x16 aom_highbd_h_predictor_8x16_sse2
+
+void aom_highbd_h_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x32 aom_highbd_h_predictor_8x32_c
+
+void aom_highbd_h_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_8x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_h_predictor_8x4 aom_highbd_h_predictor_8x4_sse2
+
+void aom_highbd_h_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_8x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_h_predictor_8x8 aom_highbd_h_predictor_8x8_sse2
+
+void aom_highbd_lpf_horizontal_14_c(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+void aom_highbd_lpf_horizontal_14_sse2(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh,
+                                       int bd);
+#define aom_highbd_lpf_horizontal_14 aom_highbd_lpf_horizontal_14_sse2
+
+void aom_highbd_lpf_horizontal_14_dual_c(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limt1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_horizontal_14_dual_sse2(uint16_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limt1,
+                                            const uint8_t* thresh1,
+                                            int bd);
+void aom_highbd_lpf_horizontal_14_dual_avx2(uint16_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limt1,
+                                            const uint8_t* thresh1,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_14_dual)(uint16_t* s,
+                                                      int pitch,
+                                                      const uint8_t* blimit0,
+                                                      const uint8_t* limit0,
+                                                      const uint8_t* thresh0,
+                                                      const uint8_t* blimit1,
+                                                      const uint8_t* limt1,
+                                                      const uint8_t* thresh1,
+                                                      int bd);
+
+void aom_highbd_lpf_horizontal_4_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_4_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+#define aom_highbd_lpf_horizontal_4 aom_highbd_lpf_horizontal_4_sse2
+
+void aom_highbd_lpf_horizontal_4_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_4_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+void aom_highbd_lpf_horizontal_4_dual_avx2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_4_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_horizontal_6_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_6_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+#define aom_highbd_lpf_horizontal_6 aom_highbd_lpf_horizontal_6_sse2
+
+void aom_highbd_lpf_horizontal_6_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_6_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+#define aom_highbd_lpf_horizontal_6_dual aom_highbd_lpf_horizontal_6_dual_sse2
+
+void aom_highbd_lpf_horizontal_8_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_8_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+#define aom_highbd_lpf_horizontal_8 aom_highbd_lpf_horizontal_8_sse2
+
+void aom_highbd_lpf_horizontal_8_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_8_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+void aom_highbd_lpf_horizontal_8_dual_avx2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_8_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_vertical_14_c(uint16_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit,
+                                  const uint8_t* limit,
+                                  const uint8_t* thresh,
+                                  int bd);
+void aom_highbd_lpf_vertical_14_sse2(uint16_t* s,
+                                     int pitch,
+                                     const uint8_t* blimit,
+                                     const uint8_t* limit,
+                                     const uint8_t* thresh,
+                                     int bd);
+#define aom_highbd_lpf_vertical_14 aom_highbd_lpf_vertical_14_sse2
+
+void aom_highbd_lpf_vertical_14_dual_c(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit0,
+                                       const uint8_t* limit0,
+                                       const uint8_t* thresh0,
+                                       const uint8_t* blimit1,
+                                       const uint8_t* limit1,
+                                       const uint8_t* thresh1,
+                                       int bd);
+void aom_highbd_lpf_vertical_14_dual_sse2(uint16_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit0,
+                                          const uint8_t* limit0,
+                                          const uint8_t* thresh0,
+                                          const uint8_t* blimit1,
+                                          const uint8_t* limit1,
+                                          const uint8_t* thresh1,
+                                          int bd);
+void aom_highbd_lpf_vertical_14_dual_avx2(uint16_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit0,
+                                          const uint8_t* limit0,
+                                          const uint8_t* thresh0,
+                                          const uint8_t* blimit1,
+                                          const uint8_t* limit1,
+                                          const uint8_t* thresh1,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_14_dual)(uint16_t* s,
+                                                    int pitch,
+                                                    const uint8_t* blimit0,
+                                                    const uint8_t* limit0,
+                                                    const uint8_t* thresh0,
+                                                    const uint8_t* blimit1,
+                                                    const uint8_t* limit1,
+                                                    const uint8_t* thresh1,
+                                                    int bd);
+
+void aom_highbd_lpf_vertical_4_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_4_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_vertical_4 aom_highbd_lpf_vertical_4_sse2
+
+void aom_highbd_lpf_vertical_4_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_4_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_vertical_4_dual_avx2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_4_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_lpf_vertical_6_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_6_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_vertical_6 aom_highbd_lpf_vertical_6_sse2
+
+void aom_highbd_lpf_vertical_6_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_6_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+#define aom_highbd_lpf_vertical_6_dual aom_highbd_lpf_vertical_6_dual_sse2
+
+void aom_highbd_lpf_vertical_8_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_8_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_vertical_8 aom_highbd_lpf_vertical_8_sse2
+
+void aom_highbd_lpf_vertical_8_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_8_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_vertical_8_dual_avx2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_8_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_paeth_predictor_16x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x16 aom_highbd_paeth_predictor_16x16_c
+
+void aom_highbd_paeth_predictor_16x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x32 aom_highbd_paeth_predictor_16x32_c
+
+void aom_highbd_paeth_predictor_16x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x4 aom_highbd_paeth_predictor_16x4_c
+
+void aom_highbd_paeth_predictor_16x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x64 aom_highbd_paeth_predictor_16x64_c
+
+void aom_highbd_paeth_predictor_16x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x8 aom_highbd_paeth_predictor_16x8_c
+
+void aom_highbd_paeth_predictor_2x2_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_2x2 aom_highbd_paeth_predictor_2x2_c
+
+void aom_highbd_paeth_predictor_32x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x16 aom_highbd_paeth_predictor_32x16_c
+
+void aom_highbd_paeth_predictor_32x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x32 aom_highbd_paeth_predictor_32x32_c
+
+void aom_highbd_paeth_predictor_32x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x64 aom_highbd_paeth_predictor_32x64_c
+
+void aom_highbd_paeth_predictor_32x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_32x8 aom_highbd_paeth_predictor_32x8_c
+
+void aom_highbd_paeth_predictor_4x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_4x16 aom_highbd_paeth_predictor_4x16_c
+
+void aom_highbd_paeth_predictor_4x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x4 aom_highbd_paeth_predictor_4x4_c
+
+void aom_highbd_paeth_predictor_4x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x8 aom_highbd_paeth_predictor_4x8_c
+
+void aom_highbd_paeth_predictor_64x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x16 aom_highbd_paeth_predictor_64x16_c
+
+void aom_highbd_paeth_predictor_64x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x32 aom_highbd_paeth_predictor_64x32_c
+
+void aom_highbd_paeth_predictor_64x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x64 aom_highbd_paeth_predictor_64x64_c
+
+void aom_highbd_paeth_predictor_8x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x16 aom_highbd_paeth_predictor_8x16_c
+
+void aom_highbd_paeth_predictor_8x32_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x32 aom_highbd_paeth_predictor_8x32_c
+
+void aom_highbd_paeth_predictor_8x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x4 aom_highbd_paeth_predictor_8x4_c
+
+void aom_highbd_paeth_predictor_8x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x8 aom_highbd_paeth_predictor_8x8_c
+
+void aom_highbd_smooth_h_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x16 \
+  aom_highbd_smooth_h_predictor_16x16_c
+
+void aom_highbd_smooth_h_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x32 \
+  aom_highbd_smooth_h_predictor_16x32_c
+
+void aom_highbd_smooth_h_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x4 aom_highbd_smooth_h_predictor_16x4_c
+
+void aom_highbd_smooth_h_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x64 \
+  aom_highbd_smooth_h_predictor_16x64_c
+
+void aom_highbd_smooth_h_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x8 aom_highbd_smooth_h_predictor_16x8_c
+
+void aom_highbd_smooth_h_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_2x2 aom_highbd_smooth_h_predictor_2x2_c
+
+void aom_highbd_smooth_h_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x16 \
+  aom_highbd_smooth_h_predictor_32x16_c
+
+void aom_highbd_smooth_h_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x32 \
+  aom_highbd_smooth_h_predictor_32x32_c
+
+void aom_highbd_smooth_h_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x64 \
+  aom_highbd_smooth_h_predictor_32x64_c
+
+void aom_highbd_smooth_h_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_32x8 aom_highbd_smooth_h_predictor_32x8_c
+
+void aom_highbd_smooth_h_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_4x16 aom_highbd_smooth_h_predictor_4x16_c
+
+void aom_highbd_smooth_h_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x4 aom_highbd_smooth_h_predictor_4x4_c
+
+void aom_highbd_smooth_h_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x8 aom_highbd_smooth_h_predictor_4x8_c
+
+void aom_highbd_smooth_h_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x16 \
+  aom_highbd_smooth_h_predictor_64x16_c
+
+void aom_highbd_smooth_h_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x32 \
+  aom_highbd_smooth_h_predictor_64x32_c
+
+void aom_highbd_smooth_h_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x64 \
+  aom_highbd_smooth_h_predictor_64x64_c
+
+void aom_highbd_smooth_h_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x16 aom_highbd_smooth_h_predictor_8x16_c
+
+void aom_highbd_smooth_h_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x32 aom_highbd_smooth_h_predictor_8x32_c
+
+void aom_highbd_smooth_h_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x4 aom_highbd_smooth_h_predictor_8x4_c
+
+void aom_highbd_smooth_h_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x8 aom_highbd_smooth_h_predictor_8x8_c
+
+void aom_highbd_smooth_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x16 aom_highbd_smooth_predictor_16x16_c
+
+void aom_highbd_smooth_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x32 aom_highbd_smooth_predictor_16x32_c
+
+void aom_highbd_smooth_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x4 aom_highbd_smooth_predictor_16x4_c
+
+void aom_highbd_smooth_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x64 aom_highbd_smooth_predictor_16x64_c
+
+void aom_highbd_smooth_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x8 aom_highbd_smooth_predictor_16x8_c
+
+void aom_highbd_smooth_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_2x2 aom_highbd_smooth_predictor_2x2_c
+
+void aom_highbd_smooth_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x16 aom_highbd_smooth_predictor_32x16_c
+
+void aom_highbd_smooth_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x32 aom_highbd_smooth_predictor_32x32_c
+
+void aom_highbd_smooth_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x64 aom_highbd_smooth_predictor_32x64_c
+
+void aom_highbd_smooth_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_32x8 aom_highbd_smooth_predictor_32x8_c
+
+void aom_highbd_smooth_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_4x16 aom_highbd_smooth_predictor_4x16_c
+
+void aom_highbd_smooth_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x4 aom_highbd_smooth_predictor_4x4_c
+
+void aom_highbd_smooth_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x8 aom_highbd_smooth_predictor_4x8_c
+
+void aom_highbd_smooth_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x16 aom_highbd_smooth_predictor_64x16_c
+
+void aom_highbd_smooth_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x32 aom_highbd_smooth_predictor_64x32_c
+
+void aom_highbd_smooth_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x64 aom_highbd_smooth_predictor_64x64_c
+
+void aom_highbd_smooth_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x16 aom_highbd_smooth_predictor_8x16_c
+
+void aom_highbd_smooth_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x32 aom_highbd_smooth_predictor_8x32_c
+
+void aom_highbd_smooth_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x4 aom_highbd_smooth_predictor_8x4_c
+
+void aom_highbd_smooth_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x8 aom_highbd_smooth_predictor_8x8_c
+
+void aom_highbd_smooth_v_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x16 \
+  aom_highbd_smooth_v_predictor_16x16_c
+
+void aom_highbd_smooth_v_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x32 \
+  aom_highbd_smooth_v_predictor_16x32_c
+
+void aom_highbd_smooth_v_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x4 aom_highbd_smooth_v_predictor_16x4_c
+
+void aom_highbd_smooth_v_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x64 \
+  aom_highbd_smooth_v_predictor_16x64_c
+
+void aom_highbd_smooth_v_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x8 aom_highbd_smooth_v_predictor_16x8_c
+
+void aom_highbd_smooth_v_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_2x2 aom_highbd_smooth_v_predictor_2x2_c
+
+void aom_highbd_smooth_v_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x16 \
+  aom_highbd_smooth_v_predictor_32x16_c
+
+void aom_highbd_smooth_v_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x32 \
+  aom_highbd_smooth_v_predictor_32x32_c
+
+void aom_highbd_smooth_v_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x64 \
+  aom_highbd_smooth_v_predictor_32x64_c
+
+void aom_highbd_smooth_v_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_32x8 aom_highbd_smooth_v_predictor_32x8_c
+
+void aom_highbd_smooth_v_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_4x16 aom_highbd_smooth_v_predictor_4x16_c
+
+void aom_highbd_smooth_v_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x4 aom_highbd_smooth_v_predictor_4x4_c
+
+void aom_highbd_smooth_v_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x8 aom_highbd_smooth_v_predictor_4x8_c
+
+void aom_highbd_smooth_v_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x16 \
+  aom_highbd_smooth_v_predictor_64x16_c
+
+void aom_highbd_smooth_v_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x32 \
+  aom_highbd_smooth_v_predictor_64x32_c
+
+void aom_highbd_smooth_v_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x64 \
+  aom_highbd_smooth_v_predictor_64x64_c
+
+void aom_highbd_smooth_v_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x16 aom_highbd_smooth_v_predictor_8x16_c
+
+void aom_highbd_smooth_v_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x32 aom_highbd_smooth_v_predictor_8x32_c
+
+void aom_highbd_smooth_v_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x4 aom_highbd_smooth_v_predictor_8x4_c
+
+void aom_highbd_smooth_v_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x8 aom_highbd_smooth_v_predictor_8x8_c
+
+void aom_highbd_v_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_16x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_v_predictor_16x16 aom_highbd_v_predictor_16x16_sse2
+
+void aom_highbd_v_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_16x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_v_predictor_16x32 aom_highbd_v_predictor_16x32_sse2
+
+void aom_highbd_v_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x4 aom_highbd_v_predictor_16x4_c
+
+void aom_highbd_v_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x64 aom_highbd_v_predictor_16x64_c
+
+void aom_highbd_v_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_v_predictor_16x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_v_predictor_16x8 aom_highbd_v_predictor_16x8_sse2
+
+void aom_highbd_v_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_2x2 aom_highbd_v_predictor_2x2_c
+
+void aom_highbd_v_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_32x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_v_predictor_32x16 aom_highbd_v_predictor_32x16_sse2
+
+void aom_highbd_v_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_32x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_v_predictor_32x32 aom_highbd_v_predictor_32x32_sse2
+
+void aom_highbd_v_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x64 aom_highbd_v_predictor_32x64_c
+
+void aom_highbd_v_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_32x8 aom_highbd_v_predictor_32x8_c
+
+void aom_highbd_v_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_4x16 aom_highbd_v_predictor_4x16_c
+
+void aom_highbd_v_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_4x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_v_predictor_4x4 aom_highbd_v_predictor_4x4_sse2
+
+void aom_highbd_v_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_4x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_v_predictor_4x8 aom_highbd_v_predictor_4x8_sse2
+
+void aom_highbd_v_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x16 aom_highbd_v_predictor_64x16_c
+
+void aom_highbd_v_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x32 aom_highbd_v_predictor_64x32_c
+
+void aom_highbd_v_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x64 aom_highbd_v_predictor_64x64_c
+
+void aom_highbd_v_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_v_predictor_8x16_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_v_predictor_8x16 aom_highbd_v_predictor_8x16_sse2
+
+void aom_highbd_v_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x32 aom_highbd_v_predictor_8x32_c
+
+void aom_highbd_v_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_8x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_v_predictor_8x4 aom_highbd_v_predictor_8x4_sse2
+
+void aom_highbd_v_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_8x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_v_predictor_8x8 aom_highbd_v_predictor_8x8_sse2
+
+void aom_lowbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                    uint32_t dst_stride,
+                                    const CONV_BUF_TYPE* src0,
+                                    uint32_t src0_stride,
+                                    const CONV_BUF_TYPE* src1,
+                                    uint32_t src1_stride,
+                                    const uint8_t* mask,
+                                    uint32_t mask_stride,
+                                    int w,
+                                    int h,
+                                    int subx,
+                                    int suby,
+                                    ConvolveParams* conv_params);
+void aom_lowbd_blend_a64_d16_mask_sse4_1(uint8_t* dst,
+                                         uint32_t dst_stride,
+                                         const CONV_BUF_TYPE* src0,
+                                         uint32_t src0_stride,
+                                         const CONV_BUF_TYPE* src1,
+                                         uint32_t src1_stride,
+                                         const uint8_t* mask,
+                                         uint32_t mask_stride,
+                                         int w,
+                                         int h,
+                                         int subx,
+                                         int suby,
+                                         ConvolveParams* conv_params);
+RTCD_EXTERN void (*aom_lowbd_blend_a64_d16_mask)(uint8_t* dst,
+                                                 uint32_t dst_stride,
+                                                 const CONV_BUF_TYPE* src0,
+                                                 uint32_t src0_stride,
+                                                 const CONV_BUF_TYPE* src1,
+                                                 uint32_t src1_stride,
+                                                 const uint8_t* mask,
+                                                 uint32_t mask_stride,
+                                                 int w,
+                                                 int h,
+                                                 int subx,
+                                                 int suby,
+                                                 ConvolveParams* conv_params);
+
+void aom_lpf_horizontal_14_c(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+void aom_lpf_horizontal_14_sse2(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit,
+                                const uint8_t* limit,
+                                const uint8_t* thresh);
+#define aom_lpf_horizontal_14 aom_lpf_horizontal_14_sse2
+
+void aom_lpf_horizontal_14_dual_c(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+void aom_lpf_horizontal_14_dual_sse2(uint8_t* s,
+                                     int pitch,
+                                     const uint8_t* blimit0,
+                                     const uint8_t* limit0,
+                                     const uint8_t* thresh0,
+                                     const uint8_t* blimit1,
+                                     const uint8_t* limit1,
+                                     const uint8_t* thresh1);
+#define aom_lpf_horizontal_14_dual aom_lpf_horizontal_14_dual_sse2
+
+void aom_lpf_horizontal_4_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_4_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_sse2
+
+void aom_lpf_horizontal_4_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_4_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_sse2
+
+void aom_lpf_horizontal_6_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_6_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_6 aom_lpf_horizontal_6_sse2
+
+void aom_lpf_horizontal_6_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_6_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+#define aom_lpf_horizontal_6_dual aom_lpf_horizontal_6_dual_sse2
+
+void aom_lpf_horizontal_8_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_8_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_8 aom_lpf_horizontal_8_sse2
+
+void aom_lpf_horizontal_8_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_8_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_sse2
+
+void aom_lpf_vertical_14_c(uint8_t* s,
+                           int pitch,
+                           const uint8_t* blimit,
+                           const uint8_t* limit,
+                           const uint8_t* thresh);
+void aom_lpf_vertical_14_sse2(uint8_t* s,
+                              int pitch,
+                              const uint8_t* blimit,
+                              const uint8_t* limit,
+                              const uint8_t* thresh);
+#define aom_lpf_vertical_14 aom_lpf_vertical_14_sse2
+
+void aom_lpf_vertical_14_dual_c(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit0,
+                                const uint8_t* limit0,
+                                const uint8_t* thresh0,
+                                const uint8_t* blimit1,
+                                const uint8_t* limit1,
+                                const uint8_t* thresh1);
+void aom_lpf_vertical_14_dual_sse2(uint8_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit0,
+                                   const uint8_t* limit0,
+                                   const uint8_t* thresh0,
+                                   const uint8_t* blimit1,
+                                   const uint8_t* limit1,
+                                   const uint8_t* thresh1);
+#define aom_lpf_vertical_14_dual aom_lpf_vertical_14_dual_sse2
+
+void aom_lpf_vertical_4_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_4_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_vertical_4 aom_lpf_vertical_4_sse2
+
+void aom_lpf_vertical_4_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_4_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_sse2
+
+void aom_lpf_vertical_6_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_6_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_vertical_6 aom_lpf_vertical_6_sse2
+
+void aom_lpf_vertical_6_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_6_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_vertical_6_dual aom_lpf_vertical_6_dual_sse2
+
+void aom_lpf_vertical_8_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_8_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_vertical_8 aom_lpf_vertical_8_sse2
+
+void aom_lpf_vertical_8_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_8_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_sse2
+
+void aom_paeth_predictor_16x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_16x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_16x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_16x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_paeth_predictor_16x8_avx2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_2x2_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
+
+void aom_paeth_predictor_32x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_32x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_4x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_4x16_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x16)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_4x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_4x4_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x4)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_4x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_4x8_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x8)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_64x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_64x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_64x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_8x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_8x16_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x16)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_8x32_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_8x32_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x32)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_8x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_8x4_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x4)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_8x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_8x8_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x8)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_16x4_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x4)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_16x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
+
+void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_32x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_4x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_4x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_4x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_8x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_8x32_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_8x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_8x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_16x4_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_16x8_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
+
+void aom_smooth_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_32x8_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_4x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_4x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_4x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_8x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_8x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_8x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_8x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_16x4_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x4)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_16x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
+
+void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_32x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_4x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_4x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_4x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_8x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_8x32_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_8x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_8x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_v_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_16x16 aom_v_predictor_16x16_sse2
+
+void aom_v_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_16x32 aom_v_predictor_16x32_sse2
+
+void aom_v_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_16x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_16x4 aom_v_predictor_16x4_sse2
+
+void aom_v_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_16x64 aom_v_predictor_16x64_sse2
+
+void aom_v_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_16x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_16x8 aom_v_predictor_16x8_sse2
+
+void aom_v_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
+
+void aom_v_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x16_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x64_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_32x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_32x8 aom_v_predictor_32x8_sse2
+
+void aom_v_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_4x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_4x16 aom_v_predictor_4x16_sse2
+
+void aom_v_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_4x4 aom_v_predictor_4x4_sse2
+
+void aom_v_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_4x8 aom_v_predictor_4x8_sse2
+
+void aom_v_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x16_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x64_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_8x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_8x16 aom_v_predictor_8x16_sse2
+
+void aom_v_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_8x32_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_8x32 aom_v_predictor_8x32_sse2
+
+void aom_v_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_8x4 aom_v_predictor_8x4_sse2
+
+void aom_v_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_8x8 aom_v_predictor_8x8_sse2
+
+void av1_round_shift_array_c(int32_t* arr, int size, int bit);
+void av1_round_shift_array_sse4_1(int32_t* arr, int size, int bit);
+RTCD_EXTERN void (*av1_round_shift_array)(int32_t* arr, int size, int bit);
+
+void aom_dsp_rtcd(void);
+
+#ifdef RTCD_C
+#include "aom_ports/x86.h"
+static void setup_rtcd_internal(void) {
+  int flags = x86_simd_caps();
+
+  (void)flags;
+
+  aom_blend_a64_hmask = aom_blend_a64_hmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_hmask = aom_blend_a64_hmask_sse4_1;
+  aom_blend_a64_mask = aom_blend_a64_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_mask = aom_blend_a64_mask_sse4_1;
+  aom_blend_a64_vmask = aom_blend_a64_vmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_vmask = aom_blend_a64_vmask_sse4_1;
+  aom_convolve8_horiz = aom_convolve8_horiz_sse2;
+  if (flags & HAS_SSSE3)
+    aom_convolve8_horiz = aom_convolve8_horiz_ssse3;
+  if (flags & HAS_AVX2)
+    aom_convolve8_horiz = aom_convolve8_horiz_avx2;
+  aom_convolve8_vert = aom_convolve8_vert_sse2;
+  if (flags & HAS_SSSE3)
+    aom_convolve8_vert = aom_convolve8_vert_ssse3;
+  if (flags & HAS_AVX2)
+    aom_convolve8_vert = aom_convolve8_vert_avx2;
+  aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_avx2;
+  aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_avx2;
+  aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_avx2;
+  aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_avx2;
+  aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_avx2;
+  aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_avx2;
+  aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_avx2;
+  aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_avx2;
+  aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_avx2;
+  aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_avx2;
+  aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_avx2;
+  aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_avx2;
+  aom_dc_predictor_32x16 = aom_dc_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x16 = aom_dc_predictor_32x16_avx2;
+  aom_dc_predictor_32x32 = aom_dc_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x32 = aom_dc_predictor_32x32_avx2;
+  aom_dc_predictor_32x64 = aom_dc_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x64 = aom_dc_predictor_32x64_avx2;
+  aom_dc_predictor_64x16 = aom_dc_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x16 = aom_dc_predictor_64x16_avx2;
+  aom_dc_predictor_64x32 = aom_dc_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x32 = aom_dc_predictor_64x32_avx2;
+  aom_dc_predictor_64x64 = aom_dc_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x64 = aom_dc_predictor_64x64_avx2;
+  aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_avx2;
+  aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_avx2;
+  aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_avx2;
+  aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_avx2;
+  aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_avx2;
+  aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_avx2;
+  aom_h_predictor_32x32 = aom_h_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_h_predictor_32x32 = aom_h_predictor_32x32_avx2;
+  aom_highbd_blend_a64_hmask = aom_highbd_blend_a64_hmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_hmask = aom_highbd_blend_a64_hmask_sse4_1;
+  aom_highbd_blend_a64_mask = aom_highbd_blend_a64_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_mask = aom_highbd_blend_a64_mask_sse4_1;
+  aom_highbd_blend_a64_vmask = aom_highbd_blend_a64_vmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_vmask = aom_highbd_blend_a64_vmask_sse4_1;
+  aom_highbd_convolve8_horiz = aom_highbd_convolve8_horiz_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve8_horiz = aom_highbd_convolve8_horiz_avx2;
+  aom_highbd_convolve8_vert = aom_highbd_convolve8_vert_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve8_vert = aom_highbd_convolve8_vert_avx2;
+  aom_highbd_convolve_copy = aom_highbd_convolve_copy_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve_copy = aom_highbd_convolve_copy_avx2;
+  aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_avx2;
+  aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_avx2;
+  aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_avx2;
+  aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_avx2;
+  aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_avx2;
+  aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_avx2;
+  aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_sse4_1;
+  aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_avx2;
+  aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_avx2;
+  aom_paeth_predictor_16x4 = aom_paeth_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x4 = aom_paeth_predictor_16x4_ssse3;
+  aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_avx2;
+  aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_avx2;
+  aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_avx2;
+  aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_avx2;
+  aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_avx2;
+  aom_paeth_predictor_32x8 = aom_paeth_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x8 = aom_paeth_predictor_32x8_ssse3;
+  aom_paeth_predictor_4x16 = aom_paeth_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x16 = aom_paeth_predictor_4x16_ssse3;
+  aom_paeth_predictor_4x4 = aom_paeth_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x4 = aom_paeth_predictor_4x4_ssse3;
+  aom_paeth_predictor_4x8 = aom_paeth_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x8 = aom_paeth_predictor_4x8_ssse3;
+  aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_avx2;
+  aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_avx2;
+  aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_avx2;
+  aom_paeth_predictor_8x16 = aom_paeth_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x16 = aom_paeth_predictor_8x16_ssse3;
+  aom_paeth_predictor_8x32 = aom_paeth_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x32 = aom_paeth_predictor_8x32_ssse3;
+  aom_paeth_predictor_8x4 = aom_paeth_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x4 = aom_paeth_predictor_8x4_ssse3;
+  aom_paeth_predictor_8x8 = aom_paeth_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x8 = aom_paeth_predictor_8x8_ssse3;
+  aom_smooth_h_predictor_16x16 = aom_smooth_h_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x16 = aom_smooth_h_predictor_16x16_ssse3;
+  aom_smooth_h_predictor_16x32 = aom_smooth_h_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x32 = aom_smooth_h_predictor_16x32_ssse3;
+  aom_smooth_h_predictor_16x4 = aom_smooth_h_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x4 = aom_smooth_h_predictor_16x4_ssse3;
+  aom_smooth_h_predictor_16x64 = aom_smooth_h_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x64 = aom_smooth_h_predictor_16x64_ssse3;
+  aom_smooth_h_predictor_16x8 = aom_smooth_h_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x8 = aom_smooth_h_predictor_16x8_ssse3;
+  aom_smooth_h_predictor_32x16 = aom_smooth_h_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x16 = aom_smooth_h_predictor_32x16_ssse3;
+  aom_smooth_h_predictor_32x32 = aom_smooth_h_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x32 = aom_smooth_h_predictor_32x32_ssse3;
+  aom_smooth_h_predictor_32x64 = aom_smooth_h_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x64 = aom_smooth_h_predictor_32x64_ssse3;
+  aom_smooth_h_predictor_32x8 = aom_smooth_h_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x8 = aom_smooth_h_predictor_32x8_ssse3;
+  aom_smooth_h_predictor_4x16 = aom_smooth_h_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x16 = aom_smooth_h_predictor_4x16_ssse3;
+  aom_smooth_h_predictor_4x4 = aom_smooth_h_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x4 = aom_smooth_h_predictor_4x4_ssse3;
+  aom_smooth_h_predictor_4x8 = aom_smooth_h_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x8 = aom_smooth_h_predictor_4x8_ssse3;
+  aom_smooth_h_predictor_64x16 = aom_smooth_h_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x16 = aom_smooth_h_predictor_64x16_ssse3;
+  aom_smooth_h_predictor_64x32 = aom_smooth_h_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x32 = aom_smooth_h_predictor_64x32_ssse3;
+  aom_smooth_h_predictor_64x64 = aom_smooth_h_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x64 = aom_smooth_h_predictor_64x64_ssse3;
+  aom_smooth_h_predictor_8x16 = aom_smooth_h_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x16 = aom_smooth_h_predictor_8x16_ssse3;
+  aom_smooth_h_predictor_8x32 = aom_smooth_h_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x32 = aom_smooth_h_predictor_8x32_ssse3;
+  aom_smooth_h_predictor_8x4 = aom_smooth_h_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x4 = aom_smooth_h_predictor_8x4_ssse3;
+  aom_smooth_h_predictor_8x8 = aom_smooth_h_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x8 = aom_smooth_h_predictor_8x8_ssse3;
+  aom_smooth_predictor_16x16 = aom_smooth_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x16 = aom_smooth_predictor_16x16_ssse3;
+  aom_smooth_predictor_16x32 = aom_smooth_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x32 = aom_smooth_predictor_16x32_ssse3;
+  aom_smooth_predictor_16x4 = aom_smooth_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x4 = aom_smooth_predictor_16x4_ssse3;
+  aom_smooth_predictor_16x64 = aom_smooth_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x64 = aom_smooth_predictor_16x64_ssse3;
+  aom_smooth_predictor_16x8 = aom_smooth_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x8 = aom_smooth_predictor_16x8_ssse3;
+  aom_smooth_predictor_32x16 = aom_smooth_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x16 = aom_smooth_predictor_32x16_ssse3;
+  aom_smooth_predictor_32x32 = aom_smooth_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x32 = aom_smooth_predictor_32x32_ssse3;
+  aom_smooth_predictor_32x64 = aom_smooth_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x64 = aom_smooth_predictor_32x64_ssse3;
+  aom_smooth_predictor_32x8 = aom_smooth_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x8 = aom_smooth_predictor_32x8_ssse3;
+  aom_smooth_predictor_4x16 = aom_smooth_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x16 = aom_smooth_predictor_4x16_ssse3;
+  aom_smooth_predictor_4x4 = aom_smooth_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x4 = aom_smooth_predictor_4x4_ssse3;
+  aom_smooth_predictor_4x8 = aom_smooth_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x8 = aom_smooth_predictor_4x8_ssse3;
+  aom_smooth_predictor_64x16 = aom_smooth_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x16 = aom_smooth_predictor_64x16_ssse3;
+  aom_smooth_predictor_64x32 = aom_smooth_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x32 = aom_smooth_predictor_64x32_ssse3;
+  aom_smooth_predictor_64x64 = aom_smooth_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x64 = aom_smooth_predictor_64x64_ssse3;
+  aom_smooth_predictor_8x16 = aom_smooth_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x16 = aom_smooth_predictor_8x16_ssse3;
+  aom_smooth_predictor_8x32 = aom_smooth_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x32 = aom_smooth_predictor_8x32_ssse3;
+  aom_smooth_predictor_8x4 = aom_smooth_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x4 = aom_smooth_predictor_8x4_ssse3;
+  aom_smooth_predictor_8x8 = aom_smooth_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x8 = aom_smooth_predictor_8x8_ssse3;
+  aom_smooth_v_predictor_16x16 = aom_smooth_v_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x16 = aom_smooth_v_predictor_16x16_ssse3;
+  aom_smooth_v_predictor_16x32 = aom_smooth_v_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x32 = aom_smooth_v_predictor_16x32_ssse3;
+  aom_smooth_v_predictor_16x4 = aom_smooth_v_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x4 = aom_smooth_v_predictor_16x4_ssse3;
+  aom_smooth_v_predictor_16x64 = aom_smooth_v_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x64 = aom_smooth_v_predictor_16x64_ssse3;
+  aom_smooth_v_predictor_16x8 = aom_smooth_v_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x8 = aom_smooth_v_predictor_16x8_ssse3;
+  aom_smooth_v_predictor_32x16 = aom_smooth_v_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x16 = aom_smooth_v_predictor_32x16_ssse3;
+  aom_smooth_v_predictor_32x32 = aom_smooth_v_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x32 = aom_smooth_v_predictor_32x32_ssse3;
+  aom_smooth_v_predictor_32x64 = aom_smooth_v_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x64 = aom_smooth_v_predictor_32x64_ssse3;
+  aom_smooth_v_predictor_32x8 = aom_smooth_v_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x8 = aom_smooth_v_predictor_32x8_ssse3;
+  aom_smooth_v_predictor_4x16 = aom_smooth_v_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x16 = aom_smooth_v_predictor_4x16_ssse3;
+  aom_smooth_v_predictor_4x4 = aom_smooth_v_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x4 = aom_smooth_v_predictor_4x4_ssse3;
+  aom_smooth_v_predictor_4x8 = aom_smooth_v_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x8 = aom_smooth_v_predictor_4x8_ssse3;
+  aom_smooth_v_predictor_64x16 = aom_smooth_v_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x16 = aom_smooth_v_predictor_64x16_ssse3;
+  aom_smooth_v_predictor_64x32 = aom_smooth_v_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x32 = aom_smooth_v_predictor_64x32_ssse3;
+  aom_smooth_v_predictor_64x64 = aom_smooth_v_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x64 = aom_smooth_v_predictor_64x64_ssse3;
+  aom_smooth_v_predictor_8x16 = aom_smooth_v_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x16 = aom_smooth_v_predictor_8x16_ssse3;
+  aom_smooth_v_predictor_8x32 = aom_smooth_v_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x32 = aom_smooth_v_predictor_8x32_ssse3;
+  aom_smooth_v_predictor_8x4 = aom_smooth_v_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x4 = aom_smooth_v_predictor_8x4_ssse3;
+  aom_smooth_v_predictor_8x8 = aom_smooth_v_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x8 = aom_smooth_v_predictor_8x8_ssse3;
+  aom_v_predictor_32x16 = aom_v_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x16 = aom_v_predictor_32x16_avx2;
+  aom_v_predictor_32x32 = aom_v_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x32 = aom_v_predictor_32x32_avx2;
+  aom_v_predictor_32x64 = aom_v_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x64 = aom_v_predictor_32x64_avx2;
+  aom_v_predictor_64x16 = aom_v_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x16 = aom_v_predictor_64x16_avx2;
+  aom_v_predictor_64x32 = aom_v_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x32 = aom_v_predictor_64x32_avx2;
+  aom_v_predictor_64x64 = aom_v_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x64 = aom_v_predictor_64x64_avx2;
+  av1_round_shift_array = av1_round_shift_array_c;
+  if (flags & HAS_SSE4_1)
+    av1_round_shift_array = av1_round_shift_array_sse4_1;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h b/third_party/libaom/source/config/linux/x64/config/aom_scale_rtcd.h
similarity index 71%
copy from third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
copy to third_party/libaom/source/config/linux/x64/config/aom_scale_rtcd.h
index fbf3bde..9fe39d9 100644
--- a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
+++ b/third_party/libaom/source/config/linux/x64/config/aom_scale_rtcd.h
@@ -1,3 +1,4 @@
+// This file is generated. Do not edit.
 #ifndef AOM_SCALE_RTCD_H_
 #define AOM_SCALE_RTCD_H_
 
@@ -13,13 +14,15 @@
 extern "C" {
 #endif
 
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                const int num_planes);
 #define aom_extend_frame_borders aom_extend_frame_borders_c
 
 void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
 #define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
 
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf,
+                                      const int num_planes);
 #define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
 
 void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
@@ -69,7 +72,8 @@
 #define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
 
 void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
+                           struct yv12_buffer_config* dst_bc,
+                           const int num_planes);
 #define aom_yv12_copy_frame aom_yv12_copy_frame_c
 
 void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
@@ -84,9 +88,34 @@
                        struct yv12_buffer_config* dst_ybc);
 #define aom_yv12_copy_y aom_yv12_copy_y_c
 
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                     const int num_planes);
 #define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
 
+void aom_yv12_partial_copy_u_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_u aom_yv12_partial_copy_u_c
+
+void aom_yv12_partial_copy_v_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_v aom_yv12_partial_copy_v_c
+
+void aom_yv12_partial_copy_y_c(const struct yv12_buffer_config* src_ybc,
+                               struct yv12_buffer_config* dst_ybc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_y aom_yv12_partial_copy_y_c
+
 void aom_scale_rtcd(void);
 
 #ifdef RTCD_C
diff --git a/third_party/libaom/source/config/linux/x64/config/av1_rtcd.h b/third_party/libaom/source/config/linux/x64/config/av1_rtcd.h
new file mode 100644
index 0000000..961d3dd7
--- /dev/null
+++ b/third_party/libaom/source/config/linux/x64/config/av1_rtcd.h
@@ -0,0 +1,2230 @@
+// This file is generated. Do not edit.
+#ifndef AV1_RTCD_H_
+#define AV1_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * AV1
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/txfm_common.h"
+#include "av1/common/av1_txfm.h"
+#include "av1/common/common.h"
+#include "av1/common/convolve.h"
+#include "av1/common/enums.h"
+#include "av1/common/filter.h"
+#include "av1/common/odintrin.h"
+#include "av1/common/quant_common.h"
+#include "av1/common/restoration.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct txfm_param;
+struct aom_variance_vtable;
+struct search_site_config;
+struct yv12_buffer_config;
+
+/* Function pointers return by CfL functions */
+typedef void (*cfl_subsample_lbd_fn)(const uint8_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subsample_hbd_fn)(const uint16_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subtract_average_fn)(const uint16_t* src, int16_t* dst);
+
+typedef void (*cfl_predict_lbd_fn)(const int16_t* src,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3);
+
+typedef void (*cfl_predict_hbd_fn)(const int16_t* src,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3,
+                                   int bd);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void apply_selfguided_restoration_c(const uint8_t* dat,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    int eps,
+                                    const int* xqd,
+                                    uint8_t* dst,
+                                    int dst_stride,
+                                    int32_t* tmpbuf,
+                                    int bit_depth,
+                                    int highbd);
+void apply_selfguided_restoration_sse4_1(const uint8_t* dat,
+                                         int width,
+                                         int height,
+                                         int stride,
+                                         int eps,
+                                         const int* xqd,
+                                         uint8_t* dst,
+                                         int dst_stride,
+                                         int32_t* tmpbuf,
+                                         int bit_depth,
+                                         int highbd);
+void apply_selfguided_restoration_avx2(const uint8_t* dat,
+                                       int width,
+                                       int height,
+                                       int stride,
+                                       int eps,
+                                       const int* xqd,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int32_t* tmpbuf,
+                                       int bit_depth,
+                                       int highbd);
+RTCD_EXTERN void (*apply_selfguided_restoration)(const uint8_t* dat,
+                                                 int width,
+                                                 int height,
+                                                 int stride,
+                                                 int eps,
+                                                 const int* xqd,
+                                                 uint8_t* dst,
+                                                 int dst_stride,
+                                                 int32_t* tmpbuf,
+                                                 int bit_depth,
+                                                 int highbd);
+
+void av1_build_compound_diffwtd_mask_c(uint8_t* mask,
+                                       DIFFWTD_MASK_TYPE mask_type,
+                                       const uint8_t* src0,
+                                       int src0_stride,
+                                       const uint8_t* src1,
+                                       int src1_stride,
+                                       int h,
+                                       int w);
+void av1_build_compound_diffwtd_mask_sse4_1(uint8_t* mask,
+                                            DIFFWTD_MASK_TYPE mask_type,
+                                            const uint8_t* src0,
+                                            int src0_stride,
+                                            const uint8_t* src1,
+                                            int src1_stride,
+                                            int h,
+                                            int w);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask)(uint8_t* mask,
+                                                    DIFFWTD_MASK_TYPE mask_type,
+                                                    const uint8_t* src0,
+                                                    int src0_stride,
+                                                    const uint8_t* src1,
+                                                    int src1_stride,
+                                                    int h,
+                                                    int w);
+
+void av1_build_compound_diffwtd_mask_d16_c(uint8_t* mask,
+                                           DIFFWTD_MASK_TYPE mask_type,
+                                           const CONV_BUF_TYPE* src0,
+                                           int src0_stride,
+                                           const CONV_BUF_TYPE* src1,
+                                           int src1_stride,
+                                           int h,
+                                           int w,
+                                           ConvolveParams* conv_params,
+                                           int bd);
+void av1_build_compound_diffwtd_mask_d16_sse4_1(uint8_t* mask,
+                                                DIFFWTD_MASK_TYPE mask_type,
+                                                const CONV_BUF_TYPE* src0,
+                                                int src0_stride,
+                                                const CONV_BUF_TYPE* src1,
+                                                int src1_stride,
+                                                int h,
+                                                int w,
+                                                ConvolveParams* conv_params,
+                                                int bd);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask_d16)(
+    uint8_t* mask,
+    DIFFWTD_MASK_TYPE mask_type,
+    const CONV_BUF_TYPE* src0,
+    int src0_stride,
+    const CONV_BUF_TYPE* src1,
+    int src1_stride,
+    int h,
+    int w,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_build_compound_diffwtd_mask_highbd_c(uint8_t* mask,
+                                              DIFFWTD_MASK_TYPE mask_type,
+                                              const uint8_t* src0,
+                                              int src0_stride,
+                                              const uint8_t* src1,
+                                              int src1_stride,
+                                              int h,
+                                              int w,
+                                              int bd);
+void av1_build_compound_diffwtd_mask_highbd_ssse3(uint8_t* mask,
+                                                  DIFFWTD_MASK_TYPE mask_type,
+                                                  const uint8_t* src0,
+                                                  int src0_stride,
+                                                  const uint8_t* src1,
+                                                  int src1_stride,
+                                                  int h,
+                                                  int w,
+                                                  int bd);
+void av1_build_compound_diffwtd_mask_highbd_avx2(uint8_t* mask,
+                                                 DIFFWTD_MASK_TYPE mask_type,
+                                                 const uint8_t* src0,
+                                                 int src0_stride,
+                                                 const uint8_t* src1,
+                                                 int src1_stride,
+                                                 int h,
+                                                 int w,
+                                                 int bd);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask_highbd)(
+    uint8_t* mask,
+    DIFFWTD_MASK_TYPE mask_type,
+    const uint8_t* src0,
+    int src0_stride,
+    const uint8_t* src1,
+    int src1_stride,
+    int h,
+    int w,
+    int bd);
+
+void av1_convolve_2d_copy_sr_c(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_sse2(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_avx2(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_copy_sr)(const uint8_t* src,
+                                            int src_stride,
+                                            uint8_t* dst,
+                                            int dst_stride,
+                                            int w,
+                                            int h,
+                                            InterpFilterParams* filter_params_x,
+                                            InterpFilterParams* filter_params_y,
+                                            const int subpel_x_q4,
+                                            const int subpel_y_q4,
+                                            ConvolveParams* conv_params);
+
+void av1_convolve_2d_scale_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_qn,
+                             const int x_step_qn,
+                             const int subpel_y_q4,
+                             const int y_step_qn,
+                             ConvolveParams* conv_params);
+void av1_convolve_2d_scale_sse4_1(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_qn,
+                                  const int x_step_qn,
+                                  const int subpel_y_q4,
+                                  const int y_step_qn,
+                                  ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_scale)(const uint8_t* src,
+                                          int src_stride,
+                                          uint8_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          InterpFilterParams* filter_params_x,
+                                          InterpFilterParams* filter_params_y,
+                                          const int subpel_x_qn,
+                                          const int x_step_qn,
+                                          const int subpel_y_q4,
+                                          const int y_step_qn,
+                                          ConvolveParams* conv_params);
+
+void av1_convolve_2d_sr_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_convolve_2d_sr_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_convolve_2d_sr_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_sr)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_convolve_horiz_rs_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             const int16_t* x_filters,
+                             int x0_qn,
+                             int x_step_qn);
+void av1_convolve_horiz_rs_sse4_1(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  const int16_t* x_filters,
+                                  int x0_qn,
+                                  int x_step_qn);
+RTCD_EXTERN void (*av1_convolve_horiz_rs)(const uint8_t* src,
+                                          int src_stride,
+                                          uint8_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          const int16_t* x_filters,
+                                          int x0_qn,
+                                          int x_step_qn);
+
+void av1_convolve_x_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_x_sr_sse2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+void av1_convolve_x_sr_avx2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_x_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_convolve_y_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_y_sr_sse2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+void av1_convolve_y_sr_avx2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_y_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_dr_prediction_z1_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z1 av1_dr_prediction_z1_c
+
+void av1_dr_prediction_z2_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z2 av1_dr_prediction_z2_c
+
+void av1_dr_prediction_z3_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z3 av1_dr_prediction_z3_c
+
+void av1_filter_intra_edge_c(uint8_t* p, int sz, int strength);
+void av1_filter_intra_edge_sse4_1(uint8_t* p, int sz, int strength);
+RTCD_EXTERN void (*av1_filter_intra_edge)(uint8_t* p, int sz, int strength);
+
+void av1_filter_intra_edge_high_c(uint16_t* p, int sz, int strength);
+void av1_filter_intra_edge_high_sse4_1(uint16_t* p, int sz, int strength);
+RTCD_EXTERN void (*av1_filter_intra_edge_high)(uint16_t* p,
+                                               int sz,
+                                               int strength);
+
+void av1_filter_intra_predictor_c(uint8_t* dst,
+                                  ptrdiff_t stride,
+                                  TX_SIZE tx_size,
+                                  const uint8_t* above,
+                                  const uint8_t* left,
+                                  int mode);
+void av1_filter_intra_predictor_sse4_1(uint8_t* dst,
+                                       ptrdiff_t stride,
+                                       TX_SIZE tx_size,
+                                       const uint8_t* above,
+                                       const uint8_t* left,
+                                       int mode);
+RTCD_EXTERN void (*av1_filter_intra_predictor)(uint8_t* dst,
+                                               ptrdiff_t stride,
+                                               TX_SIZE tx_size,
+                                               const uint8_t* above,
+                                               const uint8_t* left,
+                                               int mode);
+
+void av1_highbd_convolve8_c(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h,
+                            int bps);
+void av1_highbd_convolve8_sse2(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve8 av1_highbd_convolve8_sse2
+
+void av1_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+void av1_highbd_convolve8_horiz_sse2(const uint8_t* src,
+                                     ptrdiff_t src_stride,
+                                     uint8_t* dst,
+                                     ptrdiff_t dst_stride,
+                                     const int16_t* filter_x,
+                                     int x_step_q4,
+                                     const int16_t* filter_y,
+                                     int y_step_q4,
+                                     int w,
+                                     int h,
+                                     int bps);
+#define av1_highbd_convolve8_horiz av1_highbd_convolve8_horiz_sse2
+
+void av1_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+void av1_highbd_convolve8_vert_sse2(const uint8_t* src,
+                                    ptrdiff_t src_stride,
+                                    uint8_t* dst,
+                                    ptrdiff_t dst_stride,
+                                    const int16_t* filter_x,
+                                    int x_step_q4,
+                                    const int16_t* filter_y,
+                                    int y_step_q4,
+                                    int w,
+                                    int h,
+                                    int bps);
+#define av1_highbd_convolve8_vert av1_highbd_convolve8_vert_sse2
+
+void av1_highbd_convolve_2d_copy_sr_c(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_convolve_2d_copy_sr_sse2(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int subpel_y_q4,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+void av1_highbd_convolve_2d_copy_sr_avx2(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int subpel_y_q4,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_copy_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_2d_scale_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int x_step_qn,
+                                    const int subpel_y_q4,
+                                    const int y_step_qn,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_2d_scale_sse4_1(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int x_step_qn,
+                                         const int subpel_y_q4,
+                                         const int y_step_qn,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_scale)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int x_step_qn,
+    const int subpel_y_q4,
+    const int y_step_qn,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_2d_sr_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_convolve_2d_sr_ssse3(const uint16_t* src,
+                                     int src_stride,
+                                     uint16_t* dst,
+                                     int dst_stride,
+                                     int w,
+                                     int h,
+                                     InterpFilterParams* filter_params_x,
+                                     InterpFilterParams* filter_params_y,
+                                     const int subpel_x_q4,
+                                     const int subpel_y_q4,
+                                     ConvolveParams* conv_params,
+                                     int bd);
+void av1_highbd_convolve_2d_sr_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_avg_c(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve_avg av1_highbd_convolve_avg_c
+
+void av1_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define av1_highbd_convolve_copy av1_highbd_convolve_copy_c
+
+void av1_highbd_convolve_horiz_rs_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    const int16_t* x_filters,
+                                    int x0_qn,
+                                    int x_step_qn,
+                                    int bd);
+void av1_highbd_convolve_horiz_rs_sse4_1(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         const int16_t* x_filters,
+                                         int x0_qn,
+                                         int x_step_qn,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_horiz_rs)(const uint16_t* src,
+                                                 int src_stride,
+                                                 uint16_t* dst,
+                                                 int dst_stride,
+                                                 int w,
+                                                 int h,
+                                                 const int16_t* x_filters,
+                                                 int x0_qn,
+                                                 int x_step_qn,
+                                                 int bd);
+
+void av1_highbd_convolve_x_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+void av1_highbd_convolve_x_sr_ssse3(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_x_sr_avx2(const uint16_t* src,
+                                   int src_stride,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params,
+                                   int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_x_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_y_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+void av1_highbd_convolve_y_sr_ssse3(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_y_sr_avx2(const uint16_t* src,
+                                   int src_stride,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params,
+                                   int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_y_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_dr_prediction_z1_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z1 av1_highbd_dr_prediction_z1_c
+
+void av1_highbd_dr_prediction_z2_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z2 av1_highbd_dr_prediction_z2_c
+
+void av1_highbd_dr_prediction_z3_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z3 av1_highbd_dr_prediction_z3_c
+
+void av1_highbd_iwht4x4_16_add_c(const tran_low_t* input,
+                                 uint8_t* dest,
+                                 int dest_stride,
+                                 int bd);
+#define av1_highbd_iwht4x4_16_add av1_highbd_iwht4x4_16_add_c
+
+void av1_highbd_iwht4x4_1_add_c(const tran_low_t* input,
+                                uint8_t* dest,
+                                int dest_stride,
+                                int bd);
+#define av1_highbd_iwht4x4_1_add av1_highbd_iwht4x4_1_add_c
+
+void av1_highbd_jnt_convolve_2d_c(const uint16_t* src,
+                                  int src_stride,
+                                  uint16_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params,
+                                  int bd);
+void av1_highbd_jnt_convolve_2d_sse4_1(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+void av1_highbd_jnt_convolve_2d_avx2(const uint16_t* src,
+                                     int src_stride,
+                                     uint16_t* dst,
+                                     int dst_stride,
+                                     int w,
+                                     int h,
+                                     InterpFilterParams* filter_params_x,
+                                     InterpFilterParams* filter_params_y,
+                                     const int subpel_x_q4,
+                                     const int subpel_y_q4,
+                                     ConvolveParams* conv_params,
+                                     int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_2d)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_2d_copy_c(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+void av1_highbd_jnt_convolve_2d_copy_sse4_1(const uint16_t* src,
+                                            int src_stride,
+                                            uint16_t* dst,
+                                            int dst_stride,
+                                            int w,
+                                            int h,
+                                            InterpFilterParams* filter_params_x,
+                                            InterpFilterParams* filter_params_y,
+                                            const int subpel_x_q4,
+                                            const int subpel_y_q4,
+                                            ConvolveParams* conv_params,
+                                            int bd);
+void av1_highbd_jnt_convolve_2d_copy_avx2(const uint16_t* src,
+                                          int src_stride,
+                                          uint16_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          InterpFilterParams* filter_params_x,
+                                          InterpFilterParams* filter_params_y,
+                                          const int subpel_x_q4,
+                                          const int subpel_y_q4,
+                                          ConvolveParams* conv_params,
+                                          int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_2d_copy)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_x_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_jnt_convolve_x_sse4_1(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_jnt_convolve_x_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_x)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_y_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_jnt_convolve_y_sse4_1(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_jnt_convolve_y_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_y)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_warp_affine_c(const int32_t* mat,
+                              const uint16_t* ref,
+                              int width,
+                              int height,
+                              int stride,
+                              uint16_t* pred,
+                              int p_col,
+                              int p_row,
+                              int p_width,
+                              int p_height,
+                              int p_stride,
+                              int subsampling_x,
+                              int subsampling_y,
+                              int bd,
+                              ConvolveParams* conv_params,
+                              int16_t alpha,
+                              int16_t beta,
+                              int16_t gamma,
+                              int16_t delta);
+void av1_highbd_warp_affine_sse4_1(const int32_t* mat,
+                                   const uint16_t* ref,
+                                   int width,
+                                   int height,
+                                   int stride,
+                                   uint16_t* pred,
+                                   int p_col,
+                                   int p_row,
+                                   int p_width,
+                                   int p_height,
+                                   int p_stride,
+                                   int subsampling_x,
+                                   int subsampling_y,
+                                   int bd,
+                                   ConvolveParams* conv_params,
+                                   int16_t alpha,
+                                   int16_t beta,
+                                   int16_t gamma,
+                                   int16_t delta);
+RTCD_EXTERN void (*av1_highbd_warp_affine)(const int32_t* mat,
+                                           const uint16_t* ref,
+                                           int width,
+                                           int height,
+                                           int stride,
+                                           uint16_t* pred,
+                                           int p_col,
+                                           int p_row,
+                                           int p_width,
+                                           int p_height,
+                                           int p_stride,
+                                           int subsampling_x,
+                                           int subsampling_y,
+                                           int bd,
+                                           ConvolveParams* conv_params,
+                                           int16_t alpha,
+                                           int16_t beta,
+                                           int16_t gamma,
+                                           int16_t delta);
+
+void av1_highbd_wiener_convolve_add_src_c(const uint8_t* src,
+                                          ptrdiff_t src_stride,
+                                          uint8_t* dst,
+                                          ptrdiff_t dst_stride,
+                                          const int16_t* filter_x,
+                                          int x_step_q4,
+                                          const int16_t* filter_y,
+                                          int y_step_q4,
+                                          int w,
+                                          int h,
+                                          const ConvolveParams* conv_params,
+                                          int bps);
+void av1_highbd_wiener_convolve_add_src_ssse3(const uint8_t* src,
+                                              ptrdiff_t src_stride,
+                                              uint8_t* dst,
+                                              ptrdiff_t dst_stride,
+                                              const int16_t* filter_x,
+                                              int x_step_q4,
+                                              const int16_t* filter_y,
+                                              int y_step_q4,
+                                              int w,
+                                              int h,
+                                              const ConvolveParams* conv_params,
+                                              int bps);
+void av1_highbd_wiener_convolve_add_src_avx2(const uint8_t* src,
+                                             ptrdiff_t src_stride,
+                                             uint8_t* dst,
+                                             ptrdiff_t dst_stride,
+                                             const int16_t* filter_x,
+                                             int x_step_q4,
+                                             const int16_t* filter_y,
+                                             int y_step_q4,
+                                             int w,
+                                             int h,
+                                             const ConvolveParams* conv_params,
+                                             int bps);
+RTCD_EXTERN void (*av1_highbd_wiener_convolve_add_src)(
+    const uint8_t* src,
+    ptrdiff_t src_stride,
+    uint8_t* dst,
+    ptrdiff_t dst_stride,
+    const int16_t* filter_x,
+    int x_step_q4,
+    const int16_t* filter_y,
+    int y_step_q4,
+    int w,
+    int h,
+    const ConvolveParams* conv_params,
+    int bps);
+
+void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_16x16_sse4_1(const int32_t* input,
+                                     uint16_t* output,
+                                     int stride,
+                                     TX_TYPE tx_type,
+                                     int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_16x16)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
+
+void av1_inv_txfm2d_add_16x4_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x4 av1_inv_txfm2d_add_16x4_c
+
+void av1_inv_txfm2d_add_16x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x64 av1_inv_txfm2d_add_16x64_c
+
+void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
+
+void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
+
+void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_32x32_avx2(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_32x32)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_32x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x64 av1_inv_txfm2d_add_32x64_c
+
+void av1_inv_txfm2d_add_32x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_32x8 av1_inv_txfm2d_add_32x8_c
+
+void av1_inv_txfm2d_add_4x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_4x16 av1_inv_txfm2d_add_4x16_c
+
+void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+void av1_inv_txfm2d_add_4x4_sse4_1(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_4x4)(const int32_t* input,
+                                           uint16_t* output,
+                                           int stride,
+                                           TX_TYPE tx_type,
+                                           int bd);
+
+void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
+
+void av1_inv_txfm2d_add_64x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x16 av1_inv_txfm2d_add_64x16_c
+
+void av1_inv_txfm2d_add_64x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x32 av1_inv_txfm2d_add_64x32_c
+
+void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_64x64_sse4_1(const int32_t* input,
+                                     uint16_t* output,
+                                     int stride,
+                                     TX_TYPE tx_type,
+                                     int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_64x64)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
+
+void av1_inv_txfm2d_add_8x32_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x32 av1_inv_txfm2d_add_8x32_c
+
+void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
+
+void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+void av1_inv_txfm2d_add_8x8_sse4_1(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_8x8)(const int32_t* input,
+                                           uint16_t* output,
+                                           int stride,
+                                           TX_TYPE tx_type,
+                                           int bd);
+
+void av1_inv_txfm_add_c(const tran_low_t* dqcoeff,
+                        uint8_t* dst,
+                        int stride,
+                        const TxfmParam* txfm_param);
+void av1_inv_txfm_add_ssse3(const tran_low_t* dqcoeff,
+                            uint8_t* dst,
+                            int stride,
+                            const TxfmParam* txfm_param);
+void av1_inv_txfm_add_avx2(const tran_low_t* dqcoeff,
+                           uint8_t* dst,
+                           int stride,
+                           const TxfmParam* txfm_param);
+RTCD_EXTERN void (*av1_inv_txfm_add)(const tran_low_t* dqcoeff,
+                                     uint8_t* dst,
+                                     int stride,
+                                     const TxfmParam* txfm_param);
+
+void av1_jnt_convolve_2d_c(const uint8_t* src,
+                           int src_stride,
+                           uint8_t* dst,
+                           int dst_stride,
+                           int w,
+                           int h,
+                           InterpFilterParams* filter_params_x,
+                           InterpFilterParams* filter_params_y,
+                           const int subpel_x_q4,
+                           const int subpel_y_q4,
+                           ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_ssse3(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_avx2(const uint8_t* src,
+                              int src_stride,
+                              uint8_t* dst,
+                              int dst_stride,
+                              int w,
+                              int h,
+                              InterpFilterParams* filter_params_x,
+                              InterpFilterParams* filter_params_y,
+                              const int subpel_x_q4,
+                              const int subpel_y_q4,
+                              ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d)(const uint8_t* src,
+                                        int src_stride,
+                                        uint8_t* dst,
+                                        int dst_stride,
+                                        int w,
+                                        int h,
+                                        InterpFilterParams* filter_params_x,
+                                        InterpFilterParams* filter_params_y,
+                                        const int subpel_x_q4,
+                                        const int subpel_y_q4,
+                                        ConvolveParams* conv_params);
+
+void av1_jnt_convolve_2d_copy_c(const uint8_t* src,
+                                int src_stride,
+                                uint8_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_sse2(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_avx2(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d_copy)(
+    const uint8_t* src,
+    int src_stride,
+    uint8_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params);
+
+void av1_jnt_convolve_x_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_x_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_jnt_convolve_x_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_x)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_jnt_convolve_y_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_y_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_jnt_convolve_y_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_y)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_selfguided_restoration_c(const uint8_t* dgd8,
+                                  int width,
+                                  int height,
+                                  int dgd_stride,
+                                  int32_t* flt0,
+                                  int32_t* flt1,
+                                  int flt_stride,
+                                  int sgr_params_idx,
+                                  int bit_depth,
+                                  int highbd);
+void av1_selfguided_restoration_sse4_1(const uint8_t* dgd8,
+                                       int width,
+                                       int height,
+                                       int dgd_stride,
+                                       int32_t* flt0,
+                                       int32_t* flt1,
+                                       int flt_stride,
+                                       int sgr_params_idx,
+                                       int bit_depth,
+                                       int highbd);
+void av1_selfguided_restoration_avx2(const uint8_t* dgd8,
+                                     int width,
+                                     int height,
+                                     int dgd_stride,
+                                     int32_t* flt0,
+                                     int32_t* flt1,
+                                     int flt_stride,
+                                     int sgr_params_idx,
+                                     int bit_depth,
+                                     int highbd);
+RTCD_EXTERN void (*av1_selfguided_restoration)(const uint8_t* dgd8,
+                                               int width,
+                                               int height,
+                                               int dgd_stride,
+                                               int32_t* flt0,
+                                               int32_t* flt1,
+                                               int flt_stride,
+                                               int sgr_params_idx,
+                                               int bit_depth,
+                                               int highbd);
+
+void av1_upsample_intra_edge_c(uint8_t* p, int sz);
+void av1_upsample_intra_edge_sse4_1(uint8_t* p, int sz);
+RTCD_EXTERN void (*av1_upsample_intra_edge)(uint8_t* p, int sz);
+
+void av1_upsample_intra_edge_high_c(uint16_t* p, int sz, int bd);
+void av1_upsample_intra_edge_high_sse4_1(uint16_t* p, int sz, int bd);
+RTCD_EXTERN void (*av1_upsample_intra_edge_high)(uint16_t* p, int sz, int bd);
+
+void av1_warp_affine_c(const int32_t* mat,
+                       const uint8_t* ref,
+                       int width,
+                       int height,
+                       int stride,
+                       uint8_t* pred,
+                       int p_col,
+                       int p_row,
+                       int p_width,
+                       int p_height,
+                       int p_stride,
+                       int subsampling_x,
+                       int subsampling_y,
+                       ConvolveParams* conv_params,
+                       int16_t alpha,
+                       int16_t beta,
+                       int16_t gamma,
+                       int16_t delta);
+void av1_warp_affine_sse4_1(const int32_t* mat,
+                            const uint8_t* ref,
+                            int width,
+                            int height,
+                            int stride,
+                            uint8_t* pred,
+                            int p_col,
+                            int p_row,
+                            int p_width,
+                            int p_height,
+                            int p_stride,
+                            int subsampling_x,
+                            int subsampling_y,
+                            ConvolveParams* conv_params,
+                            int16_t alpha,
+                            int16_t beta,
+                            int16_t gamma,
+                            int16_t delta);
+RTCD_EXTERN void (*av1_warp_affine)(const int32_t* mat,
+                                    const uint8_t* ref,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    uint8_t* pred,
+                                    int p_col,
+                                    int p_row,
+                                    int p_width,
+                                    int p_height,
+                                    int p_stride,
+                                    int subsampling_x,
+                                    int subsampling_y,
+                                    ConvolveParams* conv_params,
+                                    int16_t alpha,
+                                    int16_t beta,
+                                    int16_t gamma,
+                                    int16_t delta);
+
+void av1_wiener_convolve_add_src_c(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_sse2(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_avx2(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_wiener_convolve_add_src)(
+    const uint8_t* src,
+    ptrdiff_t src_stride,
+    uint8_t* dst,
+    ptrdiff_t dst_stride,
+    const int16_t* filter_x,
+    int x_step_q4,
+    const int16_t* filter_y,
+    int y_step_q4,
+    int w,
+    int h,
+    const ConvolveParams* conv_params);
+
+void cdef_filter_block_c(uint8_t* dst8,
+                         uint16_t* dst16,
+                         int dstride,
+                         const uint16_t* in,
+                         int pri_strength,
+                         int sec_strength,
+                         int dir,
+                         int pri_damping,
+                         int sec_damping,
+                         int bsize,
+                         int max,
+                         int coeff_shift);
+void cdef_filter_block_sse2(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+void cdef_filter_block_ssse3(uint8_t* dst8,
+                             uint16_t* dst16,
+                             int dstride,
+                             const uint16_t* in,
+                             int pri_strength,
+                             int sec_strength,
+                             int dir,
+                             int pri_damping,
+                             int sec_damping,
+                             int bsize,
+                             int max,
+                             int coeff_shift);
+void cdef_filter_block_sse4_1(uint8_t* dst8,
+                              uint16_t* dst16,
+                              int dstride,
+                              const uint16_t* in,
+                              int pri_strength,
+                              int sec_strength,
+                              int dir,
+                              int pri_damping,
+                              int sec_damping,
+                              int bsize,
+                              int max,
+                              int coeff_shift);
+void cdef_filter_block_avx2(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+RTCD_EXTERN void (*cdef_filter_block)(uint8_t* dst8,
+                                      uint16_t* dst16,
+                                      int dstride,
+                                      const uint16_t* in,
+                                      int pri_strength,
+                                      int sec_strength,
+                                      int dir,
+                                      int pri_damping,
+                                      int sec_damping,
+                                      int bsize,
+                                      int max,
+                                      int coeff_shift);
+
+int cdef_find_dir_c(const uint16_t* img,
+                    int stride,
+                    int32_t* var,
+                    int coeff_shift);
+int cdef_find_dir_sse2(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+int cdef_find_dir_ssse3(const uint16_t* img,
+                        int stride,
+                        int32_t* var,
+                        int coeff_shift);
+int cdef_find_dir_sse4_1(const uint16_t* img,
+                         int stride,
+                         int32_t* var,
+                         int coeff_shift);
+int cdef_find_dir_avx2(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+RTCD_EXTERN int (*cdef_find_dir)(const uint16_t* img,
+                                 int stride,
+                                 int32_t* var,
+                                 int coeff_shift);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_420_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_420_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_422_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_422_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_444_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_444_lbd)(
+    TX_SIZE tx_size);
+
+void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
+                                 int dstride,
+                                 const uint16_t* src,
+                                 int sstride,
+                                 int v,
+                                 int h);
+void copy_rect8_16bit_to_16bit_sse2(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+void copy_rect8_16bit_to_16bit_ssse3(uint16_t* dst,
+                                     int dstride,
+                                     const uint16_t* src,
+                                     int sstride,
+                                     int v,
+                                     int h);
+void copy_rect8_16bit_to_16bit_sse4_1(uint16_t* dst,
+                                      int dstride,
+                                      const uint16_t* src,
+                                      int sstride,
+                                      int v,
+                                      int h);
+void copy_rect8_16bit_to_16bit_avx2(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+RTCD_EXTERN void (*copy_rect8_16bit_to_16bit)(uint16_t* dst,
+                                              int dstride,
+                                              const uint16_t* src,
+                                              int sstride,
+                                              int v,
+                                              int h);
+
+void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
+                                int dstride,
+                                const uint8_t* src,
+                                int sstride,
+                                int v,
+                                int h);
+void copy_rect8_8bit_to_16bit_sse2(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+void copy_rect8_8bit_to_16bit_ssse3(uint16_t* dst,
+                                    int dstride,
+                                    const uint8_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+void copy_rect8_8bit_to_16bit_sse4_1(uint16_t* dst,
+                                     int dstride,
+                                     const uint8_t* src,
+                                     int sstride,
+                                     int v,
+                                     int h);
+void copy_rect8_8bit_to_16bit_avx2(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+RTCD_EXTERN void (*copy_rect8_8bit_to_16bit)(uint16_t* dst,
+                                             int dstride,
+                                             const uint8_t* src,
+                                             int sstride,
+                                             int v,
+                                             int h);
+
+cfl_predict_hbd_fn get_predict_hbd_fn_c(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_ssse3(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_hbd_fn (*get_predict_hbd_fn)(TX_SIZE tx_size);
+
+cfl_predict_lbd_fn get_predict_lbd_fn_c(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_ssse3(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_lbd_fn (*get_predict_lbd_fn)(TX_SIZE tx_size);
+
+cfl_subtract_average_fn get_subtract_average_fn_c(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_sse2(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subtract_average_fn (*get_subtract_average_fn)(TX_SIZE tx_size);
+
+void av1_rtcd(void);
+
+#ifdef RTCD_C
+#include "aom_ports/x86.h"
+static void setup_rtcd_internal(void) {
+  int flags = x86_simd_caps();
+
+  (void)flags;
+
+  apply_selfguided_restoration = apply_selfguided_restoration_c;
+  if (flags & HAS_SSE4_1)
+    apply_selfguided_restoration = apply_selfguided_restoration_sse4_1;
+  if (flags & HAS_AVX2)
+    apply_selfguided_restoration = apply_selfguided_restoration_avx2;
+  av1_build_compound_diffwtd_mask = av1_build_compound_diffwtd_mask_c;
+  if (flags & HAS_SSE4_1)
+    av1_build_compound_diffwtd_mask = av1_build_compound_diffwtd_mask_sse4_1;
+  av1_build_compound_diffwtd_mask_d16 = av1_build_compound_diffwtd_mask_d16_c;
+  if (flags & HAS_SSE4_1)
+    av1_build_compound_diffwtd_mask_d16 =
+        av1_build_compound_diffwtd_mask_d16_sse4_1;
+  av1_build_compound_diffwtd_mask_highbd =
+      av1_build_compound_diffwtd_mask_highbd_c;
+  if (flags & HAS_SSSE3)
+    av1_build_compound_diffwtd_mask_highbd =
+        av1_build_compound_diffwtd_mask_highbd_ssse3;
+  if (flags & HAS_AVX2)
+    av1_build_compound_diffwtd_mask_highbd =
+        av1_build_compound_diffwtd_mask_highbd_avx2;
+  av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_avx2;
+  av1_convolve_2d_scale = av1_convolve_2d_scale_c;
+  if (flags & HAS_SSE4_1)
+    av1_convolve_2d_scale = av1_convolve_2d_scale_sse4_1;
+  av1_convolve_2d_sr = av1_convolve_2d_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_2d_sr = av1_convolve_2d_sr_avx2;
+  av1_convolve_horiz_rs = av1_convolve_horiz_rs_c;
+  if (flags & HAS_SSE4_1)
+    av1_convolve_horiz_rs = av1_convolve_horiz_rs_sse4_1;
+  av1_convolve_x_sr = av1_convolve_x_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_x_sr = av1_convolve_x_sr_avx2;
+  av1_convolve_y_sr = av1_convolve_y_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_y_sr = av1_convolve_y_sr_avx2;
+  av1_filter_intra_edge = av1_filter_intra_edge_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_edge = av1_filter_intra_edge_sse4_1;
+  av1_filter_intra_edge_high = av1_filter_intra_edge_high_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_edge_high = av1_filter_intra_edge_high_sse4_1;
+  av1_filter_intra_predictor = av1_filter_intra_predictor_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_predictor = av1_filter_intra_predictor_sse4_1;
+  av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_avx2;
+  av1_highbd_convolve_2d_scale = av1_highbd_convolve_2d_scale_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_convolve_2d_scale = av1_highbd_convolve_2d_scale_sse4_1;
+  av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_avx2;
+  av1_highbd_convolve_horiz_rs = av1_highbd_convolve_horiz_rs_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_convolve_horiz_rs = av1_highbd_convolve_horiz_rs_sse4_1;
+  av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_avx2;
+  av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_avx2;
+  av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_avx2;
+  av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_avx2;
+  av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_avx2;
+  av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_avx2;
+  av1_highbd_warp_affine = av1_highbd_warp_affine_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_warp_affine = av1_highbd_warp_affine_sse4_1;
+  av1_highbd_wiener_convolve_add_src = av1_highbd_wiener_convolve_add_src_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_wiener_convolve_add_src =
+        av1_highbd_wiener_convolve_add_src_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_wiener_convolve_add_src =
+        av1_highbd_wiener_convolve_add_src_avx2;
+  av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_sse4_1;
+  av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_c;
+  if (flags & HAS_AVX2)
+    av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_avx2;
+  av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_sse4_1;
+  av1_inv_txfm2d_add_64x64 = av1_inv_txfm2d_add_64x64_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_64x64 = av1_inv_txfm2d_add_64x64_sse4_1;
+  av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_sse4_1;
+  av1_inv_txfm_add = av1_inv_txfm_add_c;
+  if (flags & HAS_SSSE3)
+    av1_inv_txfm_add = av1_inv_txfm_add_ssse3;
+  if (flags & HAS_AVX2)
+    av1_inv_txfm_add = av1_inv_txfm_add_avx2;
+  av1_jnt_convolve_2d = av1_jnt_convolve_2d_c;
+  if (flags & HAS_SSSE3)
+    av1_jnt_convolve_2d = av1_jnt_convolve_2d_ssse3;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_2d = av1_jnt_convolve_2d_avx2;
+  av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_avx2;
+  av1_jnt_convolve_x = av1_jnt_convolve_x_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_x = av1_jnt_convolve_x_avx2;
+  av1_jnt_convolve_y = av1_jnt_convolve_y_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_y = av1_jnt_convolve_y_avx2;
+  av1_selfguided_restoration = av1_selfguided_restoration_c;
+  if (flags & HAS_SSE4_1)
+    av1_selfguided_restoration = av1_selfguided_restoration_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_selfguided_restoration = av1_selfguided_restoration_avx2;
+  av1_upsample_intra_edge = av1_upsample_intra_edge_c;
+  if (flags & HAS_SSE4_1)
+    av1_upsample_intra_edge = av1_upsample_intra_edge_sse4_1;
+  av1_upsample_intra_edge_high = av1_upsample_intra_edge_high_c;
+  if (flags & HAS_SSE4_1)
+    av1_upsample_intra_edge_high = av1_upsample_intra_edge_high_sse4_1;
+  av1_warp_affine = av1_warp_affine_c;
+  if (flags & HAS_SSE4_1)
+    av1_warp_affine = av1_warp_affine_sse4_1;
+  av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_sse2;
+  if (flags & HAS_AVX2)
+    av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_avx2;
+  cdef_filter_block = cdef_filter_block_sse2;
+  if (flags & HAS_SSSE3)
+    cdef_filter_block = cdef_filter_block_ssse3;
+  if (flags & HAS_SSE4_1)
+    cdef_filter_block = cdef_filter_block_sse4_1;
+  if (flags & HAS_AVX2)
+    cdef_filter_block = cdef_filter_block_avx2;
+  cdef_find_dir = cdef_find_dir_sse2;
+  if (flags & HAS_SSSE3)
+    cdef_find_dir = cdef_find_dir_ssse3;
+  if (flags & HAS_SSE4_1)
+    cdef_find_dir = cdef_find_dir_sse4_1;
+  if (flags & HAS_AVX2)
+    cdef_find_dir = cdef_find_dir_avx2;
+  cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_avx2;
+  cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_avx2;
+  cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_avx2;
+  cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_avx2;
+  cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_avx2;
+  cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_avx2;
+  copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse2;
+  if (flags & HAS_SSSE3)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_ssse3;
+  if (flags & HAS_SSE4_1)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse4_1;
+  if (flags & HAS_AVX2)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_avx2;
+  copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse2;
+  if (flags & HAS_SSSE3)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_ssse3;
+  if (flags & HAS_SSE4_1)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse4_1;
+  if (flags & HAS_AVX2)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_avx2;
+  get_predict_hbd_fn = get_predict_hbd_fn_c;
+  if (flags & HAS_SSSE3)
+    get_predict_hbd_fn = get_predict_hbd_fn_ssse3;
+  if (flags & HAS_AVX2)
+    get_predict_hbd_fn = get_predict_hbd_fn_avx2;
+  get_predict_lbd_fn = get_predict_lbd_fn_c;
+  if (flags & HAS_SSSE3)
+    get_predict_lbd_fn = get_predict_lbd_fn_ssse3;
+  if (flags & HAS_AVX2)
+    get_predict_lbd_fn = get_predict_lbd_fn_avx2;
+  get_subtract_average_fn = get_subtract_average_fn_sse2;
+  if (flags & HAS_AVX2)
+    get_subtract_average_fn = get_subtract_average_fn_avx2;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/win/ia32/aom_config.asm b/third_party/libaom/source/config/win/ia32/aom_config.asm
deleted file mode 100644
index f5a2bf89..0000000
--- a/third_party/libaom/source/config/win/ia32/aom_config.asm
+++ /dev/null
@@ -1,168 +0,0 @@
-%define ARCH_ARM 0
-%define ARCH_MIPS 0
-%define ARCH_X86 1
-%define ARCH_X86_64 0
-%define HAVE_NEON 0
-%define HAVE_NEON_ASM 0
-%define HAVE_MIPS32 0
-%define HAVE_DSPR2 0
-%define HAVE_MSA 0
-%define HAVE_MIPS64 0
-%define HAVE_MMX 1
-%define HAVE_SSE 1
-%define HAVE_SSE2 1
-%define HAVE_SSE3 1
-%define HAVE_SSSE3 1
-%define HAVE_SSE4_1 1
-%define HAVE_AVX 1
-%define HAVE_AVX2 1
-%define HAVE_AOM_PORTS 1
-%define HAVE_FEXCEPT 1
-%define HAVE_PTHREAD_H 0
-%define HAVE_UNISTD_H 0
-%define HAVE_WXWIDGETS 0
-%define CONFIG_DEPENDENCY_TRACKING 1
-%define CONFIG_EXTERNAL_BUILD 1
-%define CONFIG_INSTALL_DOCS 0
-%define CONFIG_INSTALL_BINS 1
-%define CONFIG_INSTALL_LIBS 1
-%define CONFIG_INSTALL_SRCS 0
-%define CONFIG_DEBUG 0
-%define CONFIG_GPROF 0
-%define CONFIG_GCOV 0
-%define CONFIG_RVCT 0
-%define CONFIG_GCC 0
-%define CONFIG_MSVS 1
-%define CONFIG_PIC 1
-%define CONFIG_BIG_ENDIAN 0
-%define CONFIG_CODEC_SRCS 0
-%define CONFIG_DEBUG_LIBS 0
-%define CONFIG_RUNTIME_CPU_DETECT 1
-%define CONFIG_POSTPROC 1
-%define CONFIG_MULTITHREAD 1
-%define CONFIG_INTERNAL_STATS 0
-%define CONFIG_AV1_ENCODER 0
-%define CONFIG_AV1_DECODER 1
-%define CONFIG_AV1 1
-%define CONFIG_STATIC_MSVCRT 0
-%define CONFIG_SPATIAL_RESAMPLING 1
-%define CONFIG_REALTIME_ONLY 1
-%define CONFIG_SHARED 0
-%define CONFIG_STATIC 1
-%define CONFIG_SMALL 0
-%define CONFIG_POSTPROC_VISUALIZER 0
-%define CONFIG_OS_SUPPORT 1
-%define CONFIG_UNIT_TESTS 1
-%define CONFIG_WEBM_IO 1
-%define CONFIG_LIBYUV 1
-%define CONFIG_ACCOUNTING 0
-%define CONFIG_INSPECTION 0
-%define CONFIG_DECODE_PERF_TESTS 0
-%define CONFIG_ENCODE_PERF_TESTS 0
-%define CONFIG_COEFFICIENT_RANGE_CHECKING 0
-%define CONFIG_LOWBITDEPTH 1
-%define CONFIG_HIGHBITDEPTH 0
-%define CONFIG_EXPERIMENTAL 0
-%define CONFIG_SIZE_LIMIT 1
-%define CONFIG_FP_MB_STATS 0
-%define CONFIG_CDEF 1
-%define CONFIG_CDEF_SINGLEPASS 0
-%define CONFIG_VAR_TX 1
-%define CONFIG_RECT_TX 1
-%define CONFIG_RECT_TX_EXT 0
-%define CONFIG_TPL_MV 0
-%define CONFIG_DUAL_FILTER 1
-%define CONFIG_CONVOLVE_ROUND 1
-%define CONFIG_COMPOUND_ROUND 0
-%define CONFIG_EXT_TX 1
-%define CONFIG_DPCM_INTRA 0
-%define CONFIG_TX64X64 0
-%define CONFIG_EXT_INTRA 1
-%define CONFIG_INTRA_INTERP 0
-%define CONFIG_FILTER_INTRA 0
-%define CONFIG_INTRA_EDGE 0
-%define CONFIG_INTRABC 0
-%define CONFIG_EXT_INTER 1
-%define CONFIG_INTERINTRA 1
-%define CONFIG_WEDGE 1
-%define CONFIG_COMPOUND_SEGMENT 1
-%define CONFIG_EXT_REFS 1
-%define CONFIG_SPEED_REFS 0
-%define CONFIG_GF_GROUPS 0
-%define CONFIG_GLOBAL_MOTION 1
-%define CONFIG_NEW_QUANT 0
-%define CONFIG_SUPERTX 0
-%define CONFIG_ANS 0
-%define CONFIG_LOOP_RESTORATION 0
-%define CONFIG_EXT_PARTITION 0
-%define CONFIG_EXT_PARTITION_TYPES 0
-%define CONFIG_UNPOISON_PARTITION_CTX 0
-%define CONFIG_EXT_TILE 0
-%define CONFIG_MOTION_VAR 1
-%define CONFIG_NCOBMC 0
-%define CONFIG_WARPED_MOTION 1
-%define CONFIG_Q_ADAPT_PROBS 0
-%define CONFIG_BITSTREAM_DEBUG 0
-%define CONFIG_INTER_STATS_ONLY 0
-%define CONFIG_PALETTE_DELTA_ENCODING 0
-%define CONFIG_RAWBITS 0
-%define CONFIG_PVQ 0
-%define CONFIG_CFL 0
-%define CONFIG_XIPHRC 0
-%define CONFIG_DCT_ONLY 0
-%define CONFIG_DAALA_DCT4 0
-%define CONFIG_DAALA_DCT8 0
-%define CONFIG_DAALA_DCT16 0
-%define CONFIG_DAALA_DCT32 0
-%define CONFIG_DAALA_DCT64 0
-%define CONFIG_CB4X4 1
-%define CONFIG_CHROMA_2X2 0
-%define CONFIG_CHROMA_SUB8X8 1
-%define CONFIG_FRAME_SIZE 0
-%define CONFIG_DELTA_Q 1
-%define CONFIG_EXT_DELTA_Q 1
-%define CONFIG_ADAPT_SCAN 0
-%define CONFIG_FILTER_7BIT 1
-%define CONFIG_PARALLEL_DEBLOCKING 1
-%define CONFIG_LOOPFILTERING_ACROSS_TILES 1
-%define CONFIG_TEMPMV_SIGNALING 1
-%define CONFIG_RD_DEBUG 0
-%define CONFIG_REFERENCE_BUFFER 1
-%define CONFIG_COEF_INTERLEAVE 0
-%define CONFIG_ENTROPY_STATS 0
-%define CONFIG_MASKED_TX 0
-%define CONFIG_DEPENDENT_HORZTILES 0
-%define CONFIG_DIST_8X8 1
-%define CONFIG_TRIPRED 0
-%define CONFIG_PALETTE_THROUGHPUT 1
-%define CONFIG_REF_ADAPT 0
-%define CONFIG_LV_MAP 0
-%define CONFIG_TXK_SEL 0
-%define CONFIG_MV_COMPRESS 1
-%define CONFIG_SEGMENT_ZEROMV 0
-%define CONFIG_FRAME_SUPERRES 0
-%define CONFIG_NEW_MULTISYMBOL 0
-%define CONFIG_COMPOUND_SINGLEREF 0
-%define CONFIG_AOM_QM 1
-%define CONFIG_ONE_SIDED_COMPOUND 1
-%define CONFIG_EXT_COMP_REFS 1
-%define CONFIG_SMOOTH_HV 1
-%define CONFIG_VAR_REFS 0
-%define CONFIG_RECT_INTRA_PRED 1
-%define CONFIG_LGT 0
-%define CONFIG_SBL_SYMBOL 0
-%define CONFIG_NCOBMC_ADAPT_WEIGHT 0
-%define CONFIG_BGSPRITE 0
-%define CONFIG_VAR_TX_NO_TX_MODE 0
-%define CONFIG_MRC_TX 0
-%define CONFIG_LPF_DIRECT 0
-%define CONFIG_LOOPFILTER_LEVEL 0
-%define CONFIG_NO_FRAME_CONTEXT_SIGNALING 0
-%define CONFIG_TXMG 0
-%define CONFIG_HASH_ME 0
-%define CONFIG_COLORSPACE_HEADERS 0
-%define CONFIG_MFMV 0
-%define CONFIG_JNT_COMP 0
-%define CONFIG_ANALYZER 0
-%define DECODE_WIDTH_LIMIT 16384
-%define DECODE_HEIGHT_LIMIT 16384
diff --git a/third_party/libaom/source/config/win/ia32/aom_config.c b/third_party/libaom/source/config/win/ia32/aom_config.c
deleted file mode 100644
index 8287790..0000000
--- a/third_party/libaom/source/config/win/ia32/aom_config.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-#include "aom/aom_codec.h"
-static const char* const cfg = "--target=x86-win32-vs12 --enable-external-build --enable-postproc --disable-av1-encoder --size-limit=16384x16384 --enable-realtime-only --disable-install-docs --disable-highbitdepth --enable-pic --as=yasm";
-const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/win/ia32/aom_config.h b/third_party/libaom/source/config/win/ia32/aom_config.h
deleted file mode 100644
index d208c35..0000000
--- a/third_party/libaom/source/config/win/ia32/aom_config.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-/* This file automatically generated by configure. Do not edit! */
-#ifndef AOM_CONFIG_H
-#define AOM_CONFIG_H
-#define RESTRICT    
-#define INLINE      __forceinline
-#define ARCH_ARM 0
-#define ARCH_MIPS 0
-#define ARCH_X86 1
-#define ARCH_X86_64 0
-#define HAVE_NEON 0
-#define HAVE_NEON_ASM 0
-#define HAVE_MIPS32 0
-#define HAVE_DSPR2 0
-#define HAVE_MSA 0
-#define HAVE_MIPS64 0
-#define HAVE_MMX 1
-#define HAVE_SSE 1
-#define HAVE_SSE2 1
-#define HAVE_SSE3 1
-#define HAVE_SSSE3 1
-#define HAVE_SSE4_1 1
-#define HAVE_AVX 1
-#define HAVE_AVX2 1
-#define HAVE_AOM_PORTS 1
-#define HAVE_FEXCEPT 1
-#define HAVE_PTHREAD_H 0
-#define HAVE_UNISTD_H 0
-#define HAVE_WXWIDGETS 0
-#define CONFIG_DEPENDENCY_TRACKING 1
-#define CONFIG_EXTERNAL_BUILD 1
-#define CONFIG_INSTALL_DOCS 0
-#define CONFIG_INSTALL_BINS 1
-#define CONFIG_INSTALL_LIBS 1
-#define CONFIG_INSTALL_SRCS 0
-#define CONFIG_DEBUG 0
-#define CONFIG_GPROF 0
-#define CONFIG_GCOV 0
-#define CONFIG_RVCT 0
-#define CONFIG_GCC 0
-#define CONFIG_MSVS 1
-#define CONFIG_PIC 1
-#define CONFIG_BIG_ENDIAN 0
-#define CONFIG_CODEC_SRCS 0
-#define CONFIG_DEBUG_LIBS 0
-#define CONFIG_RUNTIME_CPU_DETECT 1
-#define CONFIG_POSTPROC 1
-#define CONFIG_MULTITHREAD 1
-#define CONFIG_INTERNAL_STATS 0
-#define CONFIG_AV1_ENCODER 0
-#define CONFIG_AV1_DECODER 1
-#define CONFIG_AV1 1
-#define CONFIG_STATIC_MSVCRT 0
-#define CONFIG_SPATIAL_RESAMPLING 1
-#define CONFIG_REALTIME_ONLY 1
-#define CONFIG_SHARED 0
-#define CONFIG_STATIC 1
-#define CONFIG_SMALL 0
-#define CONFIG_POSTPROC_VISUALIZER 0
-#define CONFIG_OS_SUPPORT 1
-#define CONFIG_UNIT_TESTS 1
-#define CONFIG_WEBM_IO 1
-#define CONFIG_LIBYUV 1
-#define CONFIG_ACCOUNTING 0
-#define CONFIG_INSPECTION 0
-#define CONFIG_DECODE_PERF_TESTS 0
-#define CONFIG_ENCODE_PERF_TESTS 0
-#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
-#define CONFIG_LOWBITDEPTH 1
-#define CONFIG_HIGHBITDEPTH 0
-#define CONFIG_EXPERIMENTAL 0
-#define CONFIG_SIZE_LIMIT 1
-#define CONFIG_FP_MB_STATS 0
-#define CONFIG_CDEF 1
-#define CONFIG_CDEF_SINGLEPASS 0
-#define CONFIG_VAR_TX 1
-#define CONFIG_RECT_TX 1
-#define CONFIG_RECT_TX_EXT 0
-#define CONFIG_TPL_MV 0
-#define CONFIG_DUAL_FILTER 1
-#define CONFIG_CONVOLVE_ROUND 1
-#define CONFIG_COMPOUND_ROUND 0
-#define CONFIG_EXT_TX 1
-#define CONFIG_DPCM_INTRA 0
-#define CONFIG_TX64X64 0
-#define CONFIG_EXT_INTRA 1
-#define CONFIG_INTRA_INTERP 0
-#define CONFIG_FILTER_INTRA 0
-#define CONFIG_INTRA_EDGE 0
-#define CONFIG_INTRABC 0
-#define CONFIG_EXT_INTER 1
-#define CONFIG_INTERINTRA 1
-#define CONFIG_WEDGE 1
-#define CONFIG_COMPOUND_SEGMENT 1
-#define CONFIG_EXT_REFS 1
-#define CONFIG_SPEED_REFS 0
-#define CONFIG_GF_GROUPS 0
-#define CONFIG_GLOBAL_MOTION 1
-#define CONFIG_NEW_QUANT 0
-#define CONFIG_SUPERTX 0
-#define CONFIG_ANS 0
-#define CONFIG_LOOP_RESTORATION 0
-#define CONFIG_EXT_PARTITION 0
-#define CONFIG_EXT_PARTITION_TYPES 0
-#define CONFIG_UNPOISON_PARTITION_CTX 0
-#define CONFIG_EXT_TILE 0
-#define CONFIG_MOTION_VAR 1
-#define CONFIG_NCOBMC 0
-#define CONFIG_WARPED_MOTION 1
-#define CONFIG_Q_ADAPT_PROBS 0
-#define CONFIG_BITSTREAM_DEBUG 0
-#define CONFIG_INTER_STATS_ONLY 0
-#define CONFIG_PALETTE_DELTA_ENCODING 0
-#define CONFIG_RAWBITS 0
-#define CONFIG_PVQ 0
-#define CONFIG_CFL 0
-#define CONFIG_XIPHRC 0
-#define CONFIG_DCT_ONLY 0
-#define CONFIG_DAALA_DCT4 0
-#define CONFIG_DAALA_DCT8 0
-#define CONFIG_DAALA_DCT16 0
-#define CONFIG_DAALA_DCT32 0
-#define CONFIG_DAALA_DCT64 0
-#define CONFIG_CB4X4 1
-#define CONFIG_CHROMA_2X2 0
-#define CONFIG_CHROMA_SUB8X8 1
-#define CONFIG_FRAME_SIZE 0
-#define CONFIG_DELTA_Q 1
-#define CONFIG_EXT_DELTA_Q 1
-#define CONFIG_ADAPT_SCAN 0
-#define CONFIG_FILTER_7BIT 1
-#define CONFIG_PARALLEL_DEBLOCKING 1
-#define CONFIG_LOOPFILTERING_ACROSS_TILES 1
-#define CONFIG_TEMPMV_SIGNALING 1
-#define CONFIG_RD_DEBUG 0
-#define CONFIG_REFERENCE_BUFFER 1
-#define CONFIG_COEF_INTERLEAVE 0
-#define CONFIG_ENTROPY_STATS 0
-#define CONFIG_MASKED_TX 0
-#define CONFIG_DEPENDENT_HORZTILES 0
-#define CONFIG_DIST_8X8 1
-#define CONFIG_TRIPRED 0
-#define CONFIG_PALETTE_THROUGHPUT 1
-#define CONFIG_REF_ADAPT 0
-#define CONFIG_LV_MAP 0
-#define CONFIG_TXK_SEL 0
-#define CONFIG_MV_COMPRESS 1
-#define CONFIG_SEGMENT_ZEROMV 0
-#define CONFIG_FRAME_SUPERRES 0
-#define CONFIG_NEW_MULTISYMBOL 0
-#define CONFIG_COMPOUND_SINGLEREF 0
-#define CONFIG_AOM_QM 1
-#define CONFIG_ONE_SIDED_COMPOUND 1
-#define CONFIG_EXT_COMP_REFS 1
-#define CONFIG_SMOOTH_HV 1
-#define CONFIG_VAR_REFS 0
-#define CONFIG_RECT_INTRA_PRED 1
-#define CONFIG_LGT 0
-#define CONFIG_SBL_SYMBOL 0
-#define CONFIG_NCOBMC_ADAPT_WEIGHT 0
-#define CONFIG_BGSPRITE 0
-#define CONFIG_VAR_TX_NO_TX_MODE 0
-#define CONFIG_MRC_TX 0
-#define CONFIG_LPF_DIRECT 0
-#define CONFIG_LOOPFILTER_LEVEL 0
-#define CONFIG_NO_FRAME_CONTEXT_SIGNALING 0
-#define CONFIG_TXMG 0
-#define CONFIG_HASH_ME 0
-#define CONFIG_COLORSPACE_HEADERS 0
-#define CONFIG_MFMV 0
-#define CONFIG_JNT_COMP 0
-#define CONFIG_ANALYZER 0
-#define DECODE_WIDTH_LIMIT 16384
-#define DECODE_HEIGHT_LIMIT 16384
-#endif /* AOM_CONFIG_H */
diff --git a/third_party/libaom/source/config/win/ia32/aom_dsp_rtcd.h b/third_party/libaom/source/config/win/ia32/aom_dsp_rtcd.h
deleted file mode 100644
index 453381bc..0000000
--- a/third_party/libaom/source/config/win/ia32/aom_dsp_rtcd.h
+++ /dev/null
@@ -1,2497 +0,0 @@
-#ifndef AOM_DSP_RTCD_H_
-#define AOM_DSP_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * DSP
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/aom_dsp_common.h"
-#include "av1/common/enums.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_blend_a64_d32_mask_c(int32_t* dst,
-                              uint32_t dst_stride,
-                              const int32_t* src0,
-                              uint32_t src0_stride,
-                              const int32_t* src1,
-                              uint32_t src1_stride,
-                              const uint8_t* mask,
-                              uint32_t mask_stride,
-                              int h,
-                              int w,
-                              int suby,
-                              int subx);
-#define aom_blend_a64_d32_mask aom_blend_a64_d32_mask_c
-
-void aom_blend_a64_hmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-void aom_blend_a64_hmask_sse4_1(uint8_t* dst,
-                                uint32_t dst_stride,
-                                const uint8_t* src0,
-                                uint32_t src0_stride,
-                                const uint8_t* src1,
-                                uint32_t src1_stride,
-                                const uint8_t* mask,
-                                int h,
-                                int w);
-RTCD_EXTERN void (*aom_blend_a64_hmask)(uint8_t* dst,
-                                        uint32_t dst_stride,
-                                        const uint8_t* src0,
-                                        uint32_t src0_stride,
-                                        const uint8_t* src1,
-                                        uint32_t src1_stride,
-                                        const uint8_t* mask,
-                                        int h,
-                                        int w);
-
-void aom_blend_a64_mask_c(uint8_t* dst,
-                          uint32_t dst_stride,
-                          const uint8_t* src0,
-                          uint32_t src0_stride,
-                          const uint8_t* src1,
-                          uint32_t src1_stride,
-                          const uint8_t* mask,
-                          uint32_t mask_stride,
-                          int h,
-                          int w,
-                          int suby,
-                          int subx);
-void aom_blend_a64_mask_sse4_1(uint8_t* dst,
-                               uint32_t dst_stride,
-                               const uint8_t* src0,
-                               uint32_t src0_stride,
-                               const uint8_t* src1,
-                               uint32_t src1_stride,
-                               const uint8_t* mask,
-                               uint32_t mask_stride,
-                               int h,
-                               int w,
-                               int suby,
-                               int subx);
-RTCD_EXTERN void (*aom_blend_a64_mask)(uint8_t* dst,
-                                       uint32_t dst_stride,
-                                       const uint8_t* src0,
-                                       uint32_t src0_stride,
-                                       const uint8_t* src1,
-                                       uint32_t src1_stride,
-                                       const uint8_t* mask,
-                                       uint32_t mask_stride,
-                                       int h,
-                                       int w,
-                                       int suby,
-                                       int subx);
-
-void aom_blend_a64_vmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-void aom_blend_a64_vmask_sse4_1(uint8_t* dst,
-                                uint32_t dst_stride,
-                                const uint8_t* src0,
-                                uint32_t src0_stride,
-                                const uint8_t* src1,
-                                uint32_t src1_stride,
-                                const uint8_t* mask,
-                                int h,
-                                int w);
-RTCD_EXTERN void (*aom_blend_a64_vmask)(uint8_t* dst,
-                                        uint32_t dst_stride,
-                                        const uint8_t* src0,
-                                        uint32_t src0_stride,
-                                        const uint8_t* src1,
-                                        uint32_t src1_stride,
-                                        const uint8_t* mask,
-                                        int h,
-                                        int w);
-
-void aom_convolve8_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-void aom_convolve8_sse2(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-void aom_convolve8_ssse3(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve8_avx2(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-RTCD_EXTERN void (*aom_convolve8)(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-
-void aom_convolve8_avg_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve8_avg_sse2(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-void aom_convolve8_avg_ssse3(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-RTCD_EXTERN void (*aom_convolve8_avg)(const uint8_t* src,
-                                      ptrdiff_t src_stride,
-                                      uint8_t* dst,
-                                      ptrdiff_t dst_stride,
-                                      const int16_t* filter_x,
-                                      int x_step_q4,
-                                      const int16_t* filter_y,
-                                      int y_step_q4,
-                                      int w,
-                                      int h);
-
-void aom_convolve8_avg_horiz_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-void aom_convolve8_avg_horiz_sse2(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-void aom_convolve8_avg_horiz_ssse3(const uint8_t* src,
-                                   ptrdiff_t src_stride,
-                                   uint8_t* dst,
-                                   ptrdiff_t dst_stride,
-                                   const int16_t* filter_x,
-                                   int x_step_q4,
-                                   const int16_t* filter_y,
-                                   int y_step_q4,
-                                   int w,
-                                   int h);
-RTCD_EXTERN void (*aom_convolve8_avg_horiz)(const uint8_t* src,
-                                            ptrdiff_t src_stride,
-                                            uint8_t* dst,
-                                            ptrdiff_t dst_stride,
-                                            const int16_t* filter_x,
-                                            int x_step_q4,
-                                            const int16_t* filter_y,
-                                            int y_step_q4,
-                                            int w,
-                                            int h);
-
-void aom_convolve8_avg_horiz_scale_c(const uint8_t* src,
-                                     ptrdiff_t src_stride,
-                                     uint8_t* dst,
-                                     ptrdiff_t dst_stride,
-                                     const int16_t* filter_x,
-                                     int subpel_x,
-                                     int x_step_q4,
-                                     const int16_t* filter_y,
-                                     int subpel_y,
-                                     int y_step_q4,
-                                     int w,
-                                     int h);
-#define aom_convolve8_avg_horiz_scale aom_convolve8_avg_horiz_scale_c
-
-void aom_convolve8_avg_scale_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int subpel_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int subpel_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-#define aom_convolve8_avg_scale aom_convolve8_avg_scale_c
-
-void aom_convolve8_avg_vert_c(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_avg_vert_sse2(const uint8_t* src,
-                                 ptrdiff_t src_stride,
-                                 uint8_t* dst,
-                                 ptrdiff_t dst_stride,
-                                 const int16_t* filter_x,
-                                 int x_step_q4,
-                                 const int16_t* filter_y,
-                                 int y_step_q4,
-                                 int w,
-                                 int h);
-void aom_convolve8_avg_vert_ssse3(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-RTCD_EXTERN void (*aom_convolve8_avg_vert)(const uint8_t* src,
-                                           ptrdiff_t src_stride,
-                                           uint8_t* dst,
-                                           ptrdiff_t dst_stride,
-                                           const int16_t* filter_x,
-                                           int x_step_q4,
-                                           const int16_t* filter_y,
-                                           int y_step_q4,
-                                           int w,
-                                           int h);
-
-void aom_convolve8_avg_vert_scale_c(const uint8_t* src,
-                                    ptrdiff_t src_stride,
-                                    uint8_t* dst,
-                                    ptrdiff_t dst_stride,
-                                    const int16_t* filter_x,
-                                    int subpel_x,
-                                    int x_step_q4,
-                                    const int16_t* filter_y,
-                                    int subpel_y,
-                                    int y_step_q4,
-                                    int w,
-                                    int h);
-#define aom_convolve8_avg_vert_scale aom_convolve8_avg_vert_scale_c
-
-void aom_convolve8_horiz_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-void aom_convolve8_horiz_sse2(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_horiz_ssse3(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-void aom_convolve8_horiz_avx2(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-RTCD_EXTERN void (*aom_convolve8_horiz)(const uint8_t* src,
-                                        ptrdiff_t src_stride,
-                                        uint8_t* dst,
-                                        ptrdiff_t dst_stride,
-                                        const int16_t* filter_x,
-                                        int x_step_q4,
-                                        const int16_t* filter_y,
-                                        int y_step_q4,
-                                        int w,
-                                        int h);
-
-void aom_convolve8_horiz_scale_c(const uint8_t* src,
-                                 ptrdiff_t src_stride,
-                                 uint8_t* dst,
-                                 ptrdiff_t dst_stride,
-                                 const int16_t* filter_x,
-                                 int subpel_x,
-                                 int x_step_q4,
-                                 const int16_t* filter_y,
-                                 int subpel_y,
-                                 int y_step_q4,
-                                 int w,
-                                 int h);
-#define aom_convolve8_horiz_scale aom_convolve8_horiz_scale_c
-
-void aom_convolve8_scale_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int subpel_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int subpel_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_convolve8_scale aom_convolve8_scale_c
-
-void aom_convolve8_vert_c(const uint8_t* src,
-                          ptrdiff_t src_stride,
-                          uint8_t* dst,
-                          ptrdiff_t dst_stride,
-                          const int16_t* filter_x,
-                          int x_step_q4,
-                          const int16_t* filter_y,
-                          int y_step_q4,
-                          int w,
-                          int h);
-void aom_convolve8_vert_sse2(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-void aom_convolve8_vert_ssse3(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_vert_avx2(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-RTCD_EXTERN void (*aom_convolve8_vert)(const uint8_t* src,
-                                       ptrdiff_t src_stride,
-                                       uint8_t* dst,
-                                       ptrdiff_t dst_stride,
-                                       const int16_t* filter_x,
-                                       int x_step_q4,
-                                       const int16_t* filter_y,
-                                       int y_step_q4,
-                                       int w,
-                                       int h);
-
-void aom_convolve8_vert_scale_c(const uint8_t* src,
-                                ptrdiff_t src_stride,
-                                uint8_t* dst,
-                                ptrdiff_t dst_stride,
-                                const int16_t* filter_x,
-                                int subpel_x,
-                                int x_step_q4,
-                                const int16_t* filter_y,
-                                int subpel_y,
-                                int y_step_q4,
-                                int w,
-                                int h);
-#define aom_convolve8_vert_scale aom_convolve8_vert_scale_c
-
-void aom_convolve_avg_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-void aom_convolve_avg_sse2(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-RTCD_EXTERN void (*aom_convolve_avg)(const uint8_t* src,
-                                     ptrdiff_t src_stride,
-                                     uint8_t* dst,
-                                     ptrdiff_t dst_stride,
-                                     const int16_t* filter_x,
-                                     int x_step_q4,
-                                     const int16_t* filter_y,
-                                     int y_step_q4,
-                                     int w,
-                                     int h);
-
-void aom_convolve_copy_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve_copy_sse2(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-RTCD_EXTERN void (*aom_convolve_copy)(const uint8_t* src,
-                                      ptrdiff_t src_stride,
-                                      uint8_t* dst,
-                                      ptrdiff_t dst_stride,
-                                      const int16_t* filter_x,
-                                      int x_step_q4,
-                                      const int16_t* filter_y,
-                                      int y_step_q4,
-                                      int w,
-                                      int h);
-
-void aom_d117_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x16 aom_d117_predictor_16x16_c
-
-void aom_d117_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x32 aom_d117_predictor_16x32_c
-
-void aom_d117_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_16x8 aom_d117_predictor_16x8_c
-
-void aom_d117_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_2x2 aom_d117_predictor_2x2_c
-
-void aom_d117_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x16 aom_d117_predictor_32x16_c
-
-void aom_d117_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x32 aom_d117_predictor_32x32_c
-
-void aom_d117_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x4 aom_d117_predictor_4x4_c
-
-void aom_d117_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x8 aom_d117_predictor_4x8_c
-
-void aom_d117_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_8x16 aom_d117_predictor_8x16_c
-
-void aom_d117_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x4 aom_d117_predictor_8x4_c
-
-void aom_d117_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x8 aom_d117_predictor_8x8_c
-
-void aom_d135_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x16 aom_d135_predictor_16x16_c
-
-void aom_d135_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x32 aom_d135_predictor_16x32_c
-
-void aom_d135_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_16x8 aom_d135_predictor_16x8_c
-
-void aom_d135_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_2x2 aom_d135_predictor_2x2_c
-
-void aom_d135_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x16 aom_d135_predictor_32x16_c
-
-void aom_d135_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x32 aom_d135_predictor_32x32_c
-
-void aom_d135_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x4 aom_d135_predictor_4x4_c
-
-void aom_d135_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x8 aom_d135_predictor_4x8_c
-
-void aom_d135_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_8x16 aom_d135_predictor_8x16_c
-
-void aom_d135_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x4 aom_d135_predictor_8x4_c
-
-void aom_d135_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x8 aom_d135_predictor_8x8_c
-
-void aom_d153_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_d153_predictor_16x16_ssse3(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_16x16)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_d153_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_16x32 aom_d153_predictor_16x32_c
-
-void aom_d153_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_16x8 aom_d153_predictor_16x8_c
-
-void aom_d153_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_2x2 aom_d153_predictor_2x2_c
-
-void aom_d153_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_32x16 aom_d153_predictor_32x16_c
-
-void aom_d153_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_d153_predictor_32x32_ssse3(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_32x32)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_d153_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d153_predictor_4x4_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_4x4)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d153_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_4x8 aom_d153_predictor_4x8_c
-
-void aom_d153_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_8x16 aom_d153_predictor_8x16_c
-
-void aom_d153_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_8x4 aom_d153_predictor_8x4_c
-
-void aom_d153_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d153_predictor_8x8_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_8x8)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d207e_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x16 aom_d207e_predictor_16x16_c
-
-void aom_d207e_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x32 aom_d207e_predictor_16x32_c
-
-void aom_d207e_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_16x8 aom_d207e_predictor_16x8_c
-
-void aom_d207e_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_2x2 aom_d207e_predictor_2x2_c
-
-void aom_d207e_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x16 aom_d207e_predictor_32x16_c
-
-void aom_d207e_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x32 aom_d207e_predictor_32x32_c
-
-void aom_d207e_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x4 aom_d207e_predictor_4x4_c
-
-void aom_d207e_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x8 aom_d207e_predictor_4x8_c
-
-void aom_d207e_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_8x16 aom_d207e_predictor_8x16_c
-
-void aom_d207e_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x4 aom_d207e_predictor_8x4_c
-
-void aom_d207e_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x8 aom_d207e_predictor_8x8_c
-
-void aom_d45e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x16 aom_d45e_predictor_16x16_c
-
-void aom_d45e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x32 aom_d45e_predictor_16x32_c
-
-void aom_d45e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_16x8 aom_d45e_predictor_16x8_c
-
-void aom_d45e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_2x2 aom_d45e_predictor_2x2_c
-
-void aom_d45e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x16 aom_d45e_predictor_32x16_c
-
-void aom_d45e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x32 aom_d45e_predictor_32x32_c
-
-void aom_d45e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x4 aom_d45e_predictor_4x4_c
-
-void aom_d45e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x8 aom_d45e_predictor_4x8_c
-
-void aom_d45e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_8x16 aom_d45e_predictor_8x16_c
-
-void aom_d45e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x4 aom_d45e_predictor_8x4_c
-
-void aom_d45e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x8 aom_d45e_predictor_8x8_c
-
-void aom_d63e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x16 aom_d63e_predictor_16x16_c
-
-void aom_d63e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x32 aom_d63e_predictor_16x32_c
-
-void aom_d63e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_16x8 aom_d63e_predictor_16x8_c
-
-void aom_d63e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_2x2 aom_d63e_predictor_2x2_c
-
-void aom_d63e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x16 aom_d63e_predictor_32x16_c
-
-void aom_d63e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x32 aom_d63e_predictor_32x32_c
-
-void aom_d63e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d63e_predictor_4x4_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d63e_predictor_4x4)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d63e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_4x8 aom_d63e_predictor_4x8_c
-
-void aom_d63e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_8x16 aom_d63e_predictor_8x16_c
-
-void aom_d63e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x4 aom_d63e_predictor_8x4_c
-
-void aom_d63e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x8 aom_d63e_predictor_8x8_c
-
-void aom_dc_128_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_128_predictor_16x16_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_128_predictor_16x16)(uint8_t* dst,
-                                               ptrdiff_t y_stride,
-                                               const uint8_t* above,
-                                               const uint8_t* left);
-
-void aom_dc_128_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
-
-void aom_dc_128_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
-
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
-void aom_dc_128_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
-
-void aom_dc_128_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_128_predictor_32x32_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_128_predictor_32x32)(uint8_t* dst,
-                                               ptrdiff_t y_stride,
-                                               const uint8_t* above,
-                                               const uint8_t* left);
-
-void aom_dc_128_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_128_predictor_4x4_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_128_predictor_4x4)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_dc_128_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
-
-void aom_dc_128_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
-
-void aom_dc_128_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
-
-void aom_dc_128_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_128_predictor_8x8_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_128_predictor_8x8)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_dc_left_predictor_16x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-void aom_dc_left_predictor_16x16_sse2(uint8_t* dst,
-                                      ptrdiff_t y_stride,
-                                      const uint8_t* above,
-                                      const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_left_predictor_16x16)(uint8_t* dst,
-                                                ptrdiff_t y_stride,
-                                                const uint8_t* above,
-                                                const uint8_t* left);
-
-void aom_dc_left_predictor_16x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
-
-void aom_dc_left_predictor_16x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
-
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
-void aom_dc_left_predictor_32x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
-
-void aom_dc_left_predictor_32x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-void aom_dc_left_predictor_32x32_sse2(uint8_t* dst,
-                                      ptrdiff_t y_stride,
-                                      const uint8_t* above,
-                                      const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_left_predictor_32x32)(uint8_t* dst,
-                                                ptrdiff_t y_stride,
-                                                const uint8_t* above,
-                                                const uint8_t* left);
-
-void aom_dc_left_predictor_4x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-void aom_dc_left_predictor_4x4_sse2(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_left_predictor_4x4)(uint8_t* dst,
-                                              ptrdiff_t y_stride,
-                                              const uint8_t* above,
-                                              const uint8_t* left);
-
-void aom_dc_left_predictor_4x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
-
-void aom_dc_left_predictor_8x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
-
-void aom_dc_left_predictor_8x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
-
-void aom_dc_left_predictor_8x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-void aom_dc_left_predictor_8x8_sse2(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_left_predictor_8x8)(uint8_t* dst,
-                                              ptrdiff_t y_stride,
-                                              const uint8_t* above,
-                                              const uint8_t* left);
-
-void aom_dc_predictor_16x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_dc_predictor_16x16_sse2(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_predictor_16x16)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_dc_predictor_16x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
-
-void aom_dc_predictor_16x8_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
-
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
-void aom_dc_predictor_32x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
-
-void aom_dc_predictor_32x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_dc_predictor_32x32_sse2(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_predictor_32x32)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_dc_predictor_4x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-void aom_dc_predictor_4x4_sse2(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_predictor_4x4)(uint8_t* dst,
-                                         ptrdiff_t y_stride,
-                                         const uint8_t* above,
-                                         const uint8_t* left);
-
-void aom_dc_predictor_4x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
-
-void aom_dc_predictor_8x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
-
-void aom_dc_predictor_8x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
-
-void aom_dc_predictor_8x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-void aom_dc_predictor_8x8_sse2(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_predictor_8x8)(uint8_t* dst,
-                                         ptrdiff_t y_stride,
-                                         const uint8_t* above,
-                                         const uint8_t* left);
-
-void aom_dc_top_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_top_predictor_16x16_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_top_predictor_16x16)(uint8_t* dst,
-                                               ptrdiff_t y_stride,
-                                               const uint8_t* above,
-                                               const uint8_t* left);
-
-void aom_dc_top_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
-
-void aom_dc_top_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
-
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
-void aom_dc_top_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
-
-void aom_dc_top_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_top_predictor_32x32_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_top_predictor_32x32)(uint8_t* dst,
-                                               ptrdiff_t y_stride,
-                                               const uint8_t* above,
-                                               const uint8_t* left);
-
-void aom_dc_top_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_top_predictor_4x4_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_top_predictor_4x4)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_dc_top_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
-
-void aom_dc_top_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
-
-void aom_dc_top_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
-
-void aom_dc_top_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_top_predictor_8x8_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-RTCD_EXTERN void (*aom_dc_top_predictor_8x8)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_h_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_h_predictor_16x16_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-RTCD_EXTERN void (*aom_h_predictor_16x16)(uint8_t* dst,
-                                          ptrdiff_t y_stride,
-                                          const uint8_t* above,
-                                          const uint8_t* left);
-
-void aom_h_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
-
-void aom_h_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
-
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
-void aom_h_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
-
-void aom_h_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_h_predictor_32x32_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-RTCD_EXTERN void (*aom_h_predictor_32x32)(uint8_t* dst,
-                                          ptrdiff_t y_stride,
-                                          const uint8_t* above,
-                                          const uint8_t* left);
-
-void aom_h_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_h_predictor_4x4_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-RTCD_EXTERN void (*aom_h_predictor_4x4)(uint8_t* dst,
-                                        ptrdiff_t y_stride,
-                                        const uint8_t* above,
-                                        const uint8_t* left);
-
-void aom_h_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
-
-void aom_h_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
-
-void aom_h_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
-
-void aom_h_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_h_predictor_8x8_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-RTCD_EXTERN void (*aom_h_predictor_8x8)(uint8_t* dst,
-                                        ptrdiff_t y_stride,
-                                        const uint8_t* above,
-                                        const uint8_t* left);
-
-void aom_highbd_iwht4x4_16_add_c(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride,
-                                 int bd);
-#define aom_highbd_iwht4x4_16_add aom_highbd_iwht4x4_16_add_c
-
-void aom_highbd_iwht4x4_1_add_c(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride,
-                                int bd);
-#define aom_highbd_iwht4x4_1_add aom_highbd_iwht4x4_1_add_c
-
-void aom_idct16x16_10_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct16x16_10_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-void aom_idct16x16_10_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_10_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct16x16_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-void aom_idct16x16_1_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct16x16_1_add_avx2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_1_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride);
-
-void aom_idct16x16_256_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct16x16_256_add_sse2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-void aom_idct16x16_256_add_avx2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_256_add)(const tran_low_t* input,
-                                          uint8_t* dest,
-                                          int dest_stride);
-
-void aom_idct16x16_38_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct16x16_38_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_38_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct32x32_1024_add_c(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct32x32_1024_add_sse2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_1024_add_ssse3(const tran_low_t* input,
-                                  uint8_t* dest,
-                                  int dest_stride);
-void aom_idct32x32_1024_add_avx2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_1024_add)(const tran_low_t* input,
-                                           uint8_t* dest,
-                                           int dest_stride);
-
-void aom_idct32x32_135_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct32x32_1024_add_sse2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_135_add_ssse3(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_135_add_avx2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_135_add)(const tran_low_t* input,
-                                          uint8_t* dest,
-                                          int dest_stride);
-
-void aom_idct32x32_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-void aom_idct32x32_1_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct32x32_1_add_avx2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_1_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride);
-
-void aom_idct32x32_34_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct32x32_34_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-void aom_idct32x32_34_add_ssse3(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-void aom_idct32x32_34_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_34_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct4x4_16_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-RTCD_EXTERN void (*aom_idct4x4_16_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_idct4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-void aom_idct4x4_1_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-RTCD_EXTERN void (*aom_idct4x4_1_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride);
-
-void aom_idct8x8_12_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct8x8_12_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct8x8_12_add_ssse3(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_12_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_idct8x8_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-void aom_idct8x8_1_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_1_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride);
-
-void aom_idct8x8_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct8x8_64_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct8x8_64_add_ssse3(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_64_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_iwht4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_iwht4x4_16_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-RTCD_EXTERN void (*aom_iwht4x4_16_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_iwht4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-#define aom_iwht4x4_1_add aom_iwht4x4_1_add_c
-
-void aom_lpf_horizontal_4_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-void aom_lpf_horizontal_4_sse2(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit,
-                               const uint8_t* limit,
-                               const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_horizontal_4)(uint8_t* s,
-                                         int pitch,
-                                         const uint8_t* blimit,
-                                         const uint8_t* limit,
-                                         const uint8_t* thresh);
-
-void aom_lpf_horizontal_4_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
-
-void aom_lpf_horizontal_8_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-void aom_lpf_horizontal_8_sse2(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit,
-                               const uint8_t* limit,
-                               const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_horizontal_8)(uint8_t* s,
-                                         int pitch,
-                                         const uint8_t* blimit,
-                                         const uint8_t* limit,
-                                         const uint8_t* thresh);
-
-void aom_lpf_horizontal_8_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
-
-void aom_lpf_horizontal_edge_16_c(uint8_t* s,
-                                  int pitch,
-                                  const uint8_t* blimit,
-                                  const uint8_t* limit,
-                                  const uint8_t* thresh);
-void aom_lpf_horizontal_edge_16_sse2(uint8_t* s,
-                                     int pitch,
-                                     const uint8_t* blimit,
-                                     const uint8_t* limit,
-                                     const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_horizontal_edge_16)(uint8_t* s,
-                                               int pitch,
-                                               const uint8_t* blimit,
-                                               const uint8_t* limit,
-                                               const uint8_t* thresh);
-
-void aom_lpf_horizontal_edge_8_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit,
-                                 const uint8_t* limit,
-                                 const uint8_t* thresh);
-void aom_lpf_horizontal_edge_8_sse2(uint8_t* s,
-                                    int pitch,
-                                    const uint8_t* blimit,
-                                    const uint8_t* limit,
-                                    const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_horizontal_edge_8)(uint8_t* s,
-                                              int pitch,
-                                              const uint8_t* blimit,
-                                              const uint8_t* limit,
-                                              const uint8_t* thresh);
-
-void aom_lpf_vertical_16_c(uint8_t* s,
-                           int pitch,
-                           const uint8_t* blimit,
-                           const uint8_t* limit,
-                           const uint8_t* thresh);
-void aom_lpf_vertical_16_sse2(uint8_t* s,
-                              int pitch,
-                              const uint8_t* blimit,
-                              const uint8_t* limit,
-                              const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_vertical_16)(uint8_t* s,
-                                        int pitch,
-                                        const uint8_t* blimit,
-                                        const uint8_t* limit,
-                                        const uint8_t* thresh);
-
-void aom_lpf_vertical_16_dual_c(uint8_t* s,
-                                int pitch,
-                                const uint8_t* blimit,
-                                const uint8_t* limit,
-                                const uint8_t* thresh);
-#define aom_lpf_vertical_16_dual aom_lpf_vertical_16_dual_c
-
-void aom_lpf_vertical_4_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-void aom_lpf_vertical_4_sse2(uint8_t* s,
-                             int pitch,
-                             const uint8_t* blimit,
-                             const uint8_t* limit,
-                             const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_vertical_4)(uint8_t* s,
-                                       int pitch,
-                                       const uint8_t* blimit,
-                                       const uint8_t* limit,
-                                       const uint8_t* thresh);
-
-void aom_lpf_vertical_4_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
-
-void aom_lpf_vertical_8_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-void aom_lpf_vertical_8_sse2(uint8_t* s,
-                             int pitch,
-                             const uint8_t* blimit,
-                             const uint8_t* limit,
-                             const uint8_t* thresh);
-RTCD_EXTERN void (*aom_lpf_vertical_8)(uint8_t* s,
-                                       int pitch,
-                                       const uint8_t* blimit,
-                                       const uint8_t* limit,
-                                       const uint8_t* thresh);
-
-void aom_lpf_vertical_8_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
-
-void aom_paeth_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
-
-void aom_paeth_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
-
-void aom_paeth_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
-
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
-void aom_paeth_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
-
-void aom_paeth_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
-
-void aom_paeth_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
-
-void aom_paeth_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
-
-void aom_paeth_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
-
-void aom_paeth_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
-
-void aom_paeth_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
-
-void aom_scaled_2d_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-void aom_scaled_2d_ssse3(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-RTCD_EXTERN void (*aom_scaled_2d)(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-
-void aom_scaled_avg_2d_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-#define aom_scaled_avg_2d aom_scaled_avg_2d_c
-
-void aom_scaled_avg_horiz_c(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-#define aom_scaled_avg_horiz aom_scaled_avg_horiz_c
-
-void aom_scaled_avg_vert_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_scaled_avg_vert aom_scaled_avg_vert_c
-
-void aom_scaled_horiz_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-#define aom_scaled_horiz aom_scaled_horiz_c
-
-void aom_scaled_vert_c(const uint8_t* src,
-                       ptrdiff_t src_stride,
-                       uint8_t* dst,
-                       ptrdiff_t dst_stride,
-                       const int16_t* filter_x,
-                       int x_step_q4,
-                       const int16_t* filter_y,
-                       int y_step_q4,
-                       int w,
-                       int h);
-#define aom_scaled_vert aom_scaled_vert_c
-
-void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
-
-void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
-
-void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
-
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
-void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
-
-void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
-
-void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
-
-void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
-
-void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
-
-void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
-
-void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
-
-void aom_smooth_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
-
-void aom_smooth_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
-
-void aom_smooth_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
-
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
-void aom_smooth_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
-
-void aom_smooth_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
-
-void aom_smooth_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
-
-void aom_smooth_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
-
-void aom_smooth_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
-
-void aom_smooth_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
-
-void aom_smooth_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
-
-void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
-
-void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
-
-void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
-
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
-void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
-
-void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
-
-void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
-
-void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
-
-void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
-
-void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
-
-void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
-
-void aom_v_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_v_predictor_16x16_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-RTCD_EXTERN void (*aom_v_predictor_16x16)(uint8_t* dst,
-                                          ptrdiff_t y_stride,
-                                          const uint8_t* above,
-                                          const uint8_t* left);
-
-void aom_v_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
-
-void aom_v_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
-
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
-void aom_v_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
-
-void aom_v_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_v_predictor_32x32_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-RTCD_EXTERN void (*aom_v_predictor_32x32)(uint8_t* dst,
-                                          ptrdiff_t y_stride,
-                                          const uint8_t* above,
-                                          const uint8_t* left);
-
-void aom_v_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_v_predictor_4x4_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-RTCD_EXTERN void (*aom_v_predictor_4x4)(uint8_t* dst,
-                                        ptrdiff_t y_stride,
-                                        const uint8_t* above,
-                                        const uint8_t* left);
-
-void aom_v_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
-
-void aom_v_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
-
-void aom_v_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
-
-void aom_v_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_v_predictor_8x8_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-RTCD_EXTERN void (*aom_v_predictor_8x8)(uint8_t* dst,
-                                        ptrdiff_t y_stride,
-                                        const uint8_t* above,
-                                        const uint8_t* left);
-
-void aom_dsp_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-
-  aom_blend_a64_hmask = aom_blend_a64_hmask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_hmask = aom_blend_a64_hmask_sse4_1;
-  aom_blend_a64_mask = aom_blend_a64_mask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_mask = aom_blend_a64_mask_sse4_1;
-  aom_blend_a64_vmask = aom_blend_a64_vmask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_vmask = aom_blend_a64_vmask_sse4_1;
-  aom_convolve8 = aom_convolve8_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8 = aom_convolve8_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8 = aom_convolve8_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8 = aom_convolve8_avx2;
-  aom_convolve8_avg = aom_convolve8_avg_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_avg = aom_convolve8_avg_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg = aom_convolve8_avg_ssse3;
-  aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_ssse3;
-  aom_convolve8_avg_vert = aom_convolve8_avg_vert_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_avg_vert = aom_convolve8_avg_vert_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg_vert = aom_convolve8_avg_vert_ssse3;
-  aom_convolve8_horiz = aom_convolve8_horiz_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_horiz = aom_convolve8_horiz_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_horiz = aom_convolve8_horiz_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8_horiz = aom_convolve8_horiz_avx2;
-  aom_convolve8_vert = aom_convolve8_vert_c;
-  if (flags & HAS_SSE2)
-    aom_convolve8_vert = aom_convolve8_vert_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_vert = aom_convolve8_vert_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8_vert = aom_convolve8_vert_avx2;
-  aom_convolve_avg = aom_convolve_avg_c;
-  if (flags & HAS_SSE2)
-    aom_convolve_avg = aom_convolve_avg_sse2;
-  aom_convolve_copy = aom_convolve_copy_c;
-  if (flags & HAS_SSE2)
-    aom_convolve_copy = aom_convolve_copy_sse2;
-  aom_d153_predictor_16x16 = aom_d153_predictor_16x16_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_16x16 = aom_d153_predictor_16x16_ssse3;
-  aom_d153_predictor_32x32 = aom_d153_predictor_32x32_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_32x32 = aom_d153_predictor_32x32_ssse3;
-  aom_d153_predictor_4x4 = aom_d153_predictor_4x4_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_4x4 = aom_d153_predictor_4x4_ssse3;
-  aom_d153_predictor_8x8 = aom_d153_predictor_8x8_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_8x8 = aom_d153_predictor_8x8_ssse3;
-  aom_d63e_predictor_4x4 = aom_d63e_predictor_4x4_c;
-  if (flags & HAS_SSSE3)
-    aom_d63e_predictor_4x4 = aom_d63e_predictor_4x4_ssse3;
-  aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_sse2;
-  aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_sse2;
-  aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_sse2;
-  aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_sse2;
-  aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_sse2;
-  aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_sse2;
-  aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_sse2;
-  aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_sse2;
-  aom_dc_predictor_16x16 = aom_dc_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_dc_predictor_16x16 = aom_dc_predictor_16x16_sse2;
-  aom_dc_predictor_32x32 = aom_dc_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_dc_predictor_32x32 = aom_dc_predictor_32x32_sse2;
-  aom_dc_predictor_4x4 = aom_dc_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_dc_predictor_4x4 = aom_dc_predictor_4x4_sse2;
-  aom_dc_predictor_8x8 = aom_dc_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_dc_predictor_8x8 = aom_dc_predictor_8x8_sse2;
-  aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_sse2;
-  aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_sse2;
-  aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_sse2;
-  aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_sse2;
-  aom_h_predictor_16x16 = aom_h_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_h_predictor_16x16 = aom_h_predictor_16x16_sse2;
-  aom_h_predictor_32x32 = aom_h_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_h_predictor_32x32 = aom_h_predictor_32x32_sse2;
-  aom_h_predictor_4x4 = aom_h_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_h_predictor_4x4 = aom_h_predictor_4x4_sse2;
-  aom_h_predictor_8x8 = aom_h_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_h_predictor_8x8 = aom_h_predictor_8x8_sse2;
-  aom_idct16x16_10_add = aom_idct16x16_10_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct16x16_10_add = aom_idct16x16_10_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_10_add = aom_idct16x16_10_add_avx2;
-  aom_idct16x16_1_add = aom_idct16x16_1_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct16x16_1_add = aom_idct16x16_1_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_1_add = aom_idct16x16_1_add_avx2;
-  aom_idct16x16_256_add = aom_idct16x16_256_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct16x16_256_add = aom_idct16x16_256_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_256_add = aom_idct16x16_256_add_avx2;
-  aom_idct16x16_38_add = aom_idct16x16_38_add_c;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_38_add = aom_idct16x16_38_add_avx2;
-  aom_idct32x32_1024_add = aom_idct32x32_1024_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_avx2;
-  aom_idct32x32_135_add = aom_idct32x32_135_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct32x32_135_add = aom_idct32x32_1024_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_135_add = aom_idct32x32_135_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_135_add = aom_idct32x32_135_add_avx2;
-  aom_idct32x32_1_add = aom_idct32x32_1_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct32x32_1_add = aom_idct32x32_1_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_1_add = aom_idct32x32_1_add_avx2;
-  aom_idct32x32_34_add = aom_idct32x32_34_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_avx2;
-  aom_idct4x4_16_add = aom_idct4x4_16_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct4x4_16_add = aom_idct4x4_16_add_sse2;
-  aom_idct4x4_1_add = aom_idct4x4_1_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct4x4_1_add = aom_idct4x4_1_add_sse2;
-  aom_idct8x8_12_add = aom_idct8x8_12_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct8x8_12_add = aom_idct8x8_12_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct8x8_12_add = aom_idct8x8_12_add_ssse3;
-  aom_idct8x8_1_add = aom_idct8x8_1_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct8x8_1_add = aom_idct8x8_1_add_sse2;
-  aom_idct8x8_64_add = aom_idct8x8_64_add_c;
-  if (flags & HAS_SSE2)
-    aom_idct8x8_64_add = aom_idct8x8_64_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct8x8_64_add = aom_idct8x8_64_add_ssse3;
-  aom_iwht4x4_16_add = aom_iwht4x4_16_add_c;
-  if (flags & HAS_SSE2)
-    aom_iwht4x4_16_add = aom_iwht4x4_16_add_sse2;
-  aom_lpf_horizontal_4 = aom_lpf_horizontal_4_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_horizontal_4 = aom_lpf_horizontal_4_sse2;
-  aom_lpf_horizontal_8 = aom_lpf_horizontal_8_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_horizontal_8 = aom_lpf_horizontal_8_sse2;
-  aom_lpf_horizontal_edge_16 = aom_lpf_horizontal_edge_16_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_horizontal_edge_16 = aom_lpf_horizontal_edge_16_sse2;
-  aom_lpf_horizontal_edge_8 = aom_lpf_horizontal_edge_8_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_horizontal_edge_8 = aom_lpf_horizontal_edge_8_sse2;
-  aom_lpf_vertical_16 = aom_lpf_vertical_16_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_vertical_16 = aom_lpf_vertical_16_sse2;
-  aom_lpf_vertical_4 = aom_lpf_vertical_4_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_vertical_4 = aom_lpf_vertical_4_sse2;
-  aom_lpf_vertical_8 = aom_lpf_vertical_8_c;
-  if (flags & HAS_SSE2)
-    aom_lpf_vertical_8 = aom_lpf_vertical_8_sse2;
-  aom_scaled_2d = aom_scaled_2d_c;
-  if (flags & HAS_SSSE3)
-    aom_scaled_2d = aom_scaled_2d_ssse3;
-  aom_v_predictor_16x16 = aom_v_predictor_16x16_c;
-  if (flags & HAS_SSE2)
-    aom_v_predictor_16x16 = aom_v_predictor_16x16_sse2;
-  aom_v_predictor_32x32 = aom_v_predictor_32x32_c;
-  if (flags & HAS_SSE2)
-    aom_v_predictor_32x32 = aom_v_predictor_32x32_sse2;
-  aom_v_predictor_4x4 = aom_v_predictor_4x4_c;
-  if (flags & HAS_SSE2)
-    aom_v_predictor_4x4 = aom_v_predictor_4x4_sse2;
-  aom_v_predictor_8x8 = aom_v_predictor_8x8_c;
-  if (flags & HAS_SSE2)
-    aom_v_predictor_8x8 = aom_v_predictor_8x8_sse2;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/win/ia32/aom_scale_rtcd.h b/third_party/libaom/source/config/win/ia32/aom_scale_rtcd.h
deleted file mode 100644
index fbf3bde..0000000
--- a/third_party/libaom/source/config/win/ia32/aom_scale_rtcd.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef AOM_SCALE_RTCD_H_
-#define AOM_SCALE_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-struct yv12_buffer_config;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
-#define aom_extend_frame_borders aom_extend_frame_borders_c
-
-void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
-#define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
-
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
-#define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
-
-void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
-                                     unsigned int source_width,
-                                     unsigned char* dest,
-                                     unsigned int dest_width);
-#define aom_horizontal_line_2_1_scale aom_horizontal_line_2_1_scale_c
-
-void aom_horizontal_line_5_3_scale_c(const unsigned char* source,
-                                     unsigned int source_width,
-                                     unsigned char* dest,
-                                     unsigned int dest_width);
-#define aom_horizontal_line_5_3_scale aom_horizontal_line_5_3_scale_c
-
-void aom_horizontal_line_5_4_scale_c(const unsigned char* source,
-                                     unsigned int source_width,
-                                     unsigned char* dest,
-                                     unsigned int dest_width);
-#define aom_horizontal_line_5_4_scale aom_horizontal_line_5_4_scale_c
-
-void aom_vertical_band_2_1_scale_c(unsigned char* source,
-                                   int src_pitch,
-                                   unsigned char* dest,
-                                   int dest_pitch,
-                                   unsigned int dest_width);
-#define aom_vertical_band_2_1_scale aom_vertical_band_2_1_scale_c
-
-void aom_vertical_band_2_1_scale_i_c(unsigned char* source,
-                                     int src_pitch,
-                                     unsigned char* dest,
-                                     int dest_pitch,
-                                     unsigned int dest_width);
-#define aom_vertical_band_2_1_scale_i aom_vertical_band_2_1_scale_i_c
-
-void aom_vertical_band_5_3_scale_c(unsigned char* source,
-                                   int src_pitch,
-                                   unsigned char* dest,
-                                   int dest_pitch,
-                                   unsigned int dest_width);
-#define aom_vertical_band_5_3_scale aom_vertical_band_5_3_scale_c
-
-void aom_vertical_band_5_4_scale_c(unsigned char* source,
-                                   int src_pitch,
-                                   unsigned char* dest,
-                                   int dest_pitch,
-                                   unsigned int dest_width);
-#define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
-
-void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
-#define aom_yv12_copy_frame aom_yv12_copy_frame_c
-
-void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
-                       struct yv12_buffer_config* dst_bc);
-#define aom_yv12_copy_u aom_yv12_copy_u_c
-
-void aom_yv12_copy_v_c(const struct yv12_buffer_config* src_bc,
-                       struct yv12_buffer_config* dst_bc);
-#define aom_yv12_copy_v aom_yv12_copy_v_c
-
-void aom_yv12_copy_y_c(const struct yv12_buffer_config* src_ybc,
-                       struct yv12_buffer_config* dst_ybc);
-#define aom_yv12_copy_y aom_yv12_copy_y_c
-
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
-#define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
-
-void aom_scale_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/win/ia32/av1_rtcd.h b/third_party/libaom/source/config/win/ia32/av1_rtcd.h
deleted file mode 100644
index 63d5838..0000000
--- a/third_party/libaom/source/config/win/ia32/av1_rtcd.h
+++ /dev/null
@@ -1,1074 +0,0 @@
-#ifndef AV1_RTCD_H_
-#define AV1_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * AV1
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/txfm_common.h"
-#include "av1/common/av1_txfm.h"
-#include "av1/common/common.h"
-#include "av1/common/convolve.h"
-#include "av1/common/enums.h"
-#include "av1/common/filter.h"
-#include "av1/common/odintrin.h"
-#include "av1/common/quant_common.h"
-
-struct macroblockd;
-
-/* Encoder forward decls */
-struct macroblock;
-struct txfm_param;
-struct aom_variance_vtable;
-struct search_site_config;
-struct mv;
-union int_mv;
-struct yv12_buffer_config;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_clpf_block_c(uint8_t* dst,
-                      const uint16_t* src,
-                      int dstride,
-                      int sstride,
-                      int sizex,
-                      int sizey,
-                      unsigned int strength,
-                      unsigned int bd);
-void aom_clpf_block_sse2(uint8_t* dst,
-                         const uint16_t* src,
-                         int dstride,
-                         int sstride,
-                         int sizex,
-                         int sizey,
-                         unsigned int strength,
-                         unsigned int bd);
-void aom_clpf_block_ssse3(uint8_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_block_sse4_1(uint8_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_block)(uint8_t* dst,
-                                   const uint16_t* src,
-                                   int dstride,
-                                   int sstride,
-                                   int sizex,
-                                   int sizey,
-                                   unsigned int strength,
-                                   unsigned int bd);
-
-void aom_clpf_block_hbd_c(uint16_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_block_hbd_sse2(uint16_t* dst,
-                             const uint16_t* src,
-                             int dstride,
-                             int sstride,
-                             int sizex,
-                             int sizey,
-                             unsigned int strength,
-                             unsigned int bd);
-void aom_clpf_block_hbd_ssse3(uint16_t* dst,
-                              const uint16_t* src,
-                              int dstride,
-                              int sstride,
-                              int sizex,
-                              int sizey,
-                              unsigned int strength,
-                              unsigned int bd);
-void aom_clpf_block_hbd_sse4_1(uint16_t* dst,
-                               const uint16_t* src,
-                               int dstride,
-                               int sstride,
-                               int sizex,
-                               int sizey,
-                               unsigned int strength,
-                               unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_block_hbd)(uint16_t* dst,
-                                       const uint16_t* src,
-                                       int dstride,
-                                       int sstride,
-                                       int sizex,
-                                       int sizey,
-                                       unsigned int strength,
-                                       unsigned int bd);
-
-void aom_clpf_hblock_c(uint8_t* dst,
-                       const uint16_t* src,
-                       int dstride,
-                       int sstride,
-                       int sizex,
-                       int sizey,
-                       unsigned int strength,
-                       unsigned int bd);
-void aom_clpf_hblock_sse2(uint8_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_hblock_ssse3(uint8_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-void aom_clpf_hblock_sse4_1(uint8_t* dst,
-                            const uint16_t* src,
-                            int dstride,
-                            int sstride,
-                            int sizex,
-                            int sizey,
-                            unsigned int strength,
-                            unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_hblock)(uint8_t* dst,
-                                    const uint16_t* src,
-                                    int dstride,
-                                    int sstride,
-                                    int sizex,
-                                    int sizey,
-                                    unsigned int strength,
-                                    unsigned int bd);
-
-void aom_clpf_hblock_hbd_c(uint16_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-void aom_clpf_hblock_hbd_sse2(uint16_t* dst,
-                              const uint16_t* src,
-                              int dstride,
-                              int sstride,
-                              int sizex,
-                              int sizey,
-                              unsigned int strength,
-                              unsigned int bd);
-void aom_clpf_hblock_hbd_ssse3(uint16_t* dst,
-                               const uint16_t* src,
-                               int dstride,
-                               int sstride,
-                               int sizex,
-                               int sizey,
-                               unsigned int strength,
-                               unsigned int bd);
-void aom_clpf_hblock_hbd_sse4_1(uint16_t* dst,
-                                const uint16_t* src,
-                                int dstride,
-                                int sstride,
-                                int sizex,
-                                int sizey,
-                                unsigned int strength,
-                                unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_hblock_hbd)(uint16_t* dst,
-                                        const uint16_t* src,
-                                        int dstride,
-                                        int sstride,
-                                        int sizex,
-                                        int sizey,
-                                        unsigned int strength,
-                                        unsigned int bd);
-
-void av1_convolve_2d_c(const uint8_t* src,
-                       int src_stride,
-                       CONV_BUF_TYPE* dst,
-                       int dst_stride,
-                       int w,
-                       int h,
-                       InterpFilterParams* filter_params_x,
-                       InterpFilterParams* filter_params_y,
-                       const int subpel_x_q4,
-                       const int subpel_y_q4,
-                       ConvolveParams* conv_params);
-void av1_convolve_2d_sse2(const uint8_t* src,
-                          int src_stride,
-                          CONV_BUF_TYPE* dst,
-                          int dst_stride,
-                          int w,
-                          int h,
-                          InterpFilterParams* filter_params_x,
-                          InterpFilterParams* filter_params_y,
-                          const int subpel_x_q4,
-                          const int subpel_y_q4,
-                          ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_2d)(const uint8_t* src,
-                                    int src_stride,
-                                    CONV_BUF_TYPE* dst,
-                                    int dst_stride,
-                                    int w,
-                                    int h,
-                                    InterpFilterParams* filter_params_x,
-                                    InterpFilterParams* filter_params_y,
-                                    const int subpel_x_q4,
-                                    const int subpel_y_q4,
-                                    ConvolveParams* conv_params);
-
-void av1_convolve_2d_scale_c(const uint8_t* src,
-                             int src_stride,
-                             CONV_BUF_TYPE* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             InterpFilterParams* filter_params_x,
-                             InterpFilterParams* filter_params_y,
-                             const int subpel_x_qn,
-                             const int x_step_qn,
-                             const int subpel_y_q4,
-                             const int y_step_qn,
-                             ConvolveParams* conv_params);
-#define av1_convolve_2d_scale av1_convolve_2d_scale_c
-
-void av1_convolve_horiz_c(const uint8_t* src,
-                          int src_stride,
-                          uint8_t* dst,
-                          int dst_stride,
-                          int w,
-                          int h,
-                          const InterpFilterParams fp,
-                          const int subpel_x_q4,
-                          int x_step_q4,
-                          ConvolveParams* conv_params);
-void av1_convolve_horiz_ssse3(const uint8_t* src,
-                              int src_stride,
-                              uint8_t* dst,
-                              int dst_stride,
-                              int w,
-                              int h,
-                              const InterpFilterParams fp,
-                              const int subpel_x_q4,
-                              int x_step_q4,
-                              ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_horiz)(const uint8_t* src,
-                                       int src_stride,
-                                       uint8_t* dst,
-                                       int dst_stride,
-                                       int w,
-                                       int h,
-                                       const InterpFilterParams fp,
-                                       const int subpel_x_q4,
-                                       int x_step_q4,
-                                       ConvolveParams* conv_params);
-
-void av1_convolve_rounding_c(const int32_t* src,
-                             int src_stride,
-                             uint8_t* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             int bits);
-void av1_convolve_rounding_avx2(const int32_t* src,
-                                int src_stride,
-                                uint8_t* dst,
-                                int dst_stride,
-                                int w,
-                                int h,
-                                int bits);
-RTCD_EXTERN void (*av1_convolve_rounding)(const int32_t* src,
-                                          int src_stride,
-                                          uint8_t* dst,
-                                          int dst_stride,
-                                          int w,
-                                          int h,
-                                          int bits);
-
-void av1_convolve_vert_c(const uint8_t* src,
-                         int src_stride,
-                         uint8_t* dst,
-                         int dst_stride,
-                         int w,
-                         int h,
-                         const InterpFilterParams fp,
-                         const int subpel_x_q4,
-                         int x_step_q4,
-                         ConvolveParams* conv_params);
-void av1_convolve_vert_ssse3(const uint8_t* src,
-                             int src_stride,
-                             uint8_t* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             const InterpFilterParams fp,
-                             const int subpel_x_q4,
-                             int x_step_q4,
-                             ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_vert)(const uint8_t* src,
-                                      int src_stride,
-                                      uint8_t* dst,
-                                      int dst_stride,
-                                      int w,
-                                      int h,
-                                      const InterpFilterParams fp,
-                                      const int subpel_x_q4,
-                                      int x_step_q4,
-                                      ConvolveParams* conv_params);
-
-void av1_iht16x16_256_add_c(const tran_low_t* input,
-                            uint8_t* output,
-                            int pitch,
-                            const struct txfm_param* param);
-void av1_iht16x16_256_add_sse2(const tran_low_t* input,
-                               uint8_t* output,
-                               int pitch,
-                               const struct txfm_param* param);
-void av1_iht16x16_256_add_avx2(const tran_low_t* input,
-                               uint8_t* output,
-                               int pitch,
-                               const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht16x16_256_add)(const tran_low_t* input,
-                                         uint8_t* output,
-                                         int pitch,
-                                         const struct txfm_param* param);
-
-void av1_iht16x32_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-void av1_iht16x32_512_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride,
-                               const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht16x32_512_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride,
-                                         const struct txfm_param* param);
-
-void av1_iht16x4_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht16x4_64_add av1_iht16x4_64_add_c
-
-void av1_iht16x8_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-void av1_iht16x8_128_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride,
-                              const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht16x8_128_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride,
-                                        const struct txfm_param* param);
-
-void av1_iht32x16_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-void av1_iht32x16_512_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride,
-                               const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht32x16_512_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride,
-                                         const struct txfm_param* param);
-
-void av1_iht32x32_1024_add_c(const tran_low_t* input,
-                             uint8_t* output,
-                             int pitch,
-                             const struct txfm_param* param);
-#define av1_iht32x32_1024_add av1_iht32x32_1024_add_c
-
-void av1_iht32x8_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht32x8_256_add av1_iht32x8_256_add_c
-
-void av1_iht4x16_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht4x16_64_add av1_iht4x16_64_add_c
-
-void av1_iht4x4_16_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht4x4_16_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht4x4_16_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride,
-                                      const struct txfm_param* param);
-
-void av1_iht4x8_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht4x8_32_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht4x8_32_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride,
-                                      const struct txfm_param* param);
-
-void av1_iht8x16_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-void av1_iht8x16_128_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride,
-                              const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht8x16_128_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride,
-                                        const struct txfm_param* param);
-
-void av1_iht8x32_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht8x32_256_add av1_iht8x32_256_add_c
-
-void av1_iht8x4_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht8x4_32_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht8x4_32_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride,
-                                      const struct txfm_param* param);
-
-void av1_iht8x8_64_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht8x8_64_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht8x8_64_add)(const tran_low_t* input,
-                                      uint8_t* dest,
-                                      int dest_stride,
-                                      const struct txfm_param* param);
-
-void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-void av1_inv_txfm2d_add_16x16_sse4_1(const int32_t* input,
-                                     uint16_t* output,
-                                     int stride,
-                                     int tx_type,
-                                     int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_16x16)(const int32_t* input,
-                                             uint16_t* output,
-                                             int stride,
-                                             int tx_type,
-                                             int bd);
-
-void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
-
-void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
-
-void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
-
-void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-void av1_inv_txfm2d_add_32x32_avx2(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_32x32)(const int32_t* input,
-                                             uint16_t* output,
-                                             int stride,
-                                             int tx_type,
-                                             int bd);
-
-void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-void av1_inv_txfm2d_add_4x4_sse4_1(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_4x4)(const int32_t* input,
-                                           uint16_t* output,
-                                           int stride,
-                                           int tx_type,
-                                           int bd);
-
-void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
-
-void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
-
-void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
-
-void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
-
-void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-void av1_inv_txfm2d_add_8x8_sse4_1(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_8x8)(const int32_t* input,
-                                           uint16_t* output,
-                                           int stride,
-                                           int tx_type,
-                                           int bd);
-
-void av1_lowbd_convolve_init_c(void);
-void av1_lowbd_convolve_init_ssse3(void);
-RTCD_EXTERN void (*av1_lowbd_convolve_init)(void);
-
-void av1_warp_affine_c(const int32_t* mat,
-                       const uint8_t* ref,
-                       int width,
-                       int height,
-                       int stride,
-                       uint8_t* pred,
-                       int p_col,
-                       int p_row,
-                       int p_width,
-                       int p_height,
-                       int p_stride,
-                       int subsampling_x,
-                       int subsampling_y,
-                       ConvolveParams* conv_params,
-                       int16_t alpha,
-                       int16_t beta,
-                       int16_t gamma,
-                       int16_t delta);
-void av1_warp_affine_sse2(const int32_t* mat,
-                          const uint8_t* ref,
-                          int width,
-                          int height,
-                          int stride,
-                          uint8_t* pred,
-                          int p_col,
-                          int p_row,
-                          int p_width,
-                          int p_height,
-                          int p_stride,
-                          int subsampling_x,
-                          int subsampling_y,
-                          ConvolveParams* conv_params,
-                          int16_t alpha,
-                          int16_t beta,
-                          int16_t gamma,
-                          int16_t delta);
-void av1_warp_affine_ssse3(const int32_t* mat,
-                           const uint8_t* ref,
-                           int width,
-                           int height,
-                           int stride,
-                           uint8_t* pred,
-                           int p_col,
-                           int p_row,
-                           int p_width,
-                           int p_height,
-                           int p_stride,
-                           int subsampling_x,
-                           int subsampling_y,
-                           ConvolveParams* conv_params,
-                           int16_t alpha,
-                           int16_t beta,
-                           int16_t gamma,
-                           int16_t delta);
-RTCD_EXTERN void (*av1_warp_affine)(const int32_t* mat,
-                                    const uint8_t* ref,
-                                    int width,
-                                    int height,
-                                    int stride,
-                                    uint8_t* pred,
-                                    int p_col,
-                                    int p_row,
-                                    int p_width,
-                                    int p_height,
-                                    int p_stride,
-                                    int subsampling_x,
-                                    int subsampling_y,
-                                    ConvolveParams* conv_params,
-                                    int16_t alpha,
-                                    int16_t beta,
-                                    int16_t gamma,
-                                    int16_t delta);
-
-void cdef_direction_4x4_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-void cdef_direction_4x4_sse2(uint16_t* y,
-                             int ystride,
-                             const uint16_t* in,
-                             int threshold,
-                             int dir,
-                             int damping);
-void cdef_direction_4x4_ssse3(uint16_t* y,
-                              int ystride,
-                              const uint16_t* in,
-                              int threshold,
-                              int dir,
-                              int damping);
-void cdef_direction_4x4_sse4_1(uint16_t* y,
-                               int ystride,
-                               const uint16_t* in,
-                               int threshold,
-                               int dir,
-                               int damping);
-RTCD_EXTERN void (*cdef_direction_4x4)(uint16_t* y,
-                                       int ystride,
-                                       const uint16_t* in,
-                                       int threshold,
-                                       int dir,
-                                       int damping);
-
-void cdef_direction_8x8_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-void cdef_direction_8x8_sse2(uint16_t* y,
-                             int ystride,
-                             const uint16_t* in,
-                             int threshold,
-                             int dir,
-                             int damping);
-void cdef_direction_8x8_ssse3(uint16_t* y,
-                              int ystride,
-                              const uint16_t* in,
-                              int threshold,
-                              int dir,
-                              int damping);
-void cdef_direction_8x8_sse4_1(uint16_t* y,
-                               int ystride,
-                               const uint16_t* in,
-                               int threshold,
-                               int dir,
-                               int damping);
-RTCD_EXTERN void (*cdef_direction_8x8)(uint16_t* y,
-                                       int ystride,
-                                       const uint16_t* in,
-                                       int threshold,
-                                       int dir,
-                                       int damping);
-
-int cdef_find_dir_c(const uint16_t* img,
-                    int stride,
-                    int32_t* var,
-                    int coeff_shift);
-int cdef_find_dir_sse2(const uint16_t* img,
-                       int stride,
-                       int32_t* var,
-                       int coeff_shift);
-int cdef_find_dir_ssse3(const uint16_t* img,
-                        int stride,
-                        int32_t* var,
-                        int coeff_shift);
-int cdef_find_dir_sse4_1(const uint16_t* img,
-                         int stride,
-                         int32_t* var,
-                         int coeff_shift);
-RTCD_EXTERN int (*cdef_find_dir)(const uint16_t* img,
-                                 int stride,
-                                 int32_t* var,
-                                 int coeff_shift);
-
-void copy_4x4_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-void copy_4x4_16bit_to_16bit_sse2(uint16_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_4x4_16bit_to_16bit_ssse3(uint16_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-void copy_4x4_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride);
-RTCD_EXTERN void (*copy_4x4_16bit_to_16bit)(uint16_t* dst,
-                                            int dstride,
-                                            const uint16_t* src,
-                                            int sstride);
-
-void copy_4x4_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-void copy_4x4_16bit_to_8bit_sse2(uint8_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride);
-void copy_4x4_16bit_to_8bit_ssse3(uint8_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_4x4_16bit_to_8bit_sse4_1(uint8_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-RTCD_EXTERN void (*copy_4x4_16bit_to_8bit)(uint8_t* dst,
-                                           int dstride,
-                                           const uint16_t* src,
-                                           int sstride);
-
-void copy_8x8_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-void copy_8x8_16bit_to_16bit_sse2(uint16_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_8x8_16bit_to_16bit_ssse3(uint16_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-void copy_8x8_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride);
-RTCD_EXTERN void (*copy_8x8_16bit_to_16bit)(uint16_t* dst,
-                                            int dstride,
-                                            const uint16_t* src,
-                                            int sstride);
-
-void copy_8x8_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-void copy_8x8_16bit_to_8bit_sse2(uint8_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride);
-void copy_8x8_16bit_to_8bit_ssse3(uint8_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_8x8_16bit_to_8bit_sse4_1(uint8_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-RTCD_EXTERN void (*copy_8x8_16bit_to_8bit)(uint8_t* dst,
-                                           int dstride,
-                                           const uint16_t* src,
-                                           int sstride);
-
-void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride,
-                                 int v,
-                                 int h);
-void copy_rect8_16bit_to_16bit_sse2(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride,
-                                    int v,
-                                    int h);
-void copy_rect8_16bit_to_16bit_ssse3(uint16_t* dst,
-                                     int dstride,
-                                     const uint16_t* src,
-                                     int sstride,
-                                     int v,
-                                     int h);
-void copy_rect8_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                      int dstride,
-                                      const uint16_t* src,
-                                      int sstride,
-                                      int v,
-                                      int h);
-RTCD_EXTERN void (*copy_rect8_16bit_to_16bit)(uint16_t* dst,
-                                              int dstride,
-                                              const uint16_t* src,
-                                              int sstride,
-                                              int v,
-                                              int h);
-
-void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
-                                int dstride,
-                                const uint8_t* src,
-                                int sstride,
-                                int v,
-                                int h);
-void copy_rect8_8bit_to_16bit_sse2(uint16_t* dst,
-                                   int dstride,
-                                   const uint8_t* src,
-                                   int sstride,
-                                   int v,
-                                   int h);
-void copy_rect8_8bit_to_16bit_ssse3(uint16_t* dst,
-                                    int dstride,
-                                    const uint8_t* src,
-                                    int sstride,
-                                    int v,
-                                    int h);
-void copy_rect8_8bit_to_16bit_sse4_1(uint16_t* dst,
-                                     int dstride,
-                                     const uint8_t* src,
-                                     int sstride,
-                                     int v,
-                                     int h);
-RTCD_EXTERN void (*copy_rect8_8bit_to_16bit)(uint16_t* dst,
-                                             int dstride,
-                                             const uint8_t* src,
-                                             int sstride,
-                                             int v,
-                                             int h);
-
-void av1_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-
-  aom_clpf_block = aom_clpf_block_c;
-  if (flags & HAS_SSE2)
-    aom_clpf_block = aom_clpf_block_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_block = aom_clpf_block_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_block = aom_clpf_block_sse4_1;
-  aom_clpf_block_hbd = aom_clpf_block_hbd_c;
-  if (flags & HAS_SSE2)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_sse4_1;
-  aom_clpf_hblock = aom_clpf_hblock_c;
-  if (flags & HAS_SSE2)
-    aom_clpf_hblock = aom_clpf_hblock_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_hblock = aom_clpf_hblock_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_hblock = aom_clpf_hblock_sse4_1;
-  aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_c;
-  if (flags & HAS_SSE2)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_sse4_1;
-  av1_convolve_2d = av1_convolve_2d_c;
-  if (flags & HAS_SSE2)
-    av1_convolve_2d = av1_convolve_2d_sse2;
-  av1_convolve_horiz = av1_convolve_horiz_c;
-  if (flags & HAS_SSSE3)
-    av1_convolve_horiz = av1_convolve_horiz_ssse3;
-  av1_convolve_rounding = av1_convolve_rounding_c;
-  if (flags & HAS_AVX2)
-    av1_convolve_rounding = av1_convolve_rounding_avx2;
-  av1_convolve_vert = av1_convolve_vert_c;
-  if (flags & HAS_SSSE3)
-    av1_convolve_vert = av1_convolve_vert_ssse3;
-  av1_iht16x16_256_add = av1_iht16x16_256_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht16x16_256_add = av1_iht16x16_256_add_sse2;
-  if (flags & HAS_AVX2)
-    av1_iht16x16_256_add = av1_iht16x16_256_add_avx2;
-  av1_iht16x32_512_add = av1_iht16x32_512_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht16x32_512_add = av1_iht16x32_512_add_sse2;
-  av1_iht16x8_128_add = av1_iht16x8_128_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht16x8_128_add = av1_iht16x8_128_add_sse2;
-  av1_iht32x16_512_add = av1_iht32x16_512_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht32x16_512_add = av1_iht32x16_512_add_sse2;
-  av1_iht4x4_16_add = av1_iht4x4_16_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht4x4_16_add = av1_iht4x4_16_add_sse2;
-  av1_iht4x8_32_add = av1_iht4x8_32_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht4x8_32_add = av1_iht4x8_32_add_sse2;
-  av1_iht8x16_128_add = av1_iht8x16_128_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht8x16_128_add = av1_iht8x16_128_add_sse2;
-  av1_iht8x4_32_add = av1_iht8x4_32_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht8x4_32_add = av1_iht8x4_32_add_sse2;
-  av1_iht8x8_64_add = av1_iht8x8_64_add_c;
-  if (flags & HAS_SSE2)
-    av1_iht8x8_64_add = av1_iht8x8_64_add_sse2;
-  av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_sse4_1;
-  av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_c;
-  if (flags & HAS_AVX2)
-    av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_avx2;
-  av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_sse4_1;
-  av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_sse4_1;
-  av1_lowbd_convolve_init = av1_lowbd_convolve_init_c;
-  if (flags & HAS_SSSE3)
-    av1_lowbd_convolve_init = av1_lowbd_convolve_init_ssse3;
-  av1_warp_affine = av1_warp_affine_c;
-  if (flags & HAS_SSE2)
-    av1_warp_affine = av1_warp_affine_sse2;
-  if (flags & HAS_SSSE3)
-    av1_warp_affine = av1_warp_affine_ssse3;
-  cdef_direction_4x4 = cdef_direction_4x4_c;
-  if (flags & HAS_SSE2)
-    cdef_direction_4x4 = cdef_direction_4x4_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_direction_4x4 = cdef_direction_4x4_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_direction_4x4 = cdef_direction_4x4_sse4_1;
-  cdef_direction_8x8 = cdef_direction_8x8_c;
-  if (flags & HAS_SSE2)
-    cdef_direction_8x8 = cdef_direction_8x8_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_direction_8x8 = cdef_direction_8x8_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_direction_8x8 = cdef_direction_8x8_sse4_1;
-  cdef_find_dir = cdef_find_dir_c;
-  if (flags & HAS_SSE2)
-    cdef_find_dir = cdef_find_dir_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_find_dir = cdef_find_dir_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_find_dir = cdef_find_dir_sse4_1;
-  copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_c;
-  if (flags & HAS_SSE2)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_sse4_1;
-  copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_c;
-  if (flags & HAS_SSE2)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_sse4_1;
-  copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_c;
-  if (flags & HAS_SSE2)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_sse4_1;
-  copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_c;
-  if (flags & HAS_SSE2)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_sse4_1;
-  copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_c;
-  if (flags & HAS_SSE2)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse4_1;
-  copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_c;
-  if (flags & HAS_SSE2)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse4_1;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/win/ia32/config/aom_config.asm b/third_party/libaom/source/config/win/ia32/config/aom_config.asm
new file mode 100644
index 0000000..6178fbe7
--- /dev/null
+++ b/third_party/libaom/source/config/win/ia32/config/aom_config.asm
@@ -0,0 +1,63 @@
+%define ARCH_ARM 0
+%define ARCH_MIPS 0
+%define ARCH_PPC 0
+%define ARCH_X86 1
+%define ARCH_X86_64 0
+%define CONFIG_ACCOUNTING 0
+%define CONFIG_ANALYZER 0
+%define CONFIG_AV1_DECODER 1
+%define CONFIG_AV1_ENCODER 0
+%define CONFIG_BIG_ENDIAN 0
+%define CONFIG_BITSTREAM_DEBUG 0
+%define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+%define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+%define CONFIG_COLLECT_RD_STATS 0
+%define CONFIG_DEBUG 0
+%define CONFIG_DECODE_PERF_TESTS 0
+%define CONFIG_DIST_8X8 1
+%define CONFIG_ENCODE_PERF_TESTS 0
+%define CONFIG_ENTROPY_STATS 0
+%define CONFIG_FILEOPTIONS 1
+%define CONFIG_FP_MB_STATS 0
+%define CONFIG_GCC 0
+%define CONFIG_GCOV 0
+%define CONFIG_GPROF 0
+%define CONFIG_INSPECTION 0
+%define CONFIG_INTERNAL_STATS 0
+%define CONFIG_INTER_STATS_ONLY 0
+%define CONFIG_LIBYUV 1
+%define CONFIG_LOWBITDEPTH 1
+%define CONFIG_MISMATCH_DEBUG 0
+%define CONFIG_MSVS 1
+%define CONFIG_MULTITHREAD 1
+%define CONFIG_OS_SUPPORT 1
+%define CONFIG_PIC 0
+%define CONFIG_RD_DEBUG 0
+%define CONFIG_RUNTIME_CPU_DETECT 1
+%define CONFIG_SHARED 0
+%define CONFIG_SIZE_LIMIT 1
+%define CONFIG_SPATIAL_RESAMPLING 1
+%define CONFIG_STATIC 1
+%define CONFIG_UNIT_TESTS 1
+%define CONFIG_WEBM_IO 1
+%define DECODE_HEIGHT_LIMIT 16384
+%define DECODE_WIDTH_LIMIT 16384
+%define HAVE_AVX 1
+%define HAVE_AVX2 1
+%define HAVE_DSPR2 0
+%define HAVE_FEXCEPT 1
+%define HAVE_MIPS32 0
+%define HAVE_MIPS64 0
+%define HAVE_MMX 1
+%define HAVE_MSA 0
+%define HAVE_NEON 0
+%define HAVE_PTHREAD_H 0
+%define HAVE_SSE 1
+%define HAVE_SSE2 1
+%define HAVE_SSE3 1
+%define HAVE_SSE4_1 1
+%define HAVE_SSE4_2 1
+%define HAVE_SSSE3 1
+%define HAVE_UNISTD_H 0
+%define HAVE_VSX 0
+%define HAVE_WXWIDGETS 0
diff --git a/third_party/libaom/source/config/win/ia32/config/aom_config.c b/third_party/libaom/source/config/win/ia32/config/aom_config.c
new file mode 100644
index 0000000..8a54b63
--- /dev/null
+++ b/third_party/libaom/source/config/win/ia32/config/aom_config.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2016, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#include "aom/aom_codec.h"
+static const char* const cfg = "-G \"Unix Makefiles\" -DCMAKE_TOOLCHAIN_FILE=\"/usr/local/google/home/johannkoenig/chromium/chromium/src/third_party/libaom/source/libaom/build/cmake/toolchains/x86-linux.cmake\" -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=1 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=16384 -DDECODE_WIDTH_LIMIT=16384";
+const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/win/ia32/config/aom_config.h b/third_party/libaom/source/config/win/ia32/config/aom_config.h
new file mode 100644
index 0000000..d1d9817
--- /dev/null
+++ b/third_party/libaom/source/config/win/ia32/config/aom_config.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#ifndef AOM_CONFIG_H_
+#define AOM_CONFIG_H_
+#define ARCH_ARM 0
+#define ARCH_MIPS 0
+#define ARCH_PPC 0
+#define ARCH_X86 1
+#define ARCH_X86_64 0
+#define CONFIG_ACCOUNTING 0
+#define CONFIG_ANALYZER 0
+#define CONFIG_AV1_DECODER 1
+#define CONFIG_AV1_ENCODER 0
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+#define CONFIG_COLLECT_RD_STATS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_DIST_8X8 1
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_ENTROPY_STATS 0
+#define CONFIG_FILEOPTIONS 1
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_GCC 0
+#define CONFIG_GCOV 0
+#define CONFIG_GPROF 0
+#define CONFIG_INSPECTION 0
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_INTER_STATS_ONLY 0
+#define CONFIG_LIBYUV 1
+#define CONFIG_LOWBITDEPTH 1
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_MSVS 1
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_PIC 0
+#define CONFIG_RD_DEBUG 0
+#define CONFIG_RUNTIME_CPU_DETECT 1
+#define CONFIG_SHARED 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_STATIC 1
+#define CONFIG_UNIT_TESTS 1
+#define CONFIG_WEBM_IO 1
+#define DECODE_HEIGHT_LIMIT 16384
+#define DECODE_WIDTH_LIMIT 16384
+#define HAVE_AVX 1
+#define HAVE_AVX2 1
+#define HAVE_DSPR2 0
+#define HAVE_FEXCEPT 1
+#define HAVE_MIPS32 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 1
+#define HAVE_MSA 0
+#define HAVE_NEON 0
+#define HAVE_PTHREAD_H 0
+#define HAVE_SSE 1
+#define HAVE_SSE2 1
+#define HAVE_SSE3 1
+#define HAVE_SSE4_1 1
+#define HAVE_SSE4_2 1
+#define HAVE_SSSE3 1
+#define HAVE_UNISTD_H 0
+#define HAVE_VSX 0
+#define HAVE_WXWIDGETS 0
+#define INLINE __inline
+#endif /* AOM_CONFIG_H_ */
diff --git a/third_party/libaom/source/config/win/ia32/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/win/ia32/config/aom_dsp_rtcd.h
new file mode 100644
index 0000000..492e840
--- /dev/null
+++ b/third_party/libaom/source/config/win/ia32/config/aom_dsp_rtcd.h
@@ -0,0 +1,6947 @@
+// This file is generated. Do not edit.
+#ifndef AOM_DSP_RTCD_H_
+#define AOM_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/aom_dsp_common.h"
+#include "av1/common/blockd.h"
+#include "av1/common/enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void aom_blend_a64_hmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+void aom_blend_a64_hmask_sse4_1(uint8_t* dst,
+                                uint32_t dst_stride,
+                                const uint8_t* src0,
+                                uint32_t src0_stride,
+                                const uint8_t* src1,
+                                uint32_t src1_stride,
+                                const uint8_t* mask,
+                                int w,
+                                int h);
+RTCD_EXTERN void (*aom_blend_a64_hmask)(uint8_t* dst,
+                                        uint32_t dst_stride,
+                                        const uint8_t* src0,
+                                        uint32_t src0_stride,
+                                        const uint8_t* src1,
+                                        uint32_t src1_stride,
+                                        const uint8_t* mask,
+                                        int w,
+                                        int h);
+
+void aom_blend_a64_mask_c(uint8_t* dst,
+                          uint32_t dst_stride,
+                          const uint8_t* src0,
+                          uint32_t src0_stride,
+                          const uint8_t* src1,
+                          uint32_t src1_stride,
+                          const uint8_t* mask,
+                          uint32_t mask_stride,
+                          int w,
+                          int h,
+                          int subx,
+                          int suby);
+void aom_blend_a64_mask_sse4_1(uint8_t* dst,
+                               uint32_t dst_stride,
+                               const uint8_t* src0,
+                               uint32_t src0_stride,
+                               const uint8_t* src1,
+                               uint32_t src1_stride,
+                               const uint8_t* mask,
+                               uint32_t mask_stride,
+                               int w,
+                               int h,
+                               int subx,
+                               int suby);
+RTCD_EXTERN void (*aom_blend_a64_mask)(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       uint32_t mask_stride,
+                                       int w,
+                                       int h,
+                                       int subx,
+                                       int suby);
+
+void aom_blend_a64_vmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+void aom_blend_a64_vmask_sse4_1(uint8_t* dst,
+                                uint32_t dst_stride,
+                                const uint8_t* src0,
+                                uint32_t src0_stride,
+                                const uint8_t* src1,
+                                uint32_t src1_stride,
+                                const uint8_t* mask,
+                                int w,
+                                int h);
+RTCD_EXTERN void (*aom_blend_a64_vmask)(uint8_t* dst,
+                                        uint32_t dst_stride,
+                                        const uint8_t* src0,
+                                        uint32_t src0_stride,
+                                        const uint8_t* src1,
+                                        uint32_t src1_stride,
+                                        const uint8_t* mask,
+                                        int w,
+                                        int h);
+
+void aom_convolve8_horiz_c(const uint8_t* src,
+                           ptrdiff_t src_stride,
+                           uint8_t* dst,
+                           ptrdiff_t dst_stride,
+                           const int16_t* filter_x,
+                           int x_step_q4,
+                           const int16_t* filter_y,
+                           int y_step_q4,
+                           int w,
+                           int h);
+void aom_convolve8_horiz_sse2(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+void aom_convolve8_horiz_ssse3(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h);
+void aom_convolve8_horiz_avx2(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+RTCD_EXTERN void (*aom_convolve8_horiz)(const uint8_t* src,
+                                        ptrdiff_t src_stride,
+                                        uint8_t* dst,
+                                        ptrdiff_t dst_stride,
+                                        const int16_t* filter_x,
+                                        int x_step_q4,
+                                        const int16_t* filter_y,
+                                        int y_step_q4,
+                                        int w,
+                                        int h);
+
+void aom_convolve8_vert_c(const uint8_t* src,
+                          ptrdiff_t src_stride,
+                          uint8_t* dst,
+                          ptrdiff_t dst_stride,
+                          const int16_t* filter_x,
+                          int x_step_q4,
+                          const int16_t* filter_y,
+                          int y_step_q4,
+                          int w,
+                          int h);
+void aom_convolve8_vert_sse2(const uint8_t* src,
+                             ptrdiff_t src_stride,
+                             uint8_t* dst,
+                             ptrdiff_t dst_stride,
+                             const int16_t* filter_x,
+                             int x_step_q4,
+                             const int16_t* filter_y,
+                             int y_step_q4,
+                             int w,
+                             int h);
+void aom_convolve8_vert_ssse3(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+void aom_convolve8_vert_avx2(const uint8_t* src,
+                             ptrdiff_t src_stride,
+                             uint8_t* dst,
+                             ptrdiff_t dst_stride,
+                             const int16_t* filter_x,
+                             int x_step_q4,
+                             const int16_t* filter_y,
+                             int y_step_q4,
+                             int w,
+                             int h);
+RTCD_EXTERN void (*aom_convolve8_vert)(const uint8_t* src,
+                                       ptrdiff_t src_stride,
+                                       uint8_t* dst,
+                                       ptrdiff_t dst_stride,
+                                       const int16_t* filter_x,
+                                       int x_step_q4,
+                                       const int16_t* filter_y,
+                                       int y_step_q4,
+                                       int w,
+                                       int h);
+
+void aom_convolve_copy_c(const uint8_t* src,
+                         ptrdiff_t src_stride,
+                         uint8_t* dst,
+                         ptrdiff_t dst_stride,
+                         const int16_t* filter_x,
+                         int x_step_q4,
+                         const int16_t* filter_y,
+                         int y_step_q4,
+                         int w,
+                         int h);
+void aom_convolve_copy_sse2(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h);
+RTCD_EXTERN void (*aom_convolve_copy)(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h);
+
+void aom_dc_128_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_16x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_16x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_16x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
+
+void aom_dc_128_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_32x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_4x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_4x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_128_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_4x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_128_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_8x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_8x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_8x32_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_8x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_128_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_8x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_128_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_left_predictor_16x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_16x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_16x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_16x4_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_16x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_16x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_16x8_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_16x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_2x2_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
+
+void aom_dc_left_predictor_32x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x16_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x32_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x64_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_32x8_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_4x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_4x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_4x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_4x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_4x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_left_predictor_4x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_4x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_left_predictor_64x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x16_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_64x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x32_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_64x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x64_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_8x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_8x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_8x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_8x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_8x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_8x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_left_predictor_8x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_8x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_left_predictor_8x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_8x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_predictor_16x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_16x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_16x4_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_16x4_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x4)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_16x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_16x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_16x8_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_16x8)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_2x2_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
+
+void aom_dc_predictor_32x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x16_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x32_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x64_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_32x8_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x8)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_4x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_4x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_4x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_4x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_4x4)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_predictor_4x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_4x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_predictor_64x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x16_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_64x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x32_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_64x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x64_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_8x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_8x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_8x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_8x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_8x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_8x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_dc_predictor_8x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_8x4)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_predictor_8x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_8x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_dc_top_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_16x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_16x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_16x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
+
+void aom_dc_top_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_32x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_4x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_4x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_top_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_4x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_top_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_8x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_8x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_8x32_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_8x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_dc_top_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_8x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_dc_top_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_h_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_16x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x4)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_16x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_16x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
+
+void aom_h_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_h_predictor_32x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_32x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_4x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_4x16)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_4x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_h_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_4x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_h_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_64x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_64x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_64x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_8x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_8x16)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_8x32_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_8x32)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_h_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_8x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_h_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_8x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_highbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                     uint32_t dst_stride,
+                                     const CONV_BUF_TYPE* src0,
+                                     uint32_t src0_stride,
+                                     const CONV_BUF_TYPE* src1,
+                                     uint32_t src1_stride,
+                                     const uint8_t* mask,
+                                     uint32_t mask_stride,
+                                     int w,
+                                     int h,
+                                     int subx,
+                                     int suby,
+                                     ConvolveParams* conv_params,
+                                     const int bd);
+#define aom_highbd_blend_a64_d16_mask aom_highbd_blend_a64_d16_mask_c
+
+void aom_highbd_blend_a64_hmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+void aom_highbd_blend_a64_hmask_sse4_1(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       int w,
+                                       int h,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_hmask)(uint8_t* dst,
+                                               uint32_t dst_stride,
+                                               const uint8_t* src0,
+                                               uint32_t src0_stride,
+                                               const uint8_t* src1,
+                                               uint32_t src1_stride,
+                                               const uint8_t* mask,
+                                               int w,
+                                               int h,
+                                               int bd);
+
+void aom_highbd_blend_a64_mask_c(uint8_t* dst,
+                                 uint32_t dst_stride,
+                                 const uint8_t* src0,
+                                 uint32_t src0_stride,
+                                 const uint8_t* src1,
+                                 uint32_t src1_stride,
+                                 const uint8_t* mask,
+                                 uint32_t mask_stride,
+                                 int w,
+                                 int h,
+                                 int subx,
+                                 int suby,
+                                 int bd);
+void aom_highbd_blend_a64_mask_sse4_1(uint8_t* dst,
+                                      uint32_t dst_stride,
+                                      const uint8_t* src0,
+                                      uint32_t src0_stride,
+                                      const uint8_t* src1,
+                                      uint32_t src1_stride,
+                                      const uint8_t* mask,
+                                      uint32_t mask_stride,
+                                      int w,
+                                      int h,
+                                      int subx,
+                                      int suby,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_mask)(uint8_t* dst,
+                                              uint32_t dst_stride,
+                                              const uint8_t* src0,
+                                              uint32_t src0_stride,
+                                              const uint8_t* src1,
+                                              uint32_t src1_stride,
+                                              const uint8_t* mask,
+                                              uint32_t mask_stride,
+                                              int w,
+                                              int h,
+                                              int subx,
+                                              int suby,
+                                              int bd);
+
+void aom_highbd_blend_a64_vmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+void aom_highbd_blend_a64_vmask_sse4_1(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       int w,
+                                       int h,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_vmask)(uint8_t* dst,
+                                               uint32_t dst_stride,
+                                               const uint8_t* src0,
+                                               uint32_t src0_stride,
+                                               const uint8_t* src1,
+                                               uint32_t src1_stride,
+                                               const uint8_t* mask,
+                                               int w,
+                                               int h,
+                                               int bd);
+
+void aom_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+void aom_highbd_convolve8_horiz_avx2(const uint8_t* src,
+                                     ptrdiff_t src_stride,
+                                     uint8_t* dst,
+                                     ptrdiff_t dst_stride,
+                                     const int16_t* filter_x,
+                                     int x_step_q4,
+                                     const int16_t* filter_y,
+                                     int y_step_q4,
+                                     int w,
+                                     int h,
+                                     int bps);
+RTCD_EXTERN void (*aom_highbd_convolve8_horiz)(const uint8_t* src,
+                                               ptrdiff_t src_stride,
+                                               uint8_t* dst,
+                                               ptrdiff_t dst_stride,
+                                               const int16_t* filter_x,
+                                               int x_step_q4,
+                                               const int16_t* filter_y,
+                                               int y_step_q4,
+                                               int w,
+                                               int h,
+                                               int bps);
+
+void aom_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+void aom_highbd_convolve8_vert_avx2(const uint8_t* src,
+                                    ptrdiff_t src_stride,
+                                    uint8_t* dst,
+                                    ptrdiff_t dst_stride,
+                                    const int16_t* filter_x,
+                                    int x_step_q4,
+                                    const int16_t* filter_y,
+                                    int y_step_q4,
+                                    int w,
+                                    int h,
+                                    int bps);
+RTCD_EXTERN void (*aom_highbd_convolve8_vert)(const uint8_t* src,
+                                              ptrdiff_t src_stride,
+                                              uint8_t* dst,
+                                              ptrdiff_t dst_stride,
+                                              const int16_t* filter_x,
+                                              int x_step_q4,
+                                              const int16_t* filter_y,
+                                              int y_step_q4,
+                                              int w,
+                                              int h,
+                                              int bps);
+
+void aom_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+void aom_highbd_convolve_copy_sse2(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   int bps);
+void aom_highbd_convolve_copy_avx2(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   int bps);
+RTCD_EXTERN void (*aom_highbd_convolve_copy)(const uint8_t* src,
+                                             ptrdiff_t src_stride,
+                                             uint8_t* dst,
+                                             ptrdiff_t dst_stride,
+                                             const int16_t* filter_x,
+                                             int x_step_q4,
+                                             const int16_t* filter_y,
+                                             int y_step_q4,
+                                             int w,
+                                             int h,
+                                             int bps);
+
+void aom_highbd_dc_128_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_16x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_16x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_128_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_16x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_16x32)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_128_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x4 aom_highbd_dc_128_predictor_16x4_c
+
+void aom_highbd_dc_128_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x64 aom_highbd_dc_128_predictor_16x64_c
+
+void aom_highbd_dc_128_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_128_predictor_16x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_16x8)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_128_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_2x2 aom_highbd_dc_128_predictor_2x2_c
+
+void aom_highbd_dc_128_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_32x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_32x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_128_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_32x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_32x32)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_128_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x64 aom_highbd_dc_128_predictor_32x64_c
+
+void aom_highbd_dc_128_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_32x8 aom_highbd_dc_128_predictor_32x8_c
+
+void aom_highbd_dc_128_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_4x16 aom_highbd_dc_128_predictor_4x16_c
+
+void aom_highbd_dc_128_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_4x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_4x4)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_128_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_4x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_4x8)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_128_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x16 aom_highbd_dc_128_predictor_64x16_c
+
+void aom_highbd_dc_128_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x32 aom_highbd_dc_128_predictor_64x32_c
+
+void aom_highbd_dc_128_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x64 aom_highbd_dc_128_predictor_64x64_c
+
+void aom_highbd_dc_128_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_128_predictor_8x16_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_8x16)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_128_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x32 aom_highbd_dc_128_predictor_8x32_c
+
+void aom_highbd_dc_128_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_8x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_8x4)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_128_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_8x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_128_predictor_8x8)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_left_predictor_16x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_16x16_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_16x16)(uint16_t* dst,
+                                                       ptrdiff_t y_stride,
+                                                       const uint16_t* above,
+                                                       const uint16_t* left,
+                                                       int bd);
+
+void aom_highbd_dc_left_predictor_16x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_16x32_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_16x32)(uint16_t* dst,
+                                                       ptrdiff_t y_stride,
+                                                       const uint16_t* above,
+                                                       const uint16_t* left,
+                                                       int bd);
+
+void aom_highbd_dc_left_predictor_16x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x4 aom_highbd_dc_left_predictor_16x4_c
+
+void aom_highbd_dc_left_predictor_16x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x64 aom_highbd_dc_left_predictor_16x64_c
+
+void aom_highbd_dc_left_predictor_16x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_left_predictor_16x8_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_16x8)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_left_predictor_2x2_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_2x2 aom_highbd_dc_left_predictor_2x2_c
+
+void aom_highbd_dc_left_predictor_32x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_32x16_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_32x16)(uint16_t* dst,
+                                                       ptrdiff_t y_stride,
+                                                       const uint16_t* above,
+                                                       const uint16_t* left,
+                                                       int bd);
+
+void aom_highbd_dc_left_predictor_32x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_32x32_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_32x32)(uint16_t* dst,
+                                                       ptrdiff_t y_stride,
+                                                       const uint16_t* above,
+                                                       const uint16_t* left,
+                                                       int bd);
+
+void aom_highbd_dc_left_predictor_32x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x64 aom_highbd_dc_left_predictor_32x64_c
+
+void aom_highbd_dc_left_predictor_32x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_32x8 aom_highbd_dc_left_predictor_32x8_c
+
+void aom_highbd_dc_left_predictor_4x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_4x16 aom_highbd_dc_left_predictor_4x16_c
+
+void aom_highbd_dc_left_predictor_4x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_4x4_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_4x4)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_left_predictor_4x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_4x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_4x8)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_left_predictor_64x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x16 aom_highbd_dc_left_predictor_64x16_c
+
+void aom_highbd_dc_left_predictor_64x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x32 aom_highbd_dc_left_predictor_64x32_c
+
+void aom_highbd_dc_left_predictor_64x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x64 aom_highbd_dc_left_predictor_64x64_c
+
+void aom_highbd_dc_left_predictor_8x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_left_predictor_8x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_8x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_left_predictor_8x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x32 aom_highbd_dc_left_predictor_8x32_c
+
+void aom_highbd_dc_left_predictor_8x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_8x4_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_8x4)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_left_predictor_8x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_8x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_left_predictor_8x8)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_predictor_16x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_16x16_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_16x16)(uint16_t* dst,
+                                                  ptrdiff_t y_stride,
+                                                  const uint16_t* above,
+                                                  const uint16_t* left,
+                                                  int bd);
+
+void aom_highbd_dc_predictor_16x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_16x32_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_16x32)(uint16_t* dst,
+                                                  ptrdiff_t y_stride,
+                                                  const uint16_t* above,
+                                                  const uint16_t* left,
+                                                  int bd);
+
+void aom_highbd_dc_predictor_16x4_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x4 aom_highbd_dc_predictor_16x4_c
+
+void aom_highbd_dc_predictor_16x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x64 aom_highbd_dc_predictor_16x64_c
+
+void aom_highbd_dc_predictor_16x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_dc_predictor_16x8_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_16x8)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_dc_predictor_2x2_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_2x2 aom_highbd_dc_predictor_2x2_c
+
+void aom_highbd_dc_predictor_32x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_32x16_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_32x16)(uint16_t* dst,
+                                                  ptrdiff_t y_stride,
+                                                  const uint16_t* above,
+                                                  const uint16_t* left,
+                                                  int bd);
+
+void aom_highbd_dc_predictor_32x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_32x32_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_32x32)(uint16_t* dst,
+                                                  ptrdiff_t y_stride,
+                                                  const uint16_t* above,
+                                                  const uint16_t* left,
+                                                  int bd);
+
+void aom_highbd_dc_predictor_32x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x64 aom_highbd_dc_predictor_32x64_c
+
+void aom_highbd_dc_predictor_32x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_32x8 aom_highbd_dc_predictor_32x8_c
+
+void aom_highbd_dc_predictor_4x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_4x16 aom_highbd_dc_predictor_4x16_c
+
+void aom_highbd_dc_predictor_4x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_4x4_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_4x4)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_dc_predictor_4x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_4x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_4x8)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_dc_predictor_64x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x16 aom_highbd_dc_predictor_64x16_c
+
+void aom_highbd_dc_predictor_64x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x32 aom_highbd_dc_predictor_64x32_c
+
+void aom_highbd_dc_predictor_64x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x64 aom_highbd_dc_predictor_64x64_c
+
+void aom_highbd_dc_predictor_8x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_dc_predictor_8x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_8x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_dc_predictor_8x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x32 aom_highbd_dc_predictor_8x32_c
+
+void aom_highbd_dc_predictor_8x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_8x4_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_8x4)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_dc_predictor_8x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_8x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_dc_predictor_8x8)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_dc_top_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_16x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_16x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_top_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_16x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_16x32)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_top_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x4 aom_highbd_dc_top_predictor_16x4_c
+
+void aom_highbd_dc_top_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x64 aom_highbd_dc_top_predictor_16x64_c
+
+void aom_highbd_dc_top_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_top_predictor_16x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_16x8)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_top_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_2x2 aom_highbd_dc_top_predictor_2x2_c
+
+void aom_highbd_dc_top_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_32x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_32x16)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_top_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_32x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_32x32)(uint16_t* dst,
+                                                      ptrdiff_t y_stride,
+                                                      const uint16_t* above,
+                                                      const uint16_t* left,
+                                                      int bd);
+
+void aom_highbd_dc_top_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x64 aom_highbd_dc_top_predictor_32x64_c
+
+void aom_highbd_dc_top_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_32x8 aom_highbd_dc_top_predictor_32x8_c
+
+void aom_highbd_dc_top_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_4x16 aom_highbd_dc_top_predictor_4x16_c
+
+void aom_highbd_dc_top_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_4x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_4x4)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_top_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_4x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_4x8)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_top_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x16 aom_highbd_dc_top_predictor_64x16_c
+
+void aom_highbd_dc_top_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x32 aom_highbd_dc_top_predictor_64x32_c
+
+void aom_highbd_dc_top_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x64 aom_highbd_dc_top_predictor_64x64_c
+
+void aom_highbd_dc_top_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_top_predictor_8x16_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_8x16)(uint16_t* dst,
+                                                     ptrdiff_t y_stride,
+                                                     const uint16_t* above,
+                                                     const uint16_t* left,
+                                                     int bd);
+
+void aom_highbd_dc_top_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x32 aom_highbd_dc_top_predictor_8x32_c
+
+void aom_highbd_dc_top_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_8x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_8x4)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_dc_top_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_8x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_dc_top_predictor_8x8)(uint16_t* dst,
+                                                    ptrdiff_t y_stride,
+                                                    const uint16_t* above,
+                                                    const uint16_t* left,
+                                                    int bd);
+
+void aom_highbd_h_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_16x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_16x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_h_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_16x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_16x32)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_h_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x4 aom_highbd_h_predictor_16x4_c
+
+void aom_highbd_h_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x64 aom_highbd_h_predictor_16x64_c
+
+void aom_highbd_h_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_h_predictor_16x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_16x8)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_h_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_2x2 aom_highbd_h_predictor_2x2_c
+
+void aom_highbd_h_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_32x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_32x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_h_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_32x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_32x32)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_h_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x64 aom_highbd_h_predictor_32x64_c
+
+void aom_highbd_h_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_32x8 aom_highbd_h_predictor_32x8_c
+
+void aom_highbd_h_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_4x16 aom_highbd_h_predictor_4x16_c
+
+void aom_highbd_h_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_4x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_4x4)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_h_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_4x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_4x8)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_h_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x16 aom_highbd_h_predictor_64x16_c
+
+void aom_highbd_h_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x32 aom_highbd_h_predictor_64x32_c
+
+void aom_highbd_h_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x64 aom_highbd_h_predictor_64x64_c
+
+void aom_highbd_h_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_h_predictor_8x16_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_8x16)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_h_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x32 aom_highbd_h_predictor_8x32_c
+
+void aom_highbd_h_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_8x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_8x4)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_h_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_8x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_h_predictor_8x8)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_lpf_horizontal_14_c(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+void aom_highbd_lpf_horizontal_14_sse2(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_14)(uint16_t* s,
+                                                 int pitch,
+                                                 const uint8_t* blimit,
+                                                 const uint8_t* limit,
+                                                 const uint8_t* thresh,
+                                                 int bd);
+
+void aom_highbd_lpf_horizontal_14_dual_c(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limt1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_horizontal_14_dual_sse2(uint16_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limt1,
+                                            const uint8_t* thresh1,
+                                            int bd);
+void aom_highbd_lpf_horizontal_14_dual_avx2(uint16_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limt1,
+                                            const uint8_t* thresh1,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_14_dual)(uint16_t* s,
+                                                      int pitch,
+                                                      const uint8_t* blimit0,
+                                                      const uint8_t* limit0,
+                                                      const uint8_t* thresh0,
+                                                      const uint8_t* blimit1,
+                                                      const uint8_t* limt1,
+                                                      const uint8_t* thresh1,
+                                                      int bd);
+
+void aom_highbd_lpf_horizontal_4_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_4_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_4)(uint16_t* s,
+                                                int pitch,
+                                                const uint8_t* blimit,
+                                                const uint8_t* limit,
+                                                const uint8_t* thresh,
+                                                int bd);
+
+void aom_highbd_lpf_horizontal_4_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_4_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+void aom_highbd_lpf_horizontal_4_dual_avx2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_4_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_horizontal_6_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_6_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_6)(uint16_t* s,
+                                                int pitch,
+                                                const uint8_t* blimit,
+                                                const uint8_t* limit,
+                                                const uint8_t* thresh,
+                                                int bd);
+
+void aom_highbd_lpf_horizontal_6_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_6_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_6_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_horizontal_8_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_8_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_8)(uint16_t* s,
+                                                int pitch,
+                                                const uint8_t* blimit,
+                                                const uint8_t* limit,
+                                                const uint8_t* thresh,
+                                                int bd);
+
+void aom_highbd_lpf_horizontal_8_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_8_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+void aom_highbd_lpf_horizontal_8_dual_avx2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_8_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_vertical_14_c(uint16_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit,
+                                  const uint8_t* limit,
+                                  const uint8_t* thresh,
+                                  int bd);
+void aom_highbd_lpf_vertical_14_sse2(uint16_t* s,
+                                     int pitch,
+                                     const uint8_t* blimit,
+                                     const uint8_t* limit,
+                                     const uint8_t* thresh,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_14)(uint16_t* s,
+                                               int pitch,
+                                               const uint8_t* blimit,
+                                               const uint8_t* limit,
+                                               const uint8_t* thresh,
+                                               int bd);
+
+void aom_highbd_lpf_vertical_14_dual_c(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit0,
+                                       const uint8_t* limit0,
+                                       const uint8_t* thresh0,
+                                       const uint8_t* blimit1,
+                                       const uint8_t* limit1,
+                                       const uint8_t* thresh1,
+                                       int bd);
+void aom_highbd_lpf_vertical_14_dual_sse2(uint16_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit0,
+                                          const uint8_t* limit0,
+                                          const uint8_t* thresh0,
+                                          const uint8_t* blimit1,
+                                          const uint8_t* limit1,
+                                          const uint8_t* thresh1,
+                                          int bd);
+void aom_highbd_lpf_vertical_14_dual_avx2(uint16_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit0,
+                                          const uint8_t* limit0,
+                                          const uint8_t* thresh0,
+                                          const uint8_t* blimit1,
+                                          const uint8_t* limit1,
+                                          const uint8_t* thresh1,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_14_dual)(uint16_t* s,
+                                                    int pitch,
+                                                    const uint8_t* blimit0,
+                                                    const uint8_t* limit0,
+                                                    const uint8_t* thresh0,
+                                                    const uint8_t* blimit1,
+                                                    const uint8_t* limit1,
+                                                    const uint8_t* thresh1,
+                                                    int bd);
+
+void aom_highbd_lpf_vertical_4_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_4_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_4)(uint16_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit,
+                                              const uint8_t* limit,
+                                              const uint8_t* thresh,
+                                              int bd);
+
+void aom_highbd_lpf_vertical_4_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_4_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_vertical_4_dual_avx2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_4_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_lpf_vertical_6_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_6_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_6)(uint16_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit,
+                                              const uint8_t* limit,
+                                              const uint8_t* thresh,
+                                              int bd);
+
+void aom_highbd_lpf_vertical_6_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_6_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_6_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_lpf_vertical_8_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_8_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_8)(uint16_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit,
+                                              const uint8_t* limit,
+                                              const uint8_t* thresh,
+                                              int bd);
+
+void aom_highbd_lpf_vertical_8_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_8_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_vertical_8_dual_avx2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_8_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_paeth_predictor_16x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x16 aom_highbd_paeth_predictor_16x16_c
+
+void aom_highbd_paeth_predictor_16x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x32 aom_highbd_paeth_predictor_16x32_c
+
+void aom_highbd_paeth_predictor_16x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x4 aom_highbd_paeth_predictor_16x4_c
+
+void aom_highbd_paeth_predictor_16x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x64 aom_highbd_paeth_predictor_16x64_c
+
+void aom_highbd_paeth_predictor_16x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x8 aom_highbd_paeth_predictor_16x8_c
+
+void aom_highbd_paeth_predictor_2x2_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_2x2 aom_highbd_paeth_predictor_2x2_c
+
+void aom_highbd_paeth_predictor_32x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x16 aom_highbd_paeth_predictor_32x16_c
+
+void aom_highbd_paeth_predictor_32x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x32 aom_highbd_paeth_predictor_32x32_c
+
+void aom_highbd_paeth_predictor_32x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x64 aom_highbd_paeth_predictor_32x64_c
+
+void aom_highbd_paeth_predictor_32x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_32x8 aom_highbd_paeth_predictor_32x8_c
+
+void aom_highbd_paeth_predictor_4x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_4x16 aom_highbd_paeth_predictor_4x16_c
+
+void aom_highbd_paeth_predictor_4x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x4 aom_highbd_paeth_predictor_4x4_c
+
+void aom_highbd_paeth_predictor_4x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x8 aom_highbd_paeth_predictor_4x8_c
+
+void aom_highbd_paeth_predictor_64x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x16 aom_highbd_paeth_predictor_64x16_c
+
+void aom_highbd_paeth_predictor_64x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x32 aom_highbd_paeth_predictor_64x32_c
+
+void aom_highbd_paeth_predictor_64x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x64 aom_highbd_paeth_predictor_64x64_c
+
+void aom_highbd_paeth_predictor_8x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x16 aom_highbd_paeth_predictor_8x16_c
+
+void aom_highbd_paeth_predictor_8x32_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x32 aom_highbd_paeth_predictor_8x32_c
+
+void aom_highbd_paeth_predictor_8x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x4 aom_highbd_paeth_predictor_8x4_c
+
+void aom_highbd_paeth_predictor_8x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x8 aom_highbd_paeth_predictor_8x8_c
+
+void aom_highbd_smooth_h_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x16 \
+  aom_highbd_smooth_h_predictor_16x16_c
+
+void aom_highbd_smooth_h_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x32 \
+  aom_highbd_smooth_h_predictor_16x32_c
+
+void aom_highbd_smooth_h_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x4 aom_highbd_smooth_h_predictor_16x4_c
+
+void aom_highbd_smooth_h_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x64 \
+  aom_highbd_smooth_h_predictor_16x64_c
+
+void aom_highbd_smooth_h_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x8 aom_highbd_smooth_h_predictor_16x8_c
+
+void aom_highbd_smooth_h_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_2x2 aom_highbd_smooth_h_predictor_2x2_c
+
+void aom_highbd_smooth_h_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x16 \
+  aom_highbd_smooth_h_predictor_32x16_c
+
+void aom_highbd_smooth_h_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x32 \
+  aom_highbd_smooth_h_predictor_32x32_c
+
+void aom_highbd_smooth_h_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x64 \
+  aom_highbd_smooth_h_predictor_32x64_c
+
+void aom_highbd_smooth_h_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_32x8 aom_highbd_smooth_h_predictor_32x8_c
+
+void aom_highbd_smooth_h_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_4x16 aom_highbd_smooth_h_predictor_4x16_c
+
+void aom_highbd_smooth_h_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x4 aom_highbd_smooth_h_predictor_4x4_c
+
+void aom_highbd_smooth_h_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x8 aom_highbd_smooth_h_predictor_4x8_c
+
+void aom_highbd_smooth_h_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x16 \
+  aom_highbd_smooth_h_predictor_64x16_c
+
+void aom_highbd_smooth_h_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x32 \
+  aom_highbd_smooth_h_predictor_64x32_c
+
+void aom_highbd_smooth_h_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x64 \
+  aom_highbd_smooth_h_predictor_64x64_c
+
+void aom_highbd_smooth_h_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x16 aom_highbd_smooth_h_predictor_8x16_c
+
+void aom_highbd_smooth_h_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x32 aom_highbd_smooth_h_predictor_8x32_c
+
+void aom_highbd_smooth_h_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x4 aom_highbd_smooth_h_predictor_8x4_c
+
+void aom_highbd_smooth_h_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x8 aom_highbd_smooth_h_predictor_8x8_c
+
+void aom_highbd_smooth_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x16 aom_highbd_smooth_predictor_16x16_c
+
+void aom_highbd_smooth_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x32 aom_highbd_smooth_predictor_16x32_c
+
+void aom_highbd_smooth_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x4 aom_highbd_smooth_predictor_16x4_c
+
+void aom_highbd_smooth_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x64 aom_highbd_smooth_predictor_16x64_c
+
+void aom_highbd_smooth_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x8 aom_highbd_smooth_predictor_16x8_c
+
+void aom_highbd_smooth_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_2x2 aom_highbd_smooth_predictor_2x2_c
+
+void aom_highbd_smooth_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x16 aom_highbd_smooth_predictor_32x16_c
+
+void aom_highbd_smooth_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x32 aom_highbd_smooth_predictor_32x32_c
+
+void aom_highbd_smooth_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x64 aom_highbd_smooth_predictor_32x64_c
+
+void aom_highbd_smooth_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_32x8 aom_highbd_smooth_predictor_32x8_c
+
+void aom_highbd_smooth_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_4x16 aom_highbd_smooth_predictor_4x16_c
+
+void aom_highbd_smooth_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x4 aom_highbd_smooth_predictor_4x4_c
+
+void aom_highbd_smooth_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x8 aom_highbd_smooth_predictor_4x8_c
+
+void aom_highbd_smooth_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x16 aom_highbd_smooth_predictor_64x16_c
+
+void aom_highbd_smooth_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x32 aom_highbd_smooth_predictor_64x32_c
+
+void aom_highbd_smooth_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x64 aom_highbd_smooth_predictor_64x64_c
+
+void aom_highbd_smooth_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x16 aom_highbd_smooth_predictor_8x16_c
+
+void aom_highbd_smooth_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x32 aom_highbd_smooth_predictor_8x32_c
+
+void aom_highbd_smooth_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x4 aom_highbd_smooth_predictor_8x4_c
+
+void aom_highbd_smooth_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x8 aom_highbd_smooth_predictor_8x8_c
+
+void aom_highbd_smooth_v_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x16 \
+  aom_highbd_smooth_v_predictor_16x16_c
+
+void aom_highbd_smooth_v_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x32 \
+  aom_highbd_smooth_v_predictor_16x32_c
+
+void aom_highbd_smooth_v_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x4 aom_highbd_smooth_v_predictor_16x4_c
+
+void aom_highbd_smooth_v_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x64 \
+  aom_highbd_smooth_v_predictor_16x64_c
+
+void aom_highbd_smooth_v_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x8 aom_highbd_smooth_v_predictor_16x8_c
+
+void aom_highbd_smooth_v_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_2x2 aom_highbd_smooth_v_predictor_2x2_c
+
+void aom_highbd_smooth_v_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x16 \
+  aom_highbd_smooth_v_predictor_32x16_c
+
+void aom_highbd_smooth_v_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x32 \
+  aom_highbd_smooth_v_predictor_32x32_c
+
+void aom_highbd_smooth_v_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x64 \
+  aom_highbd_smooth_v_predictor_32x64_c
+
+void aom_highbd_smooth_v_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_32x8 aom_highbd_smooth_v_predictor_32x8_c
+
+void aom_highbd_smooth_v_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_4x16 aom_highbd_smooth_v_predictor_4x16_c
+
+void aom_highbd_smooth_v_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x4 aom_highbd_smooth_v_predictor_4x4_c
+
+void aom_highbd_smooth_v_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x8 aom_highbd_smooth_v_predictor_4x8_c
+
+void aom_highbd_smooth_v_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x16 \
+  aom_highbd_smooth_v_predictor_64x16_c
+
+void aom_highbd_smooth_v_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x32 \
+  aom_highbd_smooth_v_predictor_64x32_c
+
+void aom_highbd_smooth_v_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x64 \
+  aom_highbd_smooth_v_predictor_64x64_c
+
+void aom_highbd_smooth_v_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x16 aom_highbd_smooth_v_predictor_8x16_c
+
+void aom_highbd_smooth_v_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x32 aom_highbd_smooth_v_predictor_8x32_c
+
+void aom_highbd_smooth_v_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x4 aom_highbd_smooth_v_predictor_8x4_c
+
+void aom_highbd_smooth_v_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x8 aom_highbd_smooth_v_predictor_8x8_c
+
+void aom_highbd_v_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_16x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_16x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_v_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_16x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_16x32)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_v_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x4 aom_highbd_v_predictor_16x4_c
+
+void aom_highbd_v_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x64 aom_highbd_v_predictor_16x64_c
+
+void aom_highbd_v_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_v_predictor_16x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_16x8)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_v_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_2x2 aom_highbd_v_predictor_2x2_c
+
+void aom_highbd_v_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_32x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_32x16)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_v_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_32x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_32x32)(uint16_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint16_t* above,
+                                                 const uint16_t* left,
+                                                 int bd);
+
+void aom_highbd_v_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x64 aom_highbd_v_predictor_32x64_c
+
+void aom_highbd_v_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_32x8 aom_highbd_v_predictor_32x8_c
+
+void aom_highbd_v_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_4x16 aom_highbd_v_predictor_4x16_c
+
+void aom_highbd_v_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_4x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_4x4)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_v_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_4x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_4x8)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_v_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x16 aom_highbd_v_predictor_64x16_c
+
+void aom_highbd_v_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x32 aom_highbd_v_predictor_64x32_c
+
+void aom_highbd_v_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x64 aom_highbd_v_predictor_64x64_c
+
+void aom_highbd_v_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_v_predictor_8x16_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_8x16)(uint16_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint16_t* above,
+                                                const uint16_t* left,
+                                                int bd);
+
+void aom_highbd_v_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x32 aom_highbd_v_predictor_8x32_c
+
+void aom_highbd_v_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_8x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_8x4)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_highbd_v_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_8x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+RTCD_EXTERN void (*aom_highbd_v_predictor_8x8)(uint16_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint16_t* above,
+                                               const uint16_t* left,
+                                               int bd);
+
+void aom_lowbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                    uint32_t dst_stride,
+                                    const CONV_BUF_TYPE* src0,
+                                    uint32_t src0_stride,
+                                    const CONV_BUF_TYPE* src1,
+                                    uint32_t src1_stride,
+                                    const uint8_t* mask,
+                                    uint32_t mask_stride,
+                                    int w,
+                                    int h,
+                                    int subx,
+                                    int suby,
+                                    ConvolveParams* conv_params);
+void aom_lowbd_blend_a64_d16_mask_sse4_1(uint8_t* dst,
+                                         uint32_t dst_stride,
+                                         const CONV_BUF_TYPE* src0,
+                                         uint32_t src0_stride,
+                                         const CONV_BUF_TYPE* src1,
+                                         uint32_t src1_stride,
+                                         const uint8_t* mask,
+                                         uint32_t mask_stride,
+                                         int w,
+                                         int h,
+                                         int subx,
+                                         int suby,
+                                         ConvolveParams* conv_params);
+RTCD_EXTERN void (*aom_lowbd_blend_a64_d16_mask)(uint8_t* dst,
+                                                 uint32_t dst_stride,
+                                                 const CONV_BUF_TYPE* src0,
+                                                 uint32_t src0_stride,
+                                                 const CONV_BUF_TYPE* src1,
+                                                 uint32_t src1_stride,
+                                                 const uint8_t* mask,
+                                                 uint32_t mask_stride,
+                                                 int w,
+                                                 int h,
+                                                 int subx,
+                                                 int suby,
+                                                 ConvolveParams* conv_params);
+
+void aom_lpf_horizontal_14_c(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+void aom_lpf_horizontal_14_sse2(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit,
+                                const uint8_t* limit,
+                                const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_14)(uint8_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit,
+                                          const uint8_t* limit,
+                                          const uint8_t* thresh);
+
+void aom_lpf_horizontal_14_dual_c(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+void aom_lpf_horizontal_14_dual_sse2(uint8_t* s,
+                                     int pitch,
+                                     const uint8_t* blimit0,
+                                     const uint8_t* limit0,
+                                     const uint8_t* thresh0,
+                                     const uint8_t* blimit1,
+                                     const uint8_t* limit1,
+                                     const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_horizontal_14_dual)(uint8_t* s,
+                                               int pitch,
+                                               const uint8_t* blimit0,
+                                               const uint8_t* limit0,
+                                               const uint8_t* thresh0,
+                                               const uint8_t* blimit1,
+                                               const uint8_t* limit1,
+                                               const uint8_t* thresh1);
+
+void aom_lpf_horizontal_4_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_4_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_4)(uint8_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit,
+                                         const uint8_t* limit,
+                                         const uint8_t* thresh);
+
+void aom_lpf_horizontal_4_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_4_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_horizontal_4_dual)(uint8_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit0,
+                                              const uint8_t* limit0,
+                                              const uint8_t* thresh0,
+                                              const uint8_t* blimit1,
+                                              const uint8_t* limit1,
+                                              const uint8_t* thresh1);
+
+void aom_lpf_horizontal_6_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_6_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_6)(uint8_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit,
+                                         const uint8_t* limit,
+                                         const uint8_t* thresh);
+
+void aom_lpf_horizontal_6_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_6_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_horizontal_6_dual)(uint8_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit0,
+                                              const uint8_t* limit0,
+                                              const uint8_t* thresh0,
+                                              const uint8_t* blimit1,
+                                              const uint8_t* limit1,
+                                              const uint8_t* thresh1);
+
+void aom_lpf_horizontal_8_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_8_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_horizontal_8)(uint8_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit,
+                                         const uint8_t* limit,
+                                         const uint8_t* thresh);
+
+void aom_lpf_horizontal_8_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_8_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_horizontal_8_dual)(uint8_t* s,
+                                              int pitch,
+                                              const uint8_t* blimit0,
+                                              const uint8_t* limit0,
+                                              const uint8_t* thresh0,
+                                              const uint8_t* blimit1,
+                                              const uint8_t* limit1,
+                                              const uint8_t* thresh1);
+
+void aom_lpf_vertical_14_c(uint8_t* s,
+                           int pitch,
+                           const uint8_t* blimit,
+                           const uint8_t* limit,
+                           const uint8_t* thresh);
+void aom_lpf_vertical_14_sse2(uint8_t* s,
+                              int pitch,
+                              const uint8_t* blimit,
+                              const uint8_t* limit,
+                              const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_14)(uint8_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit,
+                                        const uint8_t* limit,
+                                        const uint8_t* thresh);
+
+void aom_lpf_vertical_14_dual_c(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit0,
+                                const uint8_t* limit0,
+                                const uint8_t* thresh0,
+                                const uint8_t* blimit1,
+                                const uint8_t* limit1,
+                                const uint8_t* thresh1);
+void aom_lpf_vertical_14_dual_sse2(uint8_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit0,
+                                   const uint8_t* limit0,
+                                   const uint8_t* thresh0,
+                                   const uint8_t* blimit1,
+                                   const uint8_t* limit1,
+                                   const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_vertical_14_dual)(uint8_t* s,
+                                             int pitch,
+                                             const uint8_t* blimit0,
+                                             const uint8_t* limit0,
+                                             const uint8_t* thresh0,
+                                             const uint8_t* blimit1,
+                                             const uint8_t* limit1,
+                                             const uint8_t* thresh1);
+
+void aom_lpf_vertical_4_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_4_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_4)(uint8_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh);
+
+void aom_lpf_vertical_4_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_4_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_vertical_4_dual)(uint8_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limit1,
+                                            const uint8_t* thresh1);
+
+void aom_lpf_vertical_6_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_6_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_6)(uint8_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh);
+
+void aom_lpf_vertical_6_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_6_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_vertical_6_dual)(uint8_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limit1,
+                                            const uint8_t* thresh1);
+
+void aom_lpf_vertical_8_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_8_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+RTCD_EXTERN void (*aom_lpf_vertical_8)(uint8_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh);
+
+void aom_lpf_vertical_8_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_8_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+RTCD_EXTERN void (*aom_lpf_vertical_8_dual)(uint8_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limit1,
+                                            const uint8_t* thresh1);
+
+void aom_paeth_predictor_16x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_16x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_16x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_16x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_paeth_predictor_16x8_avx2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_2x2_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
+
+void aom_paeth_predictor_32x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_32x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_4x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_4x16_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x16)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_4x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_4x4_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x4)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_4x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_4x8_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x8)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_64x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_64x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_64x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_8x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_8x16_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x16)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_8x32_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_8x32_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x32)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_8x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_8x4_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x4)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_8x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_8x8_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x8)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_16x4_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x4)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_16x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
+
+void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_32x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_4x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_4x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_4x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_8x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_8x32_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_8x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_8x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_16x4_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_16x8_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
+
+void aom_smooth_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_32x8_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_4x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_4x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_4x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_8x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_8x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_8x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_8x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_16x4_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x4)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_16x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
+
+void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_32x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_4x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_4x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_4x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_8x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_8x32_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_8x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_8x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_v_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_16x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x4)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_16x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_16x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
+
+void aom_v_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x16_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x64_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_32x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x8)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_4x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_4x16)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_4x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_v_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_4x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_v_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x16_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x64_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_8x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_8x16)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_8x32_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_8x32)(uint8_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint8_t* above,
+                                         const uint8_t* left);
+
+void aom_v_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_8x4)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void aom_v_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_8x8)(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+
+void av1_round_shift_array_c(int32_t* arr, int size, int bit);
+void av1_round_shift_array_sse4_1(int32_t* arr, int size, int bit);
+RTCD_EXTERN void (*av1_round_shift_array)(int32_t* arr, int size, int bit);
+
+void aom_dsp_rtcd(void);
+
+#ifdef RTCD_C
+#include "aom_ports/x86.h"
+static void setup_rtcd_internal(void) {
+  int flags = x86_simd_caps();
+
+  (void)flags;
+
+  aom_blend_a64_hmask = aom_blend_a64_hmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_hmask = aom_blend_a64_hmask_sse4_1;
+  aom_blend_a64_mask = aom_blend_a64_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_mask = aom_blend_a64_mask_sse4_1;
+  aom_blend_a64_vmask = aom_blend_a64_vmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_vmask = aom_blend_a64_vmask_sse4_1;
+  aom_convolve8_horiz = aom_convolve8_horiz_c;
+  if (flags & HAS_SSE2)
+    aom_convolve8_horiz = aom_convolve8_horiz_sse2;
+  if (flags & HAS_SSSE3)
+    aom_convolve8_horiz = aom_convolve8_horiz_ssse3;
+  if (flags & HAS_AVX2)
+    aom_convolve8_horiz = aom_convolve8_horiz_avx2;
+  aom_convolve8_vert = aom_convolve8_vert_c;
+  if (flags & HAS_SSE2)
+    aom_convolve8_vert = aom_convolve8_vert_sse2;
+  if (flags & HAS_SSSE3)
+    aom_convolve8_vert = aom_convolve8_vert_ssse3;
+  if (flags & HAS_AVX2)
+    aom_convolve8_vert = aom_convolve8_vert_avx2;
+  aom_convolve_copy = aom_convolve_copy_c;
+  if (flags & HAS_SSE2)
+    aom_convolve_copy = aom_convolve_copy_sse2;
+  aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x16 = aom_dc_128_predictor_16x16_sse2;
+  aom_dc_128_predictor_16x32 = aom_dc_128_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x32 = aom_dc_128_predictor_16x32_sse2;
+  aom_dc_128_predictor_16x4 = aom_dc_128_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x4 = aom_dc_128_predictor_16x4_sse2;
+  aom_dc_128_predictor_16x64 = aom_dc_128_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x64 = aom_dc_128_predictor_16x64_sse2;
+  aom_dc_128_predictor_16x8 = aom_dc_128_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_16x8 = aom_dc_128_predictor_16x8_sse2;
+  aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_avx2;
+  aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_avx2;
+  aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_avx2;
+  aom_dc_128_predictor_32x8 = aom_dc_128_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_32x8 = aom_dc_128_predictor_32x8_sse2;
+  aom_dc_128_predictor_4x16 = aom_dc_128_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_4x16 = aom_dc_128_predictor_4x16_sse2;
+  aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_4x4 = aom_dc_128_predictor_4x4_sse2;
+  aom_dc_128_predictor_4x8 = aom_dc_128_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_4x8 = aom_dc_128_predictor_4x8_sse2;
+  aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_avx2;
+  aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_avx2;
+  aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_avx2;
+  aom_dc_128_predictor_8x16 = aom_dc_128_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_8x16 = aom_dc_128_predictor_8x16_sse2;
+  aom_dc_128_predictor_8x32 = aom_dc_128_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_8x32 = aom_dc_128_predictor_8x32_sse2;
+  aom_dc_128_predictor_8x4 = aom_dc_128_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_8x4 = aom_dc_128_predictor_8x4_sse2;
+  aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_128_predictor_8x8 = aom_dc_128_predictor_8x8_sse2;
+  aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x16 = aom_dc_left_predictor_16x16_sse2;
+  aom_dc_left_predictor_16x32 = aom_dc_left_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x32 = aom_dc_left_predictor_16x32_sse2;
+  aom_dc_left_predictor_16x4 = aom_dc_left_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x4 = aom_dc_left_predictor_16x4_sse2;
+  aom_dc_left_predictor_16x64 = aom_dc_left_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x64 = aom_dc_left_predictor_16x64_sse2;
+  aom_dc_left_predictor_16x8 = aom_dc_left_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_16x8 = aom_dc_left_predictor_16x8_sse2;
+  aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_avx2;
+  aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_avx2;
+  aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_avx2;
+  aom_dc_left_predictor_32x8 = aom_dc_left_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_32x8 = aom_dc_left_predictor_32x8_sse2;
+  aom_dc_left_predictor_4x16 = aom_dc_left_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_4x16 = aom_dc_left_predictor_4x16_sse2;
+  aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_4x4 = aom_dc_left_predictor_4x4_sse2;
+  aom_dc_left_predictor_4x8 = aom_dc_left_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_4x8 = aom_dc_left_predictor_4x8_sse2;
+  aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_avx2;
+  aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_avx2;
+  aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_avx2;
+  aom_dc_left_predictor_8x16 = aom_dc_left_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_8x16 = aom_dc_left_predictor_8x16_sse2;
+  aom_dc_left_predictor_8x32 = aom_dc_left_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_8x32 = aom_dc_left_predictor_8x32_sse2;
+  aom_dc_left_predictor_8x4 = aom_dc_left_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_8x4 = aom_dc_left_predictor_8x4_sse2;
+  aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_left_predictor_8x8 = aom_dc_left_predictor_8x8_sse2;
+  aom_dc_predictor_16x16 = aom_dc_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x16 = aom_dc_predictor_16x16_sse2;
+  aom_dc_predictor_16x32 = aom_dc_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x32 = aom_dc_predictor_16x32_sse2;
+  aom_dc_predictor_16x4 = aom_dc_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x4 = aom_dc_predictor_16x4_sse2;
+  aom_dc_predictor_16x64 = aom_dc_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x64 = aom_dc_predictor_16x64_sse2;
+  aom_dc_predictor_16x8 = aom_dc_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_16x8 = aom_dc_predictor_16x8_sse2;
+  aom_dc_predictor_32x16 = aom_dc_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_32x16 = aom_dc_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x16 = aom_dc_predictor_32x16_avx2;
+  aom_dc_predictor_32x32 = aom_dc_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_32x32 = aom_dc_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x32 = aom_dc_predictor_32x32_avx2;
+  aom_dc_predictor_32x64 = aom_dc_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_32x64 = aom_dc_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x64 = aom_dc_predictor_32x64_avx2;
+  aom_dc_predictor_32x8 = aom_dc_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_32x8 = aom_dc_predictor_32x8_sse2;
+  aom_dc_predictor_4x16 = aom_dc_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_4x16 = aom_dc_predictor_4x16_sse2;
+  aom_dc_predictor_4x4 = aom_dc_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_4x4 = aom_dc_predictor_4x4_sse2;
+  aom_dc_predictor_4x8 = aom_dc_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_4x8 = aom_dc_predictor_4x8_sse2;
+  aom_dc_predictor_64x16 = aom_dc_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_64x16 = aom_dc_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x16 = aom_dc_predictor_64x16_avx2;
+  aom_dc_predictor_64x32 = aom_dc_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_64x32 = aom_dc_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x32 = aom_dc_predictor_64x32_avx2;
+  aom_dc_predictor_64x64 = aom_dc_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_64x64 = aom_dc_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x64 = aom_dc_predictor_64x64_avx2;
+  aom_dc_predictor_8x16 = aom_dc_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_8x16 = aom_dc_predictor_8x16_sse2;
+  aom_dc_predictor_8x32 = aom_dc_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_8x32 = aom_dc_predictor_8x32_sse2;
+  aom_dc_predictor_8x4 = aom_dc_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_8x4 = aom_dc_predictor_8x4_sse2;
+  aom_dc_predictor_8x8 = aom_dc_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_predictor_8x8 = aom_dc_predictor_8x8_sse2;
+  aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x16 = aom_dc_top_predictor_16x16_sse2;
+  aom_dc_top_predictor_16x32 = aom_dc_top_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x32 = aom_dc_top_predictor_16x32_sse2;
+  aom_dc_top_predictor_16x4 = aom_dc_top_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x4 = aom_dc_top_predictor_16x4_sse2;
+  aom_dc_top_predictor_16x64 = aom_dc_top_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x64 = aom_dc_top_predictor_16x64_sse2;
+  aom_dc_top_predictor_16x8 = aom_dc_top_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_16x8 = aom_dc_top_predictor_16x8_sse2;
+  aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_avx2;
+  aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_avx2;
+  aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_avx2;
+  aom_dc_top_predictor_32x8 = aom_dc_top_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_32x8 = aom_dc_top_predictor_32x8_sse2;
+  aom_dc_top_predictor_4x16 = aom_dc_top_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_4x16 = aom_dc_top_predictor_4x16_sse2;
+  aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_4x4 = aom_dc_top_predictor_4x4_sse2;
+  aom_dc_top_predictor_4x8 = aom_dc_top_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_4x8 = aom_dc_top_predictor_4x8_sse2;
+  aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_avx2;
+  aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_avx2;
+  aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_avx2;
+  aom_dc_top_predictor_8x16 = aom_dc_top_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_8x16 = aom_dc_top_predictor_8x16_sse2;
+  aom_dc_top_predictor_8x32 = aom_dc_top_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_8x32 = aom_dc_top_predictor_8x32_sse2;
+  aom_dc_top_predictor_8x4 = aom_dc_top_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_8x4 = aom_dc_top_predictor_8x4_sse2;
+  aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_dc_top_predictor_8x8 = aom_dc_top_predictor_8x8_sse2;
+  aom_h_predictor_16x16 = aom_h_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x16 = aom_h_predictor_16x16_sse2;
+  aom_h_predictor_16x32 = aom_h_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x32 = aom_h_predictor_16x32_sse2;
+  aom_h_predictor_16x4 = aom_h_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x4 = aom_h_predictor_16x4_sse2;
+  aom_h_predictor_16x64 = aom_h_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x64 = aom_h_predictor_16x64_sse2;
+  aom_h_predictor_16x8 = aom_h_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_16x8 = aom_h_predictor_16x8_sse2;
+  aom_h_predictor_32x16 = aom_h_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_32x16 = aom_h_predictor_32x16_sse2;
+  aom_h_predictor_32x32 = aom_h_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_32x32 = aom_h_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_h_predictor_32x32 = aom_h_predictor_32x32_avx2;
+  aom_h_predictor_32x64 = aom_h_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_32x64 = aom_h_predictor_32x64_sse2;
+  aom_h_predictor_32x8 = aom_h_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_32x8 = aom_h_predictor_32x8_sse2;
+  aom_h_predictor_4x16 = aom_h_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_4x16 = aom_h_predictor_4x16_sse2;
+  aom_h_predictor_4x4 = aom_h_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_4x4 = aom_h_predictor_4x4_sse2;
+  aom_h_predictor_4x8 = aom_h_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_4x8 = aom_h_predictor_4x8_sse2;
+  aom_h_predictor_64x16 = aom_h_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_64x16 = aom_h_predictor_64x16_sse2;
+  aom_h_predictor_64x32 = aom_h_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_64x32 = aom_h_predictor_64x32_sse2;
+  aom_h_predictor_64x64 = aom_h_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_64x64 = aom_h_predictor_64x64_sse2;
+  aom_h_predictor_8x16 = aom_h_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_8x16 = aom_h_predictor_8x16_sse2;
+  aom_h_predictor_8x32 = aom_h_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_8x32 = aom_h_predictor_8x32_sse2;
+  aom_h_predictor_8x4 = aom_h_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_8x4 = aom_h_predictor_8x4_sse2;
+  aom_h_predictor_8x8 = aom_h_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_h_predictor_8x8 = aom_h_predictor_8x8_sse2;
+  aom_highbd_blend_a64_hmask = aom_highbd_blend_a64_hmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_hmask = aom_highbd_blend_a64_hmask_sse4_1;
+  aom_highbd_blend_a64_mask = aom_highbd_blend_a64_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_mask = aom_highbd_blend_a64_mask_sse4_1;
+  aom_highbd_blend_a64_vmask = aom_highbd_blend_a64_vmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_vmask = aom_highbd_blend_a64_vmask_sse4_1;
+  aom_highbd_convolve8_horiz = aom_highbd_convolve8_horiz_c;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve8_horiz = aom_highbd_convolve8_horiz_avx2;
+  aom_highbd_convolve8_vert = aom_highbd_convolve8_vert_c;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve8_vert = aom_highbd_convolve8_vert_avx2;
+  aom_highbd_convolve_copy = aom_highbd_convolve_copy_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_convolve_copy = aom_highbd_convolve_copy_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve_copy = aom_highbd_convolve_copy_avx2;
+  aom_highbd_dc_128_predictor_16x16 = aom_highbd_dc_128_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_16x16 = aom_highbd_dc_128_predictor_16x16_sse2;
+  aom_highbd_dc_128_predictor_16x32 = aom_highbd_dc_128_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_16x32 = aom_highbd_dc_128_predictor_16x32_sse2;
+  aom_highbd_dc_128_predictor_16x8 = aom_highbd_dc_128_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_16x8 = aom_highbd_dc_128_predictor_16x8_sse2;
+  aom_highbd_dc_128_predictor_32x16 = aom_highbd_dc_128_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_32x16 = aom_highbd_dc_128_predictor_32x16_sse2;
+  aom_highbd_dc_128_predictor_32x32 = aom_highbd_dc_128_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_32x32 = aom_highbd_dc_128_predictor_32x32_sse2;
+  aom_highbd_dc_128_predictor_4x4 = aom_highbd_dc_128_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_4x4 = aom_highbd_dc_128_predictor_4x4_sse2;
+  aom_highbd_dc_128_predictor_4x8 = aom_highbd_dc_128_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_4x8 = aom_highbd_dc_128_predictor_4x8_sse2;
+  aom_highbd_dc_128_predictor_8x16 = aom_highbd_dc_128_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_8x16 = aom_highbd_dc_128_predictor_8x16_sse2;
+  aom_highbd_dc_128_predictor_8x4 = aom_highbd_dc_128_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_8x4 = aom_highbd_dc_128_predictor_8x4_sse2;
+  aom_highbd_dc_128_predictor_8x8 = aom_highbd_dc_128_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_128_predictor_8x8 = aom_highbd_dc_128_predictor_8x8_sse2;
+  aom_highbd_dc_left_predictor_16x16 = aom_highbd_dc_left_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_16x16 =
+        aom_highbd_dc_left_predictor_16x16_sse2;
+  aom_highbd_dc_left_predictor_16x32 = aom_highbd_dc_left_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_16x32 =
+        aom_highbd_dc_left_predictor_16x32_sse2;
+  aom_highbd_dc_left_predictor_16x8 = aom_highbd_dc_left_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_16x8 = aom_highbd_dc_left_predictor_16x8_sse2;
+  aom_highbd_dc_left_predictor_32x16 = aom_highbd_dc_left_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_32x16 =
+        aom_highbd_dc_left_predictor_32x16_sse2;
+  aom_highbd_dc_left_predictor_32x32 = aom_highbd_dc_left_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_32x32 =
+        aom_highbd_dc_left_predictor_32x32_sse2;
+  aom_highbd_dc_left_predictor_4x4 = aom_highbd_dc_left_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_4x4 = aom_highbd_dc_left_predictor_4x4_sse2;
+  aom_highbd_dc_left_predictor_4x8 = aom_highbd_dc_left_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_4x8 = aom_highbd_dc_left_predictor_4x8_sse2;
+  aom_highbd_dc_left_predictor_8x16 = aom_highbd_dc_left_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_8x16 = aom_highbd_dc_left_predictor_8x16_sse2;
+  aom_highbd_dc_left_predictor_8x4 = aom_highbd_dc_left_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_8x4 = aom_highbd_dc_left_predictor_8x4_sse2;
+  aom_highbd_dc_left_predictor_8x8 = aom_highbd_dc_left_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_left_predictor_8x8 = aom_highbd_dc_left_predictor_8x8_sse2;
+  aom_highbd_dc_predictor_16x16 = aom_highbd_dc_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_16x16 = aom_highbd_dc_predictor_16x16_sse2;
+  aom_highbd_dc_predictor_16x32 = aom_highbd_dc_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_16x32 = aom_highbd_dc_predictor_16x32_sse2;
+  aom_highbd_dc_predictor_16x8 = aom_highbd_dc_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_16x8 = aom_highbd_dc_predictor_16x8_sse2;
+  aom_highbd_dc_predictor_32x16 = aom_highbd_dc_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_32x16 = aom_highbd_dc_predictor_32x16_sse2;
+  aom_highbd_dc_predictor_32x32 = aom_highbd_dc_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_32x32 = aom_highbd_dc_predictor_32x32_sse2;
+  aom_highbd_dc_predictor_4x4 = aom_highbd_dc_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_4x4 = aom_highbd_dc_predictor_4x4_sse2;
+  aom_highbd_dc_predictor_4x8 = aom_highbd_dc_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_4x8 = aom_highbd_dc_predictor_4x8_sse2;
+  aom_highbd_dc_predictor_8x16 = aom_highbd_dc_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_8x16 = aom_highbd_dc_predictor_8x16_sse2;
+  aom_highbd_dc_predictor_8x4 = aom_highbd_dc_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_8x4 = aom_highbd_dc_predictor_8x4_sse2;
+  aom_highbd_dc_predictor_8x8 = aom_highbd_dc_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_predictor_8x8 = aom_highbd_dc_predictor_8x8_sse2;
+  aom_highbd_dc_top_predictor_16x16 = aom_highbd_dc_top_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_16x16 = aom_highbd_dc_top_predictor_16x16_sse2;
+  aom_highbd_dc_top_predictor_16x32 = aom_highbd_dc_top_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_16x32 = aom_highbd_dc_top_predictor_16x32_sse2;
+  aom_highbd_dc_top_predictor_16x8 = aom_highbd_dc_top_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_16x8 = aom_highbd_dc_top_predictor_16x8_sse2;
+  aom_highbd_dc_top_predictor_32x16 = aom_highbd_dc_top_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_32x16 = aom_highbd_dc_top_predictor_32x16_sse2;
+  aom_highbd_dc_top_predictor_32x32 = aom_highbd_dc_top_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_32x32 = aom_highbd_dc_top_predictor_32x32_sse2;
+  aom_highbd_dc_top_predictor_4x4 = aom_highbd_dc_top_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_4x4 = aom_highbd_dc_top_predictor_4x4_sse2;
+  aom_highbd_dc_top_predictor_4x8 = aom_highbd_dc_top_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_4x8 = aom_highbd_dc_top_predictor_4x8_sse2;
+  aom_highbd_dc_top_predictor_8x16 = aom_highbd_dc_top_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_8x16 = aom_highbd_dc_top_predictor_8x16_sse2;
+  aom_highbd_dc_top_predictor_8x4 = aom_highbd_dc_top_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_8x4 = aom_highbd_dc_top_predictor_8x4_sse2;
+  aom_highbd_dc_top_predictor_8x8 = aom_highbd_dc_top_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_dc_top_predictor_8x8 = aom_highbd_dc_top_predictor_8x8_sse2;
+  aom_highbd_h_predictor_16x16 = aom_highbd_h_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_16x16 = aom_highbd_h_predictor_16x16_sse2;
+  aom_highbd_h_predictor_16x32 = aom_highbd_h_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_16x32 = aom_highbd_h_predictor_16x32_sse2;
+  aom_highbd_h_predictor_16x8 = aom_highbd_h_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_16x8 = aom_highbd_h_predictor_16x8_sse2;
+  aom_highbd_h_predictor_32x16 = aom_highbd_h_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_32x16 = aom_highbd_h_predictor_32x16_sse2;
+  aom_highbd_h_predictor_32x32 = aom_highbd_h_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_32x32 = aom_highbd_h_predictor_32x32_sse2;
+  aom_highbd_h_predictor_4x4 = aom_highbd_h_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_4x4 = aom_highbd_h_predictor_4x4_sse2;
+  aom_highbd_h_predictor_4x8 = aom_highbd_h_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_4x8 = aom_highbd_h_predictor_4x8_sse2;
+  aom_highbd_h_predictor_8x16 = aom_highbd_h_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_8x16 = aom_highbd_h_predictor_8x16_sse2;
+  aom_highbd_h_predictor_8x4 = aom_highbd_h_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_8x4 = aom_highbd_h_predictor_8x4_sse2;
+  aom_highbd_h_predictor_8x8 = aom_highbd_h_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_h_predictor_8x8 = aom_highbd_h_predictor_8x8_sse2;
+  aom_highbd_lpf_horizontal_14 = aom_highbd_lpf_horizontal_14_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_14 = aom_highbd_lpf_horizontal_14_sse2;
+  aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_avx2;
+  aom_highbd_lpf_horizontal_4 = aom_highbd_lpf_horizontal_4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_4 = aom_highbd_lpf_horizontal_4_sse2;
+  aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_avx2;
+  aom_highbd_lpf_horizontal_6 = aom_highbd_lpf_horizontal_6_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_6 = aom_highbd_lpf_horizontal_6_sse2;
+  aom_highbd_lpf_horizontal_6_dual = aom_highbd_lpf_horizontal_6_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_6_dual = aom_highbd_lpf_horizontal_6_dual_sse2;
+  aom_highbd_lpf_horizontal_8 = aom_highbd_lpf_horizontal_8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_8 = aom_highbd_lpf_horizontal_8_sse2;
+  aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_avx2;
+  aom_highbd_lpf_vertical_14 = aom_highbd_lpf_vertical_14_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_14 = aom_highbd_lpf_vertical_14_sse2;
+  aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_avx2;
+  aom_highbd_lpf_vertical_4 = aom_highbd_lpf_vertical_4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_4 = aom_highbd_lpf_vertical_4_sse2;
+  aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_avx2;
+  aom_highbd_lpf_vertical_6 = aom_highbd_lpf_vertical_6_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_6 = aom_highbd_lpf_vertical_6_sse2;
+  aom_highbd_lpf_vertical_6_dual = aom_highbd_lpf_vertical_6_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_6_dual = aom_highbd_lpf_vertical_6_dual_sse2;
+  aom_highbd_lpf_vertical_8 = aom_highbd_lpf_vertical_8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_8 = aom_highbd_lpf_vertical_8_sse2;
+  aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_avx2;
+  aom_highbd_v_predictor_16x16 = aom_highbd_v_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_16x16 = aom_highbd_v_predictor_16x16_sse2;
+  aom_highbd_v_predictor_16x32 = aom_highbd_v_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_16x32 = aom_highbd_v_predictor_16x32_sse2;
+  aom_highbd_v_predictor_16x8 = aom_highbd_v_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_16x8 = aom_highbd_v_predictor_16x8_sse2;
+  aom_highbd_v_predictor_32x16 = aom_highbd_v_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_32x16 = aom_highbd_v_predictor_32x16_sse2;
+  aom_highbd_v_predictor_32x32 = aom_highbd_v_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_32x32 = aom_highbd_v_predictor_32x32_sse2;
+  aom_highbd_v_predictor_4x4 = aom_highbd_v_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_4x4 = aom_highbd_v_predictor_4x4_sse2;
+  aom_highbd_v_predictor_4x8 = aom_highbd_v_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_4x8 = aom_highbd_v_predictor_4x8_sse2;
+  aom_highbd_v_predictor_8x16 = aom_highbd_v_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_8x16 = aom_highbd_v_predictor_8x16_sse2;
+  aom_highbd_v_predictor_8x4 = aom_highbd_v_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_8x4 = aom_highbd_v_predictor_8x4_sse2;
+  aom_highbd_v_predictor_8x8 = aom_highbd_v_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_highbd_v_predictor_8x8 = aom_highbd_v_predictor_8x8_sse2;
+  aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_sse4_1;
+  aom_lpf_horizontal_14 = aom_lpf_horizontal_14_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_14 = aom_lpf_horizontal_14_sse2;
+  aom_lpf_horizontal_14_dual = aom_lpf_horizontal_14_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_14_dual = aom_lpf_horizontal_14_dual_sse2;
+  aom_lpf_horizontal_4 = aom_lpf_horizontal_4_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_4 = aom_lpf_horizontal_4_sse2;
+  aom_lpf_horizontal_4_dual = aom_lpf_horizontal_4_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_4_dual = aom_lpf_horizontal_4_dual_sse2;
+  aom_lpf_horizontal_6 = aom_lpf_horizontal_6_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_6 = aom_lpf_horizontal_6_sse2;
+  aom_lpf_horizontal_6_dual = aom_lpf_horizontal_6_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_6_dual = aom_lpf_horizontal_6_dual_sse2;
+  aom_lpf_horizontal_8 = aom_lpf_horizontal_8_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_8 = aom_lpf_horizontal_8_sse2;
+  aom_lpf_horizontal_8_dual = aom_lpf_horizontal_8_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_horizontal_8_dual = aom_lpf_horizontal_8_dual_sse2;
+  aom_lpf_vertical_14 = aom_lpf_vertical_14_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_14 = aom_lpf_vertical_14_sse2;
+  aom_lpf_vertical_14_dual = aom_lpf_vertical_14_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_14_dual = aom_lpf_vertical_14_dual_sse2;
+  aom_lpf_vertical_4 = aom_lpf_vertical_4_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_4 = aom_lpf_vertical_4_sse2;
+  aom_lpf_vertical_4_dual = aom_lpf_vertical_4_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_4_dual = aom_lpf_vertical_4_dual_sse2;
+  aom_lpf_vertical_6 = aom_lpf_vertical_6_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_6 = aom_lpf_vertical_6_sse2;
+  aom_lpf_vertical_6_dual = aom_lpf_vertical_6_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_6_dual = aom_lpf_vertical_6_dual_sse2;
+  aom_lpf_vertical_8 = aom_lpf_vertical_8_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_8 = aom_lpf_vertical_8_sse2;
+  aom_lpf_vertical_8_dual = aom_lpf_vertical_8_dual_c;
+  if (flags & HAS_SSE2)
+    aom_lpf_vertical_8_dual = aom_lpf_vertical_8_dual_sse2;
+  aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_avx2;
+  aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_avx2;
+  aom_paeth_predictor_16x4 = aom_paeth_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x4 = aom_paeth_predictor_16x4_ssse3;
+  aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_avx2;
+  aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_avx2;
+  aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_avx2;
+  aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_avx2;
+  aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_avx2;
+  aom_paeth_predictor_32x8 = aom_paeth_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x8 = aom_paeth_predictor_32x8_ssse3;
+  aom_paeth_predictor_4x16 = aom_paeth_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x16 = aom_paeth_predictor_4x16_ssse3;
+  aom_paeth_predictor_4x4 = aom_paeth_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x4 = aom_paeth_predictor_4x4_ssse3;
+  aom_paeth_predictor_4x8 = aom_paeth_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x8 = aom_paeth_predictor_4x8_ssse3;
+  aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_avx2;
+  aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_avx2;
+  aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_avx2;
+  aom_paeth_predictor_8x16 = aom_paeth_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x16 = aom_paeth_predictor_8x16_ssse3;
+  aom_paeth_predictor_8x32 = aom_paeth_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x32 = aom_paeth_predictor_8x32_ssse3;
+  aom_paeth_predictor_8x4 = aom_paeth_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x4 = aom_paeth_predictor_8x4_ssse3;
+  aom_paeth_predictor_8x8 = aom_paeth_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x8 = aom_paeth_predictor_8x8_ssse3;
+  aom_smooth_h_predictor_16x16 = aom_smooth_h_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x16 = aom_smooth_h_predictor_16x16_ssse3;
+  aom_smooth_h_predictor_16x32 = aom_smooth_h_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x32 = aom_smooth_h_predictor_16x32_ssse3;
+  aom_smooth_h_predictor_16x4 = aom_smooth_h_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x4 = aom_smooth_h_predictor_16x4_ssse3;
+  aom_smooth_h_predictor_16x64 = aom_smooth_h_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x64 = aom_smooth_h_predictor_16x64_ssse3;
+  aom_smooth_h_predictor_16x8 = aom_smooth_h_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x8 = aom_smooth_h_predictor_16x8_ssse3;
+  aom_smooth_h_predictor_32x16 = aom_smooth_h_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x16 = aom_smooth_h_predictor_32x16_ssse3;
+  aom_smooth_h_predictor_32x32 = aom_smooth_h_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x32 = aom_smooth_h_predictor_32x32_ssse3;
+  aom_smooth_h_predictor_32x64 = aom_smooth_h_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x64 = aom_smooth_h_predictor_32x64_ssse3;
+  aom_smooth_h_predictor_32x8 = aom_smooth_h_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x8 = aom_smooth_h_predictor_32x8_ssse3;
+  aom_smooth_h_predictor_4x16 = aom_smooth_h_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x16 = aom_smooth_h_predictor_4x16_ssse3;
+  aom_smooth_h_predictor_4x4 = aom_smooth_h_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x4 = aom_smooth_h_predictor_4x4_ssse3;
+  aom_smooth_h_predictor_4x8 = aom_smooth_h_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x8 = aom_smooth_h_predictor_4x8_ssse3;
+  aom_smooth_h_predictor_64x16 = aom_smooth_h_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x16 = aom_smooth_h_predictor_64x16_ssse3;
+  aom_smooth_h_predictor_64x32 = aom_smooth_h_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x32 = aom_smooth_h_predictor_64x32_ssse3;
+  aom_smooth_h_predictor_64x64 = aom_smooth_h_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x64 = aom_smooth_h_predictor_64x64_ssse3;
+  aom_smooth_h_predictor_8x16 = aom_smooth_h_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x16 = aom_smooth_h_predictor_8x16_ssse3;
+  aom_smooth_h_predictor_8x32 = aom_smooth_h_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x32 = aom_smooth_h_predictor_8x32_ssse3;
+  aom_smooth_h_predictor_8x4 = aom_smooth_h_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x4 = aom_smooth_h_predictor_8x4_ssse3;
+  aom_smooth_h_predictor_8x8 = aom_smooth_h_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x8 = aom_smooth_h_predictor_8x8_ssse3;
+  aom_smooth_predictor_16x16 = aom_smooth_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x16 = aom_smooth_predictor_16x16_ssse3;
+  aom_smooth_predictor_16x32 = aom_smooth_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x32 = aom_smooth_predictor_16x32_ssse3;
+  aom_smooth_predictor_16x4 = aom_smooth_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x4 = aom_smooth_predictor_16x4_ssse3;
+  aom_smooth_predictor_16x64 = aom_smooth_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x64 = aom_smooth_predictor_16x64_ssse3;
+  aom_smooth_predictor_16x8 = aom_smooth_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x8 = aom_smooth_predictor_16x8_ssse3;
+  aom_smooth_predictor_32x16 = aom_smooth_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x16 = aom_smooth_predictor_32x16_ssse3;
+  aom_smooth_predictor_32x32 = aom_smooth_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x32 = aom_smooth_predictor_32x32_ssse3;
+  aom_smooth_predictor_32x64 = aom_smooth_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x64 = aom_smooth_predictor_32x64_ssse3;
+  aom_smooth_predictor_32x8 = aom_smooth_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x8 = aom_smooth_predictor_32x8_ssse3;
+  aom_smooth_predictor_4x16 = aom_smooth_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x16 = aom_smooth_predictor_4x16_ssse3;
+  aom_smooth_predictor_4x4 = aom_smooth_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x4 = aom_smooth_predictor_4x4_ssse3;
+  aom_smooth_predictor_4x8 = aom_smooth_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x8 = aom_smooth_predictor_4x8_ssse3;
+  aom_smooth_predictor_64x16 = aom_smooth_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x16 = aom_smooth_predictor_64x16_ssse3;
+  aom_smooth_predictor_64x32 = aom_smooth_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x32 = aom_smooth_predictor_64x32_ssse3;
+  aom_smooth_predictor_64x64 = aom_smooth_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x64 = aom_smooth_predictor_64x64_ssse3;
+  aom_smooth_predictor_8x16 = aom_smooth_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x16 = aom_smooth_predictor_8x16_ssse3;
+  aom_smooth_predictor_8x32 = aom_smooth_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x32 = aom_smooth_predictor_8x32_ssse3;
+  aom_smooth_predictor_8x4 = aom_smooth_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x4 = aom_smooth_predictor_8x4_ssse3;
+  aom_smooth_predictor_8x8 = aom_smooth_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x8 = aom_smooth_predictor_8x8_ssse3;
+  aom_smooth_v_predictor_16x16 = aom_smooth_v_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x16 = aom_smooth_v_predictor_16x16_ssse3;
+  aom_smooth_v_predictor_16x32 = aom_smooth_v_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x32 = aom_smooth_v_predictor_16x32_ssse3;
+  aom_smooth_v_predictor_16x4 = aom_smooth_v_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x4 = aom_smooth_v_predictor_16x4_ssse3;
+  aom_smooth_v_predictor_16x64 = aom_smooth_v_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x64 = aom_smooth_v_predictor_16x64_ssse3;
+  aom_smooth_v_predictor_16x8 = aom_smooth_v_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x8 = aom_smooth_v_predictor_16x8_ssse3;
+  aom_smooth_v_predictor_32x16 = aom_smooth_v_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x16 = aom_smooth_v_predictor_32x16_ssse3;
+  aom_smooth_v_predictor_32x32 = aom_smooth_v_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x32 = aom_smooth_v_predictor_32x32_ssse3;
+  aom_smooth_v_predictor_32x64 = aom_smooth_v_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x64 = aom_smooth_v_predictor_32x64_ssse3;
+  aom_smooth_v_predictor_32x8 = aom_smooth_v_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x8 = aom_smooth_v_predictor_32x8_ssse3;
+  aom_smooth_v_predictor_4x16 = aom_smooth_v_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x16 = aom_smooth_v_predictor_4x16_ssse3;
+  aom_smooth_v_predictor_4x4 = aom_smooth_v_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x4 = aom_smooth_v_predictor_4x4_ssse3;
+  aom_smooth_v_predictor_4x8 = aom_smooth_v_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x8 = aom_smooth_v_predictor_4x8_ssse3;
+  aom_smooth_v_predictor_64x16 = aom_smooth_v_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x16 = aom_smooth_v_predictor_64x16_ssse3;
+  aom_smooth_v_predictor_64x32 = aom_smooth_v_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x32 = aom_smooth_v_predictor_64x32_ssse3;
+  aom_smooth_v_predictor_64x64 = aom_smooth_v_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x64 = aom_smooth_v_predictor_64x64_ssse3;
+  aom_smooth_v_predictor_8x16 = aom_smooth_v_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x16 = aom_smooth_v_predictor_8x16_ssse3;
+  aom_smooth_v_predictor_8x32 = aom_smooth_v_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x32 = aom_smooth_v_predictor_8x32_ssse3;
+  aom_smooth_v_predictor_8x4 = aom_smooth_v_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x4 = aom_smooth_v_predictor_8x4_ssse3;
+  aom_smooth_v_predictor_8x8 = aom_smooth_v_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x8 = aom_smooth_v_predictor_8x8_ssse3;
+  aom_v_predictor_16x16 = aom_v_predictor_16x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x16 = aom_v_predictor_16x16_sse2;
+  aom_v_predictor_16x32 = aom_v_predictor_16x32_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x32 = aom_v_predictor_16x32_sse2;
+  aom_v_predictor_16x4 = aom_v_predictor_16x4_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x4 = aom_v_predictor_16x4_sse2;
+  aom_v_predictor_16x64 = aom_v_predictor_16x64_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x64 = aom_v_predictor_16x64_sse2;
+  aom_v_predictor_16x8 = aom_v_predictor_16x8_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_16x8 = aom_v_predictor_16x8_sse2;
+  aom_v_predictor_32x16 = aom_v_predictor_32x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_32x16 = aom_v_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x16 = aom_v_predictor_32x16_avx2;
+  aom_v_predictor_32x32 = aom_v_predictor_32x32_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_32x32 = aom_v_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x32 = aom_v_predictor_32x32_avx2;
+  aom_v_predictor_32x64 = aom_v_predictor_32x64_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_32x64 = aom_v_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x64 = aom_v_predictor_32x64_avx2;
+  aom_v_predictor_32x8 = aom_v_predictor_32x8_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_32x8 = aom_v_predictor_32x8_sse2;
+  aom_v_predictor_4x16 = aom_v_predictor_4x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_4x16 = aom_v_predictor_4x16_sse2;
+  aom_v_predictor_4x4 = aom_v_predictor_4x4_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_4x4 = aom_v_predictor_4x4_sse2;
+  aom_v_predictor_4x8 = aom_v_predictor_4x8_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_4x8 = aom_v_predictor_4x8_sse2;
+  aom_v_predictor_64x16 = aom_v_predictor_64x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_64x16 = aom_v_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x16 = aom_v_predictor_64x16_avx2;
+  aom_v_predictor_64x32 = aom_v_predictor_64x32_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_64x32 = aom_v_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x32 = aom_v_predictor_64x32_avx2;
+  aom_v_predictor_64x64 = aom_v_predictor_64x64_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_64x64 = aom_v_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x64 = aom_v_predictor_64x64_avx2;
+  aom_v_predictor_8x16 = aom_v_predictor_8x16_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_8x16 = aom_v_predictor_8x16_sse2;
+  aom_v_predictor_8x32 = aom_v_predictor_8x32_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_8x32 = aom_v_predictor_8x32_sse2;
+  aom_v_predictor_8x4 = aom_v_predictor_8x4_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_8x4 = aom_v_predictor_8x4_sse2;
+  aom_v_predictor_8x8 = aom_v_predictor_8x8_c;
+  if (flags & HAS_SSE2)
+    aom_v_predictor_8x8 = aom_v_predictor_8x8_sse2;
+  av1_round_shift_array = av1_round_shift_array_c;
+  if (flags & HAS_SSE4_1)
+    av1_round_shift_array = av1_round_shift_array_sse4_1;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h b/third_party/libaom/source/config/win/ia32/config/aom_scale_rtcd.h
similarity index 71%
copy from third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
copy to third_party/libaom/source/config/win/ia32/config/aom_scale_rtcd.h
index fbf3bde..9fe39d9 100644
--- a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
+++ b/third_party/libaom/source/config/win/ia32/config/aom_scale_rtcd.h
@@ -1,3 +1,4 @@
+// This file is generated. Do not edit.
 #ifndef AOM_SCALE_RTCD_H_
 #define AOM_SCALE_RTCD_H_
 
@@ -13,13 +14,15 @@
 extern "C" {
 #endif
 
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                const int num_planes);
 #define aom_extend_frame_borders aom_extend_frame_borders_c
 
 void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
 #define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
 
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf,
+                                      const int num_planes);
 #define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
 
 void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
@@ -69,7 +72,8 @@
 #define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
 
 void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
+                           struct yv12_buffer_config* dst_bc,
+                           const int num_planes);
 #define aom_yv12_copy_frame aom_yv12_copy_frame_c
 
 void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
@@ -84,9 +88,34 @@
                        struct yv12_buffer_config* dst_ybc);
 #define aom_yv12_copy_y aom_yv12_copy_y_c
 
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                     const int num_planes);
 #define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
 
+void aom_yv12_partial_copy_u_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_u aom_yv12_partial_copy_u_c
+
+void aom_yv12_partial_copy_v_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_v aom_yv12_partial_copy_v_c
+
+void aom_yv12_partial_copy_y_c(const struct yv12_buffer_config* src_ybc,
+                               struct yv12_buffer_config* dst_ybc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_y aom_yv12_partial_copy_y_c
+
 void aom_scale_rtcd(void);
 
 #ifdef RTCD_C
diff --git a/third_party/libaom/source/config/win/ia32/config/av1_rtcd.h b/third_party/libaom/source/config/win/ia32/config/av1_rtcd.h
new file mode 100644
index 0000000..724cd0b68
--- /dev/null
+++ b/third_party/libaom/source/config/win/ia32/config/av1_rtcd.h
@@ -0,0 +1,2225 @@
+// This file is generated. Do not edit.
+#ifndef AV1_RTCD_H_
+#define AV1_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * AV1
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/txfm_common.h"
+#include "av1/common/av1_txfm.h"
+#include "av1/common/common.h"
+#include "av1/common/convolve.h"
+#include "av1/common/enums.h"
+#include "av1/common/filter.h"
+#include "av1/common/odintrin.h"
+#include "av1/common/quant_common.h"
+#include "av1/common/restoration.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct txfm_param;
+struct aom_variance_vtable;
+struct search_site_config;
+struct yv12_buffer_config;
+
+/* Function pointers return by CfL functions */
+typedef void (*cfl_subsample_lbd_fn)(const uint8_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subsample_hbd_fn)(const uint16_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subtract_average_fn)(const uint16_t* src, int16_t* dst);
+
+typedef void (*cfl_predict_lbd_fn)(const int16_t* src,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3);
+
+typedef void (*cfl_predict_hbd_fn)(const int16_t* src,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3,
+                                   int bd);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void apply_selfguided_restoration_c(const uint8_t* dat,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    int eps,
+                                    const int* xqd,
+                                    uint8_t* dst,
+                                    int dst_stride,
+                                    int32_t* tmpbuf,
+                                    int bit_depth,
+                                    int highbd);
+void apply_selfguided_restoration_sse4_1(const uint8_t* dat,
+                                         int width,
+                                         int height,
+                                         int stride,
+                                         int eps,
+                                         const int* xqd,
+                                         uint8_t* dst,
+                                         int dst_stride,
+                                         int32_t* tmpbuf,
+                                         int bit_depth,
+                                         int highbd);
+void apply_selfguided_restoration_avx2(const uint8_t* dat,
+                                       int width,
+                                       int height,
+                                       int stride,
+                                       int eps,
+                                       const int* xqd,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int32_t* tmpbuf,
+                                       int bit_depth,
+                                       int highbd);
+RTCD_EXTERN void (*apply_selfguided_restoration)(const uint8_t* dat,
+                                                 int width,
+                                                 int height,
+                                                 int stride,
+                                                 int eps,
+                                                 const int* xqd,
+                                                 uint8_t* dst,
+                                                 int dst_stride,
+                                                 int32_t* tmpbuf,
+                                                 int bit_depth,
+                                                 int highbd);
+
+void av1_build_compound_diffwtd_mask_c(uint8_t* mask,
+                                       DIFFWTD_MASK_TYPE mask_type,
+                                       const uint8_t* src0,
+                                       int src0_stride,
+                                       const uint8_t* src1,
+                                       int src1_stride,
+                                       int h,
+                                       int w);
+void av1_build_compound_diffwtd_mask_sse4_1(uint8_t* mask,
+                                            DIFFWTD_MASK_TYPE mask_type,
+                                            const uint8_t* src0,
+                                            int src0_stride,
+                                            const uint8_t* src1,
+                                            int src1_stride,
+                                            int h,
+                                            int w);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask)(uint8_t* mask,
+                                                    DIFFWTD_MASK_TYPE mask_type,
+                                                    const uint8_t* src0,
+                                                    int src0_stride,
+                                                    const uint8_t* src1,
+                                                    int src1_stride,
+                                                    int h,
+                                                    int w);
+
+void av1_build_compound_diffwtd_mask_d16_c(uint8_t* mask,
+                                           DIFFWTD_MASK_TYPE mask_type,
+                                           const CONV_BUF_TYPE* src0,
+                                           int src0_stride,
+                                           const CONV_BUF_TYPE* src1,
+                                           int src1_stride,
+                                           int h,
+                                           int w,
+                                           ConvolveParams* conv_params,
+                                           int bd);
+void av1_build_compound_diffwtd_mask_d16_sse4_1(uint8_t* mask,
+                                                DIFFWTD_MASK_TYPE mask_type,
+                                                const CONV_BUF_TYPE* src0,
+                                                int src0_stride,
+                                                const CONV_BUF_TYPE* src1,
+                                                int src1_stride,
+                                                int h,
+                                                int w,
+                                                ConvolveParams* conv_params,
+                                                int bd);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask_d16)(
+    uint8_t* mask,
+    DIFFWTD_MASK_TYPE mask_type,
+    const CONV_BUF_TYPE* src0,
+    int src0_stride,
+    const CONV_BUF_TYPE* src1,
+    int src1_stride,
+    int h,
+    int w,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_build_compound_diffwtd_mask_highbd_c(uint8_t* mask,
+                                              DIFFWTD_MASK_TYPE mask_type,
+                                              const uint8_t* src0,
+                                              int src0_stride,
+                                              const uint8_t* src1,
+                                              int src1_stride,
+                                              int h,
+                                              int w,
+                                              int bd);
+void av1_build_compound_diffwtd_mask_highbd_ssse3(uint8_t* mask,
+                                                  DIFFWTD_MASK_TYPE mask_type,
+                                                  const uint8_t* src0,
+                                                  int src0_stride,
+                                                  const uint8_t* src1,
+                                                  int src1_stride,
+                                                  int h,
+                                                  int w,
+                                                  int bd);
+void av1_build_compound_diffwtd_mask_highbd_avx2(uint8_t* mask,
+                                                 DIFFWTD_MASK_TYPE mask_type,
+                                                 const uint8_t* src0,
+                                                 int src0_stride,
+                                                 const uint8_t* src1,
+                                                 int src1_stride,
+                                                 int h,
+                                                 int w,
+                                                 int bd);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask_highbd)(
+    uint8_t* mask,
+    DIFFWTD_MASK_TYPE mask_type,
+    const uint8_t* src0,
+    int src0_stride,
+    const uint8_t* src1,
+    int src1_stride,
+    int h,
+    int w,
+    int bd);
+
+void av1_convolve_2d_copy_sr_c(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_sse2(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_avx2(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_copy_sr)(const uint8_t* src,
+                                            int src_stride,
+                                            uint8_t* dst,
+                                            int dst_stride,
+                                            int w,
+                                            int h,
+                                            InterpFilterParams* filter_params_x,
+                                            InterpFilterParams* filter_params_y,
+                                            const int subpel_x_q4,
+                                            const int subpel_y_q4,
+                                            ConvolveParams* conv_params);
+
+void av1_convolve_2d_scale_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_qn,
+                             const int x_step_qn,
+                             const int subpel_y_q4,
+                             const int y_step_qn,
+                             ConvolveParams* conv_params);
+void av1_convolve_2d_scale_sse4_1(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_qn,
+                                  const int x_step_qn,
+                                  const int subpel_y_q4,
+                                  const int y_step_qn,
+                                  ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_scale)(const uint8_t* src,
+                                          int src_stride,
+                                          uint8_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          InterpFilterParams* filter_params_x,
+                                          InterpFilterParams* filter_params_y,
+                                          const int subpel_x_qn,
+                                          const int x_step_qn,
+                                          const int subpel_y_q4,
+                                          const int y_step_qn,
+                                          ConvolveParams* conv_params);
+
+void av1_convolve_2d_sr_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_convolve_2d_sr_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_convolve_2d_sr_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_sr)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_convolve_horiz_rs_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             const int16_t* x_filters,
+                             int x0_qn,
+                             int x_step_qn);
+void av1_convolve_horiz_rs_sse4_1(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  const int16_t* x_filters,
+                                  int x0_qn,
+                                  int x_step_qn);
+RTCD_EXTERN void (*av1_convolve_horiz_rs)(const uint8_t* src,
+                                          int src_stride,
+                                          uint8_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          const int16_t* x_filters,
+                                          int x0_qn,
+                                          int x_step_qn);
+
+void av1_convolve_x_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_x_sr_sse2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+void av1_convolve_x_sr_avx2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_x_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_convolve_y_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_y_sr_sse2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+void av1_convolve_y_sr_avx2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_y_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_dr_prediction_z1_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z1 av1_dr_prediction_z1_c
+
+void av1_dr_prediction_z2_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z2 av1_dr_prediction_z2_c
+
+void av1_dr_prediction_z3_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z3 av1_dr_prediction_z3_c
+
+void av1_filter_intra_edge_c(uint8_t* p, int sz, int strength);
+void av1_filter_intra_edge_sse4_1(uint8_t* p, int sz, int strength);
+RTCD_EXTERN void (*av1_filter_intra_edge)(uint8_t* p, int sz, int strength);
+
+void av1_filter_intra_edge_high_c(uint16_t* p, int sz, int strength);
+void av1_filter_intra_edge_high_sse4_1(uint16_t* p, int sz, int strength);
+RTCD_EXTERN void (*av1_filter_intra_edge_high)(uint16_t* p,
+                                               int sz,
+                                               int strength);
+
+void av1_filter_intra_predictor_c(uint8_t* dst,
+                                  ptrdiff_t stride,
+                                  TX_SIZE tx_size,
+                                  const uint8_t* above,
+                                  const uint8_t* left,
+                                  int mode);
+void av1_filter_intra_predictor_sse4_1(uint8_t* dst,
+                                       ptrdiff_t stride,
+                                       TX_SIZE tx_size,
+                                       const uint8_t* above,
+                                       const uint8_t* left,
+                                       int mode);
+RTCD_EXTERN void (*av1_filter_intra_predictor)(uint8_t* dst,
+                                               ptrdiff_t stride,
+                                               TX_SIZE tx_size,
+                                               const uint8_t* above,
+                                               const uint8_t* left,
+                                               int mode);
+
+void av1_highbd_convolve8_c(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h,
+                            int bps);
+#define av1_highbd_convolve8 av1_highbd_convolve8_c
+
+void av1_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+#define av1_highbd_convolve8_horiz av1_highbd_convolve8_horiz_c
+
+void av1_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+#define av1_highbd_convolve8_vert av1_highbd_convolve8_vert_c
+
+void av1_highbd_convolve_2d_copy_sr_c(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_convolve_2d_copy_sr_sse2(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int subpel_y_q4,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+void av1_highbd_convolve_2d_copy_sr_avx2(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int subpel_y_q4,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_copy_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_2d_scale_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int x_step_qn,
+                                    const int subpel_y_q4,
+                                    const int y_step_qn,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_2d_scale_sse4_1(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int x_step_qn,
+                                         const int subpel_y_q4,
+                                         const int y_step_qn,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_scale)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int x_step_qn,
+    const int subpel_y_q4,
+    const int y_step_qn,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_2d_sr_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_convolve_2d_sr_ssse3(const uint16_t* src,
+                                     int src_stride,
+                                     uint16_t* dst,
+                                     int dst_stride,
+                                     int w,
+                                     int h,
+                                     InterpFilterParams* filter_params_x,
+                                     InterpFilterParams* filter_params_y,
+                                     const int subpel_x_q4,
+                                     const int subpel_y_q4,
+                                     ConvolveParams* conv_params,
+                                     int bd);
+void av1_highbd_convolve_2d_sr_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_avg_c(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve_avg av1_highbd_convolve_avg_c
+
+void av1_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define av1_highbd_convolve_copy av1_highbd_convolve_copy_c
+
+void av1_highbd_convolve_horiz_rs_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    const int16_t* x_filters,
+                                    int x0_qn,
+                                    int x_step_qn,
+                                    int bd);
+void av1_highbd_convolve_horiz_rs_sse4_1(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         const int16_t* x_filters,
+                                         int x0_qn,
+                                         int x_step_qn,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_horiz_rs)(const uint16_t* src,
+                                                 int src_stride,
+                                                 uint16_t* dst,
+                                                 int dst_stride,
+                                                 int w,
+                                                 int h,
+                                                 const int16_t* x_filters,
+                                                 int x0_qn,
+                                                 int x_step_qn,
+                                                 int bd);
+
+void av1_highbd_convolve_x_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+void av1_highbd_convolve_x_sr_ssse3(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_x_sr_avx2(const uint16_t* src,
+                                   int src_stride,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params,
+                                   int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_x_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_y_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+void av1_highbd_convolve_y_sr_ssse3(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_y_sr_avx2(const uint16_t* src,
+                                   int src_stride,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params,
+                                   int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_y_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_dr_prediction_z1_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z1 av1_highbd_dr_prediction_z1_c
+
+void av1_highbd_dr_prediction_z2_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z2 av1_highbd_dr_prediction_z2_c
+
+void av1_highbd_dr_prediction_z3_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z3 av1_highbd_dr_prediction_z3_c
+
+void av1_highbd_iwht4x4_16_add_c(const tran_low_t* input,
+                                 uint8_t* dest,
+                                 int dest_stride,
+                                 int bd);
+#define av1_highbd_iwht4x4_16_add av1_highbd_iwht4x4_16_add_c
+
+void av1_highbd_iwht4x4_1_add_c(const tran_low_t* input,
+                                uint8_t* dest,
+                                int dest_stride,
+                                int bd);
+#define av1_highbd_iwht4x4_1_add av1_highbd_iwht4x4_1_add_c
+
+void av1_highbd_jnt_convolve_2d_c(const uint16_t* src,
+                                  int src_stride,
+                                  uint16_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params,
+                                  int bd);
+void av1_highbd_jnt_convolve_2d_sse4_1(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+void av1_highbd_jnt_convolve_2d_avx2(const uint16_t* src,
+                                     int src_stride,
+                                     uint16_t* dst,
+                                     int dst_stride,
+                                     int w,
+                                     int h,
+                                     InterpFilterParams* filter_params_x,
+                                     InterpFilterParams* filter_params_y,
+                                     const int subpel_x_q4,
+                                     const int subpel_y_q4,
+                                     ConvolveParams* conv_params,
+                                     int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_2d)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_2d_copy_c(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+void av1_highbd_jnt_convolve_2d_copy_sse4_1(const uint16_t* src,
+                                            int src_stride,
+                                            uint16_t* dst,
+                                            int dst_stride,
+                                            int w,
+                                            int h,
+                                            InterpFilterParams* filter_params_x,
+                                            InterpFilterParams* filter_params_y,
+                                            const int subpel_x_q4,
+                                            const int subpel_y_q4,
+                                            ConvolveParams* conv_params,
+                                            int bd);
+void av1_highbd_jnt_convolve_2d_copy_avx2(const uint16_t* src,
+                                          int src_stride,
+                                          uint16_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          InterpFilterParams* filter_params_x,
+                                          InterpFilterParams* filter_params_y,
+                                          const int subpel_x_q4,
+                                          const int subpel_y_q4,
+                                          ConvolveParams* conv_params,
+                                          int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_2d_copy)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_x_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_jnt_convolve_x_sse4_1(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_jnt_convolve_x_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_x)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_y_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_jnt_convolve_y_sse4_1(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_jnt_convolve_y_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_y)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_warp_affine_c(const int32_t* mat,
+                              const uint16_t* ref,
+                              int width,
+                              int height,
+                              int stride,
+                              uint16_t* pred,
+                              int p_col,
+                              int p_row,
+                              int p_width,
+                              int p_height,
+                              int p_stride,
+                              int subsampling_x,
+                              int subsampling_y,
+                              int bd,
+                              ConvolveParams* conv_params,
+                              int16_t alpha,
+                              int16_t beta,
+                              int16_t gamma,
+                              int16_t delta);
+void av1_highbd_warp_affine_sse4_1(const int32_t* mat,
+                                   const uint16_t* ref,
+                                   int width,
+                                   int height,
+                                   int stride,
+                                   uint16_t* pred,
+                                   int p_col,
+                                   int p_row,
+                                   int p_width,
+                                   int p_height,
+                                   int p_stride,
+                                   int subsampling_x,
+                                   int subsampling_y,
+                                   int bd,
+                                   ConvolveParams* conv_params,
+                                   int16_t alpha,
+                                   int16_t beta,
+                                   int16_t gamma,
+                                   int16_t delta);
+RTCD_EXTERN void (*av1_highbd_warp_affine)(const int32_t* mat,
+                                           const uint16_t* ref,
+                                           int width,
+                                           int height,
+                                           int stride,
+                                           uint16_t* pred,
+                                           int p_col,
+                                           int p_row,
+                                           int p_width,
+                                           int p_height,
+                                           int p_stride,
+                                           int subsampling_x,
+                                           int subsampling_y,
+                                           int bd,
+                                           ConvolveParams* conv_params,
+                                           int16_t alpha,
+                                           int16_t beta,
+                                           int16_t gamma,
+                                           int16_t delta);
+
+void av1_highbd_wiener_convolve_add_src_c(const uint8_t* src,
+                                          ptrdiff_t src_stride,
+                                          uint8_t* dst,
+                                          ptrdiff_t dst_stride,
+                                          const int16_t* filter_x,
+                                          int x_step_q4,
+                                          const int16_t* filter_y,
+                                          int y_step_q4,
+                                          int w,
+                                          int h,
+                                          const ConvolveParams* conv_params,
+                                          int bps);
+void av1_highbd_wiener_convolve_add_src_ssse3(const uint8_t* src,
+                                              ptrdiff_t src_stride,
+                                              uint8_t* dst,
+                                              ptrdiff_t dst_stride,
+                                              const int16_t* filter_x,
+                                              int x_step_q4,
+                                              const int16_t* filter_y,
+                                              int y_step_q4,
+                                              int w,
+                                              int h,
+                                              const ConvolveParams* conv_params,
+                                              int bps);
+void av1_highbd_wiener_convolve_add_src_avx2(const uint8_t* src,
+                                             ptrdiff_t src_stride,
+                                             uint8_t* dst,
+                                             ptrdiff_t dst_stride,
+                                             const int16_t* filter_x,
+                                             int x_step_q4,
+                                             const int16_t* filter_y,
+                                             int y_step_q4,
+                                             int w,
+                                             int h,
+                                             const ConvolveParams* conv_params,
+                                             int bps);
+RTCD_EXTERN void (*av1_highbd_wiener_convolve_add_src)(
+    const uint8_t* src,
+    ptrdiff_t src_stride,
+    uint8_t* dst,
+    ptrdiff_t dst_stride,
+    const int16_t* filter_x,
+    int x_step_q4,
+    const int16_t* filter_y,
+    int y_step_q4,
+    int w,
+    int h,
+    const ConvolveParams* conv_params,
+    int bps);
+
+void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_16x16_sse4_1(const int32_t* input,
+                                     uint16_t* output,
+                                     int stride,
+                                     TX_TYPE tx_type,
+                                     int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_16x16)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
+
+void av1_inv_txfm2d_add_16x4_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x4 av1_inv_txfm2d_add_16x4_c
+
+void av1_inv_txfm2d_add_16x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x64 av1_inv_txfm2d_add_16x64_c
+
+void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
+
+void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
+
+void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_32x32_avx2(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_32x32)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_32x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x64 av1_inv_txfm2d_add_32x64_c
+
+void av1_inv_txfm2d_add_32x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_32x8 av1_inv_txfm2d_add_32x8_c
+
+void av1_inv_txfm2d_add_4x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_4x16 av1_inv_txfm2d_add_4x16_c
+
+void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+void av1_inv_txfm2d_add_4x4_sse4_1(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_4x4)(const int32_t* input,
+                                           uint16_t* output,
+                                           int stride,
+                                           TX_TYPE tx_type,
+                                           int bd);
+
+void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
+
+void av1_inv_txfm2d_add_64x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x16 av1_inv_txfm2d_add_64x16_c
+
+void av1_inv_txfm2d_add_64x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x32 av1_inv_txfm2d_add_64x32_c
+
+void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_64x64_sse4_1(const int32_t* input,
+                                     uint16_t* output,
+                                     int stride,
+                                     TX_TYPE tx_type,
+                                     int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_64x64)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
+
+void av1_inv_txfm2d_add_8x32_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x32 av1_inv_txfm2d_add_8x32_c
+
+void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
+
+void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+void av1_inv_txfm2d_add_8x8_sse4_1(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_8x8)(const int32_t* input,
+                                           uint16_t* output,
+                                           int stride,
+                                           TX_TYPE tx_type,
+                                           int bd);
+
+void av1_inv_txfm_add_c(const tran_low_t* dqcoeff,
+                        uint8_t* dst,
+                        int stride,
+                        const TxfmParam* txfm_param);
+void av1_inv_txfm_add_ssse3(const tran_low_t* dqcoeff,
+                            uint8_t* dst,
+                            int stride,
+                            const TxfmParam* txfm_param);
+void av1_inv_txfm_add_avx2(const tran_low_t* dqcoeff,
+                           uint8_t* dst,
+                           int stride,
+                           const TxfmParam* txfm_param);
+RTCD_EXTERN void (*av1_inv_txfm_add)(const tran_low_t* dqcoeff,
+                                     uint8_t* dst,
+                                     int stride,
+                                     const TxfmParam* txfm_param);
+
+void av1_jnt_convolve_2d_c(const uint8_t* src,
+                           int src_stride,
+                           uint8_t* dst,
+                           int dst_stride,
+                           int w,
+                           int h,
+                           InterpFilterParams* filter_params_x,
+                           InterpFilterParams* filter_params_y,
+                           const int subpel_x_q4,
+                           const int subpel_y_q4,
+                           ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_ssse3(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_avx2(const uint8_t* src,
+                              int src_stride,
+                              uint8_t* dst,
+                              int dst_stride,
+                              int w,
+                              int h,
+                              InterpFilterParams* filter_params_x,
+                              InterpFilterParams* filter_params_y,
+                              const int subpel_x_q4,
+                              const int subpel_y_q4,
+                              ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d)(const uint8_t* src,
+                                        int src_stride,
+                                        uint8_t* dst,
+                                        int dst_stride,
+                                        int w,
+                                        int h,
+                                        InterpFilterParams* filter_params_x,
+                                        InterpFilterParams* filter_params_y,
+                                        const int subpel_x_q4,
+                                        const int subpel_y_q4,
+                                        ConvolveParams* conv_params);
+
+void av1_jnt_convolve_2d_copy_c(const uint8_t* src,
+                                int src_stride,
+                                uint8_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_sse2(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_avx2(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d_copy)(
+    const uint8_t* src,
+    int src_stride,
+    uint8_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params);
+
+void av1_jnt_convolve_x_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_x_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_jnt_convolve_x_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_x)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_jnt_convolve_y_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_y_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_jnt_convolve_y_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_y)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_selfguided_restoration_c(const uint8_t* dgd8,
+                                  int width,
+                                  int height,
+                                  int dgd_stride,
+                                  int32_t* flt0,
+                                  int32_t* flt1,
+                                  int flt_stride,
+                                  int sgr_params_idx,
+                                  int bit_depth,
+                                  int highbd);
+void av1_selfguided_restoration_sse4_1(const uint8_t* dgd8,
+                                       int width,
+                                       int height,
+                                       int dgd_stride,
+                                       int32_t* flt0,
+                                       int32_t* flt1,
+                                       int flt_stride,
+                                       int sgr_params_idx,
+                                       int bit_depth,
+                                       int highbd);
+void av1_selfguided_restoration_avx2(const uint8_t* dgd8,
+                                     int width,
+                                     int height,
+                                     int dgd_stride,
+                                     int32_t* flt0,
+                                     int32_t* flt1,
+                                     int flt_stride,
+                                     int sgr_params_idx,
+                                     int bit_depth,
+                                     int highbd);
+RTCD_EXTERN void (*av1_selfguided_restoration)(const uint8_t* dgd8,
+                                               int width,
+                                               int height,
+                                               int dgd_stride,
+                                               int32_t* flt0,
+                                               int32_t* flt1,
+                                               int flt_stride,
+                                               int sgr_params_idx,
+                                               int bit_depth,
+                                               int highbd);
+
+void av1_upsample_intra_edge_c(uint8_t* p, int sz);
+void av1_upsample_intra_edge_sse4_1(uint8_t* p, int sz);
+RTCD_EXTERN void (*av1_upsample_intra_edge)(uint8_t* p, int sz);
+
+void av1_upsample_intra_edge_high_c(uint16_t* p, int sz, int bd);
+void av1_upsample_intra_edge_high_sse4_1(uint16_t* p, int sz, int bd);
+RTCD_EXTERN void (*av1_upsample_intra_edge_high)(uint16_t* p, int sz, int bd);
+
+void av1_warp_affine_c(const int32_t* mat,
+                       const uint8_t* ref,
+                       int width,
+                       int height,
+                       int stride,
+                       uint8_t* pred,
+                       int p_col,
+                       int p_row,
+                       int p_width,
+                       int p_height,
+                       int p_stride,
+                       int subsampling_x,
+                       int subsampling_y,
+                       ConvolveParams* conv_params,
+                       int16_t alpha,
+                       int16_t beta,
+                       int16_t gamma,
+                       int16_t delta);
+void av1_warp_affine_sse4_1(const int32_t* mat,
+                            const uint8_t* ref,
+                            int width,
+                            int height,
+                            int stride,
+                            uint8_t* pred,
+                            int p_col,
+                            int p_row,
+                            int p_width,
+                            int p_height,
+                            int p_stride,
+                            int subsampling_x,
+                            int subsampling_y,
+                            ConvolveParams* conv_params,
+                            int16_t alpha,
+                            int16_t beta,
+                            int16_t gamma,
+                            int16_t delta);
+RTCD_EXTERN void (*av1_warp_affine)(const int32_t* mat,
+                                    const uint8_t* ref,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    uint8_t* pred,
+                                    int p_col,
+                                    int p_row,
+                                    int p_width,
+                                    int p_height,
+                                    int p_stride,
+                                    int subsampling_x,
+                                    int subsampling_y,
+                                    ConvolveParams* conv_params,
+                                    int16_t alpha,
+                                    int16_t beta,
+                                    int16_t gamma,
+                                    int16_t delta);
+
+void av1_wiener_convolve_add_src_c(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_sse2(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_avx2(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_wiener_convolve_add_src)(
+    const uint8_t* src,
+    ptrdiff_t src_stride,
+    uint8_t* dst,
+    ptrdiff_t dst_stride,
+    const int16_t* filter_x,
+    int x_step_q4,
+    const int16_t* filter_y,
+    int y_step_q4,
+    int w,
+    int h,
+    const ConvolveParams* conv_params);
+
+void cdef_filter_block_c(uint8_t* dst8,
+                         uint16_t* dst16,
+                         int dstride,
+                         const uint16_t* in,
+                         int pri_strength,
+                         int sec_strength,
+                         int dir,
+                         int pri_damping,
+                         int sec_damping,
+                         int bsize,
+                         int max,
+                         int coeff_shift);
+void cdef_filter_block_sse2(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+void cdef_filter_block_ssse3(uint8_t* dst8,
+                             uint16_t* dst16,
+                             int dstride,
+                             const uint16_t* in,
+                             int pri_strength,
+                             int sec_strength,
+                             int dir,
+                             int pri_damping,
+                             int sec_damping,
+                             int bsize,
+                             int max,
+                             int coeff_shift);
+void cdef_filter_block_sse4_1(uint8_t* dst8,
+                              uint16_t* dst16,
+                              int dstride,
+                              const uint16_t* in,
+                              int pri_strength,
+                              int sec_strength,
+                              int dir,
+                              int pri_damping,
+                              int sec_damping,
+                              int bsize,
+                              int max,
+                              int coeff_shift);
+void cdef_filter_block_avx2(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+RTCD_EXTERN void (*cdef_filter_block)(uint8_t* dst8,
+                                      uint16_t* dst16,
+                                      int dstride,
+                                      const uint16_t* in,
+                                      int pri_strength,
+                                      int sec_strength,
+                                      int dir,
+                                      int pri_damping,
+                                      int sec_damping,
+                                      int bsize,
+                                      int max,
+                                      int coeff_shift);
+
+int cdef_find_dir_c(const uint16_t* img,
+                    int stride,
+                    int32_t* var,
+                    int coeff_shift);
+int cdef_find_dir_sse2(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+int cdef_find_dir_ssse3(const uint16_t* img,
+                        int stride,
+                        int32_t* var,
+                        int coeff_shift);
+int cdef_find_dir_sse4_1(const uint16_t* img,
+                         int stride,
+                         int32_t* var,
+                         int coeff_shift);
+int cdef_find_dir_avx2(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+RTCD_EXTERN int (*cdef_find_dir)(const uint16_t* img,
+                                 int stride,
+                                 int32_t* var,
+                                 int coeff_shift);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_420_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_420_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_422_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_422_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_444_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_444_lbd)(
+    TX_SIZE tx_size);
+
+void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
+                                 int dstride,
+                                 const uint16_t* src,
+                                 int sstride,
+                                 int v,
+                                 int h);
+void copy_rect8_16bit_to_16bit_sse2(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+void copy_rect8_16bit_to_16bit_ssse3(uint16_t* dst,
+                                     int dstride,
+                                     const uint16_t* src,
+                                     int sstride,
+                                     int v,
+                                     int h);
+void copy_rect8_16bit_to_16bit_sse4_1(uint16_t* dst,
+                                      int dstride,
+                                      const uint16_t* src,
+                                      int sstride,
+                                      int v,
+                                      int h);
+void copy_rect8_16bit_to_16bit_avx2(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+RTCD_EXTERN void (*copy_rect8_16bit_to_16bit)(uint16_t* dst,
+                                              int dstride,
+                                              const uint16_t* src,
+                                              int sstride,
+                                              int v,
+                                              int h);
+
+void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
+                                int dstride,
+                                const uint8_t* src,
+                                int sstride,
+                                int v,
+                                int h);
+void copy_rect8_8bit_to_16bit_sse2(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+void copy_rect8_8bit_to_16bit_ssse3(uint16_t* dst,
+                                    int dstride,
+                                    const uint8_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+void copy_rect8_8bit_to_16bit_sse4_1(uint16_t* dst,
+                                     int dstride,
+                                     const uint8_t* src,
+                                     int sstride,
+                                     int v,
+                                     int h);
+void copy_rect8_8bit_to_16bit_avx2(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+RTCD_EXTERN void (*copy_rect8_8bit_to_16bit)(uint16_t* dst,
+                                             int dstride,
+                                             const uint8_t* src,
+                                             int sstride,
+                                             int v,
+                                             int h);
+
+cfl_predict_hbd_fn get_predict_hbd_fn_c(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_ssse3(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_hbd_fn (*get_predict_hbd_fn)(TX_SIZE tx_size);
+
+cfl_predict_lbd_fn get_predict_lbd_fn_c(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_ssse3(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_lbd_fn (*get_predict_lbd_fn)(TX_SIZE tx_size);
+
+cfl_subtract_average_fn get_subtract_average_fn_c(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_sse2(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subtract_average_fn (*get_subtract_average_fn)(TX_SIZE tx_size);
+
+void av1_rtcd(void);
+
+#ifdef RTCD_C
+#include "aom_ports/x86.h"
+static void setup_rtcd_internal(void) {
+  int flags = x86_simd_caps();
+
+  (void)flags;
+
+  apply_selfguided_restoration = apply_selfguided_restoration_c;
+  if (flags & HAS_SSE4_1)
+    apply_selfguided_restoration = apply_selfguided_restoration_sse4_1;
+  if (flags & HAS_AVX2)
+    apply_selfguided_restoration = apply_selfguided_restoration_avx2;
+  av1_build_compound_diffwtd_mask = av1_build_compound_diffwtd_mask_c;
+  if (flags & HAS_SSE4_1)
+    av1_build_compound_diffwtd_mask = av1_build_compound_diffwtd_mask_sse4_1;
+  av1_build_compound_diffwtd_mask_d16 = av1_build_compound_diffwtd_mask_d16_c;
+  if (flags & HAS_SSE4_1)
+    av1_build_compound_diffwtd_mask_d16 =
+        av1_build_compound_diffwtd_mask_d16_sse4_1;
+  av1_build_compound_diffwtd_mask_highbd =
+      av1_build_compound_diffwtd_mask_highbd_c;
+  if (flags & HAS_SSSE3)
+    av1_build_compound_diffwtd_mask_highbd =
+        av1_build_compound_diffwtd_mask_highbd_ssse3;
+  if (flags & HAS_AVX2)
+    av1_build_compound_diffwtd_mask_highbd =
+        av1_build_compound_diffwtd_mask_highbd_avx2;
+  av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_c;
+  if (flags & HAS_SSE2)
+    av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_avx2;
+  av1_convolve_2d_scale = av1_convolve_2d_scale_c;
+  if (flags & HAS_SSE4_1)
+    av1_convolve_2d_scale = av1_convolve_2d_scale_sse4_1;
+  av1_convolve_2d_sr = av1_convolve_2d_sr_c;
+  if (flags & HAS_SSE2)
+    av1_convolve_2d_sr = av1_convolve_2d_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_2d_sr = av1_convolve_2d_sr_avx2;
+  av1_convolve_horiz_rs = av1_convolve_horiz_rs_c;
+  if (flags & HAS_SSE4_1)
+    av1_convolve_horiz_rs = av1_convolve_horiz_rs_sse4_1;
+  av1_convolve_x_sr = av1_convolve_x_sr_c;
+  if (flags & HAS_SSE2)
+    av1_convolve_x_sr = av1_convolve_x_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_x_sr = av1_convolve_x_sr_avx2;
+  av1_convolve_y_sr = av1_convolve_y_sr_c;
+  if (flags & HAS_SSE2)
+    av1_convolve_y_sr = av1_convolve_y_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_y_sr = av1_convolve_y_sr_avx2;
+  av1_filter_intra_edge = av1_filter_intra_edge_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_edge = av1_filter_intra_edge_sse4_1;
+  av1_filter_intra_edge_high = av1_filter_intra_edge_high_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_edge_high = av1_filter_intra_edge_high_sse4_1;
+  av1_filter_intra_predictor = av1_filter_intra_predictor_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_predictor = av1_filter_intra_predictor_sse4_1;
+  av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_c;
+  if (flags & HAS_SSE2)
+    av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_avx2;
+  av1_highbd_convolve_2d_scale = av1_highbd_convolve_2d_scale_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_convolve_2d_scale = av1_highbd_convolve_2d_scale_sse4_1;
+  av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_avx2;
+  av1_highbd_convolve_horiz_rs = av1_highbd_convolve_horiz_rs_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_convolve_horiz_rs = av1_highbd_convolve_horiz_rs_sse4_1;
+  av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_avx2;
+  av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_avx2;
+  av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_avx2;
+  av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_avx2;
+  av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_avx2;
+  av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_avx2;
+  av1_highbd_warp_affine = av1_highbd_warp_affine_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_warp_affine = av1_highbd_warp_affine_sse4_1;
+  av1_highbd_wiener_convolve_add_src = av1_highbd_wiener_convolve_add_src_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_wiener_convolve_add_src =
+        av1_highbd_wiener_convolve_add_src_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_wiener_convolve_add_src =
+        av1_highbd_wiener_convolve_add_src_avx2;
+  av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_sse4_1;
+  av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_c;
+  if (flags & HAS_AVX2)
+    av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_avx2;
+  av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_sse4_1;
+  av1_inv_txfm2d_add_64x64 = av1_inv_txfm2d_add_64x64_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_64x64 = av1_inv_txfm2d_add_64x64_sse4_1;
+  av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_sse4_1;
+  av1_inv_txfm_add = av1_inv_txfm_add_c;
+  if (flags & HAS_SSSE3)
+    av1_inv_txfm_add = av1_inv_txfm_add_ssse3;
+  if (flags & HAS_AVX2)
+    av1_inv_txfm_add = av1_inv_txfm_add_avx2;
+  av1_jnt_convolve_2d = av1_jnt_convolve_2d_c;
+  if (flags & HAS_SSSE3)
+    av1_jnt_convolve_2d = av1_jnt_convolve_2d_ssse3;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_2d = av1_jnt_convolve_2d_avx2;
+  av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_c;
+  if (flags & HAS_SSE2)
+    av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_avx2;
+  av1_jnt_convolve_x = av1_jnt_convolve_x_c;
+  if (flags & HAS_SSE2)
+    av1_jnt_convolve_x = av1_jnt_convolve_x_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_x = av1_jnt_convolve_x_avx2;
+  av1_jnt_convolve_y = av1_jnt_convolve_y_c;
+  if (flags & HAS_SSE2)
+    av1_jnt_convolve_y = av1_jnt_convolve_y_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_y = av1_jnt_convolve_y_avx2;
+  av1_selfguided_restoration = av1_selfguided_restoration_c;
+  if (flags & HAS_SSE4_1)
+    av1_selfguided_restoration = av1_selfguided_restoration_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_selfguided_restoration = av1_selfguided_restoration_avx2;
+  av1_upsample_intra_edge = av1_upsample_intra_edge_c;
+  if (flags & HAS_SSE4_1)
+    av1_upsample_intra_edge = av1_upsample_intra_edge_sse4_1;
+  av1_upsample_intra_edge_high = av1_upsample_intra_edge_high_c;
+  if (flags & HAS_SSE4_1)
+    av1_upsample_intra_edge_high = av1_upsample_intra_edge_high_sse4_1;
+  av1_warp_affine = av1_warp_affine_c;
+  if (flags & HAS_SSE4_1)
+    av1_warp_affine = av1_warp_affine_sse4_1;
+  av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_c;
+  if (flags & HAS_SSE2)
+    av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_sse2;
+  if (flags & HAS_AVX2)
+    av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_avx2;
+  cdef_filter_block = cdef_filter_block_c;
+  if (flags & HAS_SSE2)
+    cdef_filter_block = cdef_filter_block_sse2;
+  if (flags & HAS_SSSE3)
+    cdef_filter_block = cdef_filter_block_ssse3;
+  if (flags & HAS_SSE4_1)
+    cdef_filter_block = cdef_filter_block_sse4_1;
+  if (flags & HAS_AVX2)
+    cdef_filter_block = cdef_filter_block_avx2;
+  cdef_find_dir = cdef_find_dir_c;
+  if (flags & HAS_SSE2)
+    cdef_find_dir = cdef_find_dir_sse2;
+  if (flags & HAS_SSSE3)
+    cdef_find_dir = cdef_find_dir_ssse3;
+  if (flags & HAS_SSE4_1)
+    cdef_find_dir = cdef_find_dir_sse4_1;
+  if (flags & HAS_AVX2)
+    cdef_find_dir = cdef_find_dir_avx2;
+  cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_avx2;
+  cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_avx2;
+  cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_avx2;
+  cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_avx2;
+  cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_avx2;
+  cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_avx2;
+  copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_c;
+  if (flags & HAS_SSE2)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse2;
+  if (flags & HAS_SSSE3)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_ssse3;
+  if (flags & HAS_SSE4_1)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse4_1;
+  if (flags & HAS_AVX2)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_avx2;
+  copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_c;
+  if (flags & HAS_SSE2)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse2;
+  if (flags & HAS_SSSE3)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_ssse3;
+  if (flags & HAS_SSE4_1)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse4_1;
+  if (flags & HAS_AVX2)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_avx2;
+  get_predict_hbd_fn = get_predict_hbd_fn_c;
+  if (flags & HAS_SSSE3)
+    get_predict_hbd_fn = get_predict_hbd_fn_ssse3;
+  if (flags & HAS_AVX2)
+    get_predict_hbd_fn = get_predict_hbd_fn_avx2;
+  get_predict_lbd_fn = get_predict_lbd_fn_c;
+  if (flags & HAS_SSSE3)
+    get_predict_lbd_fn = get_predict_lbd_fn_ssse3;
+  if (flags & HAS_AVX2)
+    get_predict_lbd_fn = get_predict_lbd_fn_avx2;
+  get_subtract_average_fn = get_subtract_average_fn_c;
+  if (flags & HAS_SSE2)
+    get_subtract_average_fn = get_subtract_average_fn_sse2;
+  if (flags & HAS_AVX2)
+    get_subtract_average_fn = get_subtract_average_fn_avx2;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/win/x64/aom_config.asm b/third_party/libaom/source/config/win/x64/aom_config.asm
deleted file mode 100644
index 16f31aec..0000000
--- a/third_party/libaom/source/config/win/x64/aom_config.asm
+++ /dev/null
@@ -1,168 +0,0 @@
-%define ARCH_ARM 0
-%define ARCH_MIPS 0
-%define ARCH_X86 0
-%define ARCH_X86_64 1
-%define HAVE_NEON 0
-%define HAVE_NEON_ASM 0
-%define HAVE_MIPS32 0
-%define HAVE_DSPR2 0
-%define HAVE_MSA 0
-%define HAVE_MIPS64 0
-%define HAVE_MMX 1
-%define HAVE_SSE 1
-%define HAVE_SSE2 1
-%define HAVE_SSE3 1
-%define HAVE_SSSE3 1
-%define HAVE_SSE4_1 1
-%define HAVE_AVX 1
-%define HAVE_AVX2 1
-%define HAVE_AOM_PORTS 1
-%define HAVE_FEXCEPT 1
-%define HAVE_PTHREAD_H 0
-%define HAVE_UNISTD_H 0
-%define HAVE_WXWIDGETS 0
-%define CONFIG_DEPENDENCY_TRACKING 1
-%define CONFIG_EXTERNAL_BUILD 1
-%define CONFIG_INSTALL_DOCS 0
-%define CONFIG_INSTALL_BINS 1
-%define CONFIG_INSTALL_LIBS 1
-%define CONFIG_INSTALL_SRCS 0
-%define CONFIG_DEBUG 0
-%define CONFIG_GPROF 0
-%define CONFIG_GCOV 0
-%define CONFIG_RVCT 0
-%define CONFIG_GCC 0
-%define CONFIG_MSVS 1
-%define CONFIG_PIC 1
-%define CONFIG_BIG_ENDIAN 0
-%define CONFIG_CODEC_SRCS 0
-%define CONFIG_DEBUG_LIBS 0
-%define CONFIG_RUNTIME_CPU_DETECT 1
-%define CONFIG_POSTPROC 1
-%define CONFIG_MULTITHREAD 1
-%define CONFIG_INTERNAL_STATS 0
-%define CONFIG_AV1_ENCODER 0
-%define CONFIG_AV1_DECODER 1
-%define CONFIG_AV1 1
-%define CONFIG_STATIC_MSVCRT 0
-%define CONFIG_SPATIAL_RESAMPLING 1
-%define CONFIG_REALTIME_ONLY 1
-%define CONFIG_SHARED 0
-%define CONFIG_STATIC 1
-%define CONFIG_SMALL 0
-%define CONFIG_POSTPROC_VISUALIZER 0
-%define CONFIG_OS_SUPPORT 1
-%define CONFIG_UNIT_TESTS 1
-%define CONFIG_WEBM_IO 1
-%define CONFIG_LIBYUV 1
-%define CONFIG_ACCOUNTING 0
-%define CONFIG_INSPECTION 0
-%define CONFIG_DECODE_PERF_TESTS 0
-%define CONFIG_ENCODE_PERF_TESTS 0
-%define CONFIG_COEFFICIENT_RANGE_CHECKING 0
-%define CONFIG_LOWBITDEPTH 1
-%define CONFIG_HIGHBITDEPTH 0
-%define CONFIG_EXPERIMENTAL 0
-%define CONFIG_SIZE_LIMIT 1
-%define CONFIG_FP_MB_STATS 0
-%define CONFIG_CDEF 1
-%define CONFIG_CDEF_SINGLEPASS 0
-%define CONFIG_VAR_TX 1
-%define CONFIG_RECT_TX 1
-%define CONFIG_RECT_TX_EXT 0
-%define CONFIG_TPL_MV 0
-%define CONFIG_DUAL_FILTER 1
-%define CONFIG_CONVOLVE_ROUND 1
-%define CONFIG_COMPOUND_ROUND 0
-%define CONFIG_EXT_TX 1
-%define CONFIG_DPCM_INTRA 0
-%define CONFIG_TX64X64 0
-%define CONFIG_EXT_INTRA 1
-%define CONFIG_INTRA_INTERP 0
-%define CONFIG_FILTER_INTRA 0
-%define CONFIG_INTRA_EDGE 0
-%define CONFIG_INTRABC 0
-%define CONFIG_EXT_INTER 1
-%define CONFIG_INTERINTRA 1
-%define CONFIG_WEDGE 1
-%define CONFIG_COMPOUND_SEGMENT 1
-%define CONFIG_EXT_REFS 1
-%define CONFIG_SPEED_REFS 0
-%define CONFIG_GF_GROUPS 0
-%define CONFIG_GLOBAL_MOTION 1
-%define CONFIG_NEW_QUANT 0
-%define CONFIG_SUPERTX 0
-%define CONFIG_ANS 0
-%define CONFIG_LOOP_RESTORATION 0
-%define CONFIG_EXT_PARTITION 0
-%define CONFIG_EXT_PARTITION_TYPES 0
-%define CONFIG_UNPOISON_PARTITION_CTX 0
-%define CONFIG_EXT_TILE 0
-%define CONFIG_MOTION_VAR 1
-%define CONFIG_NCOBMC 0
-%define CONFIG_WARPED_MOTION 1
-%define CONFIG_Q_ADAPT_PROBS 0
-%define CONFIG_BITSTREAM_DEBUG 0
-%define CONFIG_INTER_STATS_ONLY 0
-%define CONFIG_PALETTE_DELTA_ENCODING 0
-%define CONFIG_RAWBITS 0
-%define CONFIG_PVQ 0
-%define CONFIG_CFL 0
-%define CONFIG_XIPHRC 0
-%define CONFIG_DCT_ONLY 0
-%define CONFIG_DAALA_DCT4 0
-%define CONFIG_DAALA_DCT8 0
-%define CONFIG_DAALA_DCT16 0
-%define CONFIG_DAALA_DCT32 0
-%define CONFIG_DAALA_DCT64 0
-%define CONFIG_CB4X4 1
-%define CONFIG_CHROMA_2X2 0
-%define CONFIG_CHROMA_SUB8X8 1
-%define CONFIG_FRAME_SIZE 0
-%define CONFIG_DELTA_Q 1
-%define CONFIG_EXT_DELTA_Q 1
-%define CONFIG_ADAPT_SCAN 0
-%define CONFIG_FILTER_7BIT 1
-%define CONFIG_PARALLEL_DEBLOCKING 1
-%define CONFIG_LOOPFILTERING_ACROSS_TILES 1
-%define CONFIG_TEMPMV_SIGNALING 1
-%define CONFIG_RD_DEBUG 0
-%define CONFIG_REFERENCE_BUFFER 1
-%define CONFIG_COEF_INTERLEAVE 0
-%define CONFIG_ENTROPY_STATS 0
-%define CONFIG_MASKED_TX 0
-%define CONFIG_DEPENDENT_HORZTILES 0
-%define CONFIG_DIST_8X8 1
-%define CONFIG_TRIPRED 0
-%define CONFIG_PALETTE_THROUGHPUT 1
-%define CONFIG_REF_ADAPT 0
-%define CONFIG_LV_MAP 0
-%define CONFIG_TXK_SEL 0
-%define CONFIG_MV_COMPRESS 1
-%define CONFIG_SEGMENT_ZEROMV 0
-%define CONFIG_FRAME_SUPERRES 0
-%define CONFIG_NEW_MULTISYMBOL 0
-%define CONFIG_COMPOUND_SINGLEREF 0
-%define CONFIG_AOM_QM 1
-%define CONFIG_ONE_SIDED_COMPOUND 1
-%define CONFIG_EXT_COMP_REFS 1
-%define CONFIG_SMOOTH_HV 1
-%define CONFIG_VAR_REFS 0
-%define CONFIG_RECT_INTRA_PRED 1
-%define CONFIG_LGT 0
-%define CONFIG_SBL_SYMBOL 0
-%define CONFIG_NCOBMC_ADAPT_WEIGHT 0
-%define CONFIG_BGSPRITE 0
-%define CONFIG_VAR_TX_NO_TX_MODE 0
-%define CONFIG_MRC_TX 0
-%define CONFIG_LPF_DIRECT 0
-%define CONFIG_LOOPFILTER_LEVEL 0
-%define CONFIG_NO_FRAME_CONTEXT_SIGNALING 0
-%define CONFIG_TXMG 0
-%define CONFIG_HASH_ME 0
-%define CONFIG_COLORSPACE_HEADERS 0
-%define CONFIG_MFMV 0
-%define CONFIG_JNT_COMP 0
-%define CONFIG_ANALYZER 0
-%define DECODE_WIDTH_LIMIT 16384
-%define DECODE_HEIGHT_LIMIT 16384
diff --git a/third_party/libaom/source/config/win/x64/aom_config.c b/third_party/libaom/source/config/win/x64/aom_config.c
deleted file mode 100644
index 3f3feb8..0000000
--- a/third_party/libaom/source/config/win/x64/aom_config.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-#include "aom/aom_codec.h"
-static const char* const cfg = "--target=x86_64-win64-vs12 --enable-external-build --enable-postproc --disable-av1-encoder --size-limit=16384x16384 --enable-realtime-only --disable-install-docs --disable-highbitdepth --enable-pic --as=yasm";
-const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/win/x64/aom_config.h b/third_party/libaom/source/config/win/x64/aom_config.h
deleted file mode 100644
index 66dff276..0000000
--- a/third_party/libaom/source/config/win/x64/aom_config.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Copyright (c) 2016, Alliance for Open Media. All rights reserved. */
-/*  */
-/* This source code is subject to the terms of the BSD 2 Clause License and */
-/* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License */
-/* was not distributed with this source code in the LICENSE file, you can */
-/* obtain it at www.aomedia.org/license/software. If the Alliance for Open */
-/* Media Patent License 1.0 was not distributed with this source code in the */
-/* PATENTS file, you can obtain it at www.aomedia.org/license/patent. */
-/* This file automatically generated by configure. Do not edit! */
-#ifndef AOM_CONFIG_H
-#define AOM_CONFIG_H
-#define RESTRICT    
-#define INLINE      __forceinline
-#define ARCH_ARM 0
-#define ARCH_MIPS 0
-#define ARCH_X86 0
-#define ARCH_X86_64 1
-#define HAVE_NEON 0
-#define HAVE_NEON_ASM 0
-#define HAVE_MIPS32 0
-#define HAVE_DSPR2 0
-#define HAVE_MSA 0
-#define HAVE_MIPS64 0
-#define HAVE_MMX 1
-#define HAVE_SSE 1
-#define HAVE_SSE2 1
-#define HAVE_SSE3 1
-#define HAVE_SSSE3 1
-#define HAVE_SSE4_1 1
-#define HAVE_AVX 1
-#define HAVE_AVX2 1
-#define HAVE_AOM_PORTS 1
-#define HAVE_FEXCEPT 1
-#define HAVE_PTHREAD_H 0
-#define HAVE_UNISTD_H 0
-#define HAVE_WXWIDGETS 0
-#define CONFIG_DEPENDENCY_TRACKING 1
-#define CONFIG_EXTERNAL_BUILD 1
-#define CONFIG_INSTALL_DOCS 0
-#define CONFIG_INSTALL_BINS 1
-#define CONFIG_INSTALL_LIBS 1
-#define CONFIG_INSTALL_SRCS 0
-#define CONFIG_DEBUG 0
-#define CONFIG_GPROF 0
-#define CONFIG_GCOV 0
-#define CONFIG_RVCT 0
-#define CONFIG_GCC 0
-#define CONFIG_MSVS 1
-#define CONFIG_PIC 1
-#define CONFIG_BIG_ENDIAN 0
-#define CONFIG_CODEC_SRCS 0
-#define CONFIG_DEBUG_LIBS 0
-#define CONFIG_RUNTIME_CPU_DETECT 1
-#define CONFIG_POSTPROC 1
-#define CONFIG_MULTITHREAD 1
-#define CONFIG_INTERNAL_STATS 0
-#define CONFIG_AV1_ENCODER 0
-#define CONFIG_AV1_DECODER 1
-#define CONFIG_AV1 1
-#define CONFIG_STATIC_MSVCRT 0
-#define CONFIG_SPATIAL_RESAMPLING 1
-#define CONFIG_REALTIME_ONLY 1
-#define CONFIG_SHARED 0
-#define CONFIG_STATIC 1
-#define CONFIG_SMALL 0
-#define CONFIG_POSTPROC_VISUALIZER 0
-#define CONFIG_OS_SUPPORT 1
-#define CONFIG_UNIT_TESTS 1
-#define CONFIG_WEBM_IO 1
-#define CONFIG_LIBYUV 1
-#define CONFIG_ACCOUNTING 0
-#define CONFIG_INSPECTION 0
-#define CONFIG_DECODE_PERF_TESTS 0
-#define CONFIG_ENCODE_PERF_TESTS 0
-#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
-#define CONFIG_LOWBITDEPTH 1
-#define CONFIG_HIGHBITDEPTH 0
-#define CONFIG_EXPERIMENTAL 0
-#define CONFIG_SIZE_LIMIT 1
-#define CONFIG_FP_MB_STATS 0
-#define CONFIG_CDEF 1
-#define CONFIG_CDEF_SINGLEPASS 0
-#define CONFIG_VAR_TX 1
-#define CONFIG_RECT_TX 1
-#define CONFIG_RECT_TX_EXT 0
-#define CONFIG_TPL_MV 0
-#define CONFIG_DUAL_FILTER 1
-#define CONFIG_CONVOLVE_ROUND 1
-#define CONFIG_COMPOUND_ROUND 0
-#define CONFIG_EXT_TX 1
-#define CONFIG_DPCM_INTRA 0
-#define CONFIG_TX64X64 0
-#define CONFIG_EXT_INTRA 1
-#define CONFIG_INTRA_INTERP 0
-#define CONFIG_FILTER_INTRA 0
-#define CONFIG_INTRA_EDGE 0
-#define CONFIG_INTRABC 0
-#define CONFIG_EXT_INTER 1
-#define CONFIG_INTERINTRA 1
-#define CONFIG_WEDGE 1
-#define CONFIG_COMPOUND_SEGMENT 1
-#define CONFIG_EXT_REFS 1
-#define CONFIG_SPEED_REFS 0
-#define CONFIG_GF_GROUPS 0
-#define CONFIG_GLOBAL_MOTION 1
-#define CONFIG_NEW_QUANT 0
-#define CONFIG_SUPERTX 0
-#define CONFIG_ANS 0
-#define CONFIG_LOOP_RESTORATION 0
-#define CONFIG_EXT_PARTITION 0
-#define CONFIG_EXT_PARTITION_TYPES 0
-#define CONFIG_UNPOISON_PARTITION_CTX 0
-#define CONFIG_EXT_TILE 0
-#define CONFIG_MOTION_VAR 1
-#define CONFIG_NCOBMC 0
-#define CONFIG_WARPED_MOTION 1
-#define CONFIG_Q_ADAPT_PROBS 0
-#define CONFIG_BITSTREAM_DEBUG 0
-#define CONFIG_INTER_STATS_ONLY 0
-#define CONFIG_PALETTE_DELTA_ENCODING 0
-#define CONFIG_RAWBITS 0
-#define CONFIG_PVQ 0
-#define CONFIG_CFL 0
-#define CONFIG_XIPHRC 0
-#define CONFIG_DCT_ONLY 0
-#define CONFIG_DAALA_DCT4 0
-#define CONFIG_DAALA_DCT8 0
-#define CONFIG_DAALA_DCT16 0
-#define CONFIG_DAALA_DCT32 0
-#define CONFIG_DAALA_DCT64 0
-#define CONFIG_CB4X4 1
-#define CONFIG_CHROMA_2X2 0
-#define CONFIG_CHROMA_SUB8X8 1
-#define CONFIG_FRAME_SIZE 0
-#define CONFIG_DELTA_Q 1
-#define CONFIG_EXT_DELTA_Q 1
-#define CONFIG_ADAPT_SCAN 0
-#define CONFIG_FILTER_7BIT 1
-#define CONFIG_PARALLEL_DEBLOCKING 1
-#define CONFIG_LOOPFILTERING_ACROSS_TILES 1
-#define CONFIG_TEMPMV_SIGNALING 1
-#define CONFIG_RD_DEBUG 0
-#define CONFIG_REFERENCE_BUFFER 1
-#define CONFIG_COEF_INTERLEAVE 0
-#define CONFIG_ENTROPY_STATS 0
-#define CONFIG_MASKED_TX 0
-#define CONFIG_DEPENDENT_HORZTILES 0
-#define CONFIG_DIST_8X8 1
-#define CONFIG_TRIPRED 0
-#define CONFIG_PALETTE_THROUGHPUT 1
-#define CONFIG_REF_ADAPT 0
-#define CONFIG_LV_MAP 0
-#define CONFIG_TXK_SEL 0
-#define CONFIG_MV_COMPRESS 1
-#define CONFIG_SEGMENT_ZEROMV 0
-#define CONFIG_FRAME_SUPERRES 0
-#define CONFIG_NEW_MULTISYMBOL 0
-#define CONFIG_COMPOUND_SINGLEREF 0
-#define CONFIG_AOM_QM 1
-#define CONFIG_ONE_SIDED_COMPOUND 1
-#define CONFIG_EXT_COMP_REFS 1
-#define CONFIG_SMOOTH_HV 1
-#define CONFIG_VAR_REFS 0
-#define CONFIG_RECT_INTRA_PRED 1
-#define CONFIG_LGT 0
-#define CONFIG_SBL_SYMBOL 0
-#define CONFIG_NCOBMC_ADAPT_WEIGHT 0
-#define CONFIG_BGSPRITE 0
-#define CONFIG_VAR_TX_NO_TX_MODE 0
-#define CONFIG_MRC_TX 0
-#define CONFIG_LPF_DIRECT 0
-#define CONFIG_LOOPFILTER_LEVEL 0
-#define CONFIG_NO_FRAME_CONTEXT_SIGNALING 0
-#define CONFIG_TXMG 0
-#define CONFIG_HASH_ME 0
-#define CONFIG_COLORSPACE_HEADERS 0
-#define CONFIG_MFMV 0
-#define CONFIG_JNT_COMP 0
-#define CONFIG_ANALYZER 0
-#define DECODE_WIDTH_LIMIT 16384
-#define DECODE_HEIGHT_LIMIT 16384
-#endif /* AOM_CONFIG_H */
diff --git a/third_party/libaom/source/config/win/x64/aom_dsp_rtcd.h b/third_party/libaom/source/config/win/x64/aom_dsp_rtcd.h
deleted file mode 100644
index 91e5bf5..0000000
--- a/third_party/libaom/source/config/win/x64/aom_dsp_rtcd.h
+++ /dev/null
@@ -1,2230 +0,0 @@
-#ifndef AOM_DSP_RTCD_H_
-#define AOM_DSP_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * DSP
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/aom_dsp_common.h"
-#include "av1/common/enums.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_blend_a64_d32_mask_c(int32_t* dst,
-                              uint32_t dst_stride,
-                              const int32_t* src0,
-                              uint32_t src0_stride,
-                              const int32_t* src1,
-                              uint32_t src1_stride,
-                              const uint8_t* mask,
-                              uint32_t mask_stride,
-                              int h,
-                              int w,
-                              int suby,
-                              int subx);
-#define aom_blend_a64_d32_mask aom_blend_a64_d32_mask_c
-
-void aom_blend_a64_hmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-void aom_blend_a64_hmask_sse4_1(uint8_t* dst,
-                                uint32_t dst_stride,
-                                const uint8_t* src0,
-                                uint32_t src0_stride,
-                                const uint8_t* src1,
-                                uint32_t src1_stride,
-                                const uint8_t* mask,
-                                int h,
-                                int w);
-RTCD_EXTERN void (*aom_blend_a64_hmask)(uint8_t* dst,
-                                        uint32_t dst_stride,
-                                        const uint8_t* src0,
-                                        uint32_t src0_stride,
-                                        const uint8_t* src1,
-                                        uint32_t src1_stride,
-                                        const uint8_t* mask,
-                                        int h,
-                                        int w);
-
-void aom_blend_a64_mask_c(uint8_t* dst,
-                          uint32_t dst_stride,
-                          const uint8_t* src0,
-                          uint32_t src0_stride,
-                          const uint8_t* src1,
-                          uint32_t src1_stride,
-                          const uint8_t* mask,
-                          uint32_t mask_stride,
-                          int h,
-                          int w,
-                          int suby,
-                          int subx);
-void aom_blend_a64_mask_sse4_1(uint8_t* dst,
-                               uint32_t dst_stride,
-                               const uint8_t* src0,
-                               uint32_t src0_stride,
-                               const uint8_t* src1,
-                               uint32_t src1_stride,
-                               const uint8_t* mask,
-                               uint32_t mask_stride,
-                               int h,
-                               int w,
-                               int suby,
-                               int subx);
-RTCD_EXTERN void (*aom_blend_a64_mask)(uint8_t* dst,
-                                       uint32_t dst_stride,
-                                       const uint8_t* src0,
-                                       uint32_t src0_stride,
-                                       const uint8_t* src1,
-                                       uint32_t src1_stride,
-                                       const uint8_t* mask,
-                                       uint32_t mask_stride,
-                                       int h,
-                                       int w,
-                                       int suby,
-                                       int subx);
-
-void aom_blend_a64_vmask_c(uint8_t* dst,
-                           uint32_t dst_stride,
-                           const uint8_t* src0,
-                           uint32_t src0_stride,
-                           const uint8_t* src1,
-                           uint32_t src1_stride,
-                           const uint8_t* mask,
-                           int h,
-                           int w);
-void aom_blend_a64_vmask_sse4_1(uint8_t* dst,
-                                uint32_t dst_stride,
-                                const uint8_t* src0,
-                                uint32_t src0_stride,
-                                const uint8_t* src1,
-                                uint32_t src1_stride,
-                                const uint8_t* mask,
-                                int h,
-                                int w);
-RTCD_EXTERN void (*aom_blend_a64_vmask)(uint8_t* dst,
-                                        uint32_t dst_stride,
-                                        const uint8_t* src0,
-                                        uint32_t src0_stride,
-                                        const uint8_t* src1,
-                                        uint32_t src1_stride,
-                                        const uint8_t* mask,
-                                        int h,
-                                        int w);
-
-void aom_convolve8_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-void aom_convolve8_sse2(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-void aom_convolve8_ssse3(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve8_avx2(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-RTCD_EXTERN void (*aom_convolve8)(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-
-void aom_convolve8_avg_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve8_avg_sse2(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-void aom_convolve8_avg_ssse3(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-RTCD_EXTERN void (*aom_convolve8_avg)(const uint8_t* src,
-                                      ptrdiff_t src_stride,
-                                      uint8_t* dst,
-                                      ptrdiff_t dst_stride,
-                                      const int16_t* filter_x,
-                                      int x_step_q4,
-                                      const int16_t* filter_y,
-                                      int y_step_q4,
-                                      int w,
-                                      int h);
-
-void aom_convolve8_avg_horiz_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-void aom_convolve8_avg_horiz_sse2(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-void aom_convolve8_avg_horiz_ssse3(const uint8_t* src,
-                                   ptrdiff_t src_stride,
-                                   uint8_t* dst,
-                                   ptrdiff_t dst_stride,
-                                   const int16_t* filter_x,
-                                   int x_step_q4,
-                                   const int16_t* filter_y,
-                                   int y_step_q4,
-                                   int w,
-                                   int h);
-RTCD_EXTERN void (*aom_convolve8_avg_horiz)(const uint8_t* src,
-                                            ptrdiff_t src_stride,
-                                            uint8_t* dst,
-                                            ptrdiff_t dst_stride,
-                                            const int16_t* filter_x,
-                                            int x_step_q4,
-                                            const int16_t* filter_y,
-                                            int y_step_q4,
-                                            int w,
-                                            int h);
-
-void aom_convolve8_avg_horiz_scale_c(const uint8_t* src,
-                                     ptrdiff_t src_stride,
-                                     uint8_t* dst,
-                                     ptrdiff_t dst_stride,
-                                     const int16_t* filter_x,
-                                     int subpel_x,
-                                     int x_step_q4,
-                                     const int16_t* filter_y,
-                                     int subpel_y,
-                                     int y_step_q4,
-                                     int w,
-                                     int h);
-#define aom_convolve8_avg_horiz_scale aom_convolve8_avg_horiz_scale_c
-
-void aom_convolve8_avg_scale_c(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int subpel_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int subpel_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-#define aom_convolve8_avg_scale aom_convolve8_avg_scale_c
-
-void aom_convolve8_avg_vert_c(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_avg_vert_sse2(const uint8_t* src,
-                                 ptrdiff_t src_stride,
-                                 uint8_t* dst,
-                                 ptrdiff_t dst_stride,
-                                 const int16_t* filter_x,
-                                 int x_step_q4,
-                                 const int16_t* filter_y,
-                                 int y_step_q4,
-                                 int w,
-                                 int h);
-void aom_convolve8_avg_vert_ssse3(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-RTCD_EXTERN void (*aom_convolve8_avg_vert)(const uint8_t* src,
-                                           ptrdiff_t src_stride,
-                                           uint8_t* dst,
-                                           ptrdiff_t dst_stride,
-                                           const int16_t* filter_x,
-                                           int x_step_q4,
-                                           const int16_t* filter_y,
-                                           int y_step_q4,
-                                           int w,
-                                           int h);
-
-void aom_convolve8_avg_vert_scale_c(const uint8_t* src,
-                                    ptrdiff_t src_stride,
-                                    uint8_t* dst,
-                                    ptrdiff_t dst_stride,
-                                    const int16_t* filter_x,
-                                    int subpel_x,
-                                    int x_step_q4,
-                                    const int16_t* filter_y,
-                                    int subpel_y,
-                                    int y_step_q4,
-                                    int w,
-                                    int h);
-#define aom_convolve8_avg_vert_scale aom_convolve8_avg_vert_scale_c
-
-void aom_convolve8_horiz_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-void aom_convolve8_horiz_sse2(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_horiz_ssse3(const uint8_t* src,
-                               ptrdiff_t src_stride,
-                               uint8_t* dst,
-                               ptrdiff_t dst_stride,
-                               const int16_t* filter_x,
-                               int x_step_q4,
-                               const int16_t* filter_y,
-                               int y_step_q4,
-                               int w,
-                               int h);
-void aom_convolve8_horiz_avx2(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-RTCD_EXTERN void (*aom_convolve8_horiz)(const uint8_t* src,
-                                        ptrdiff_t src_stride,
-                                        uint8_t* dst,
-                                        ptrdiff_t dst_stride,
-                                        const int16_t* filter_x,
-                                        int x_step_q4,
-                                        const int16_t* filter_y,
-                                        int y_step_q4,
-                                        int w,
-                                        int h);
-
-void aom_convolve8_horiz_scale_c(const uint8_t* src,
-                                 ptrdiff_t src_stride,
-                                 uint8_t* dst,
-                                 ptrdiff_t dst_stride,
-                                 const int16_t* filter_x,
-                                 int subpel_x,
-                                 int x_step_q4,
-                                 const int16_t* filter_y,
-                                 int subpel_y,
-                                 int y_step_q4,
-                                 int w,
-                                 int h);
-#define aom_convolve8_horiz_scale aom_convolve8_horiz_scale_c
-
-void aom_convolve8_scale_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int subpel_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int subpel_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_convolve8_scale aom_convolve8_scale_c
-
-void aom_convolve8_vert_c(const uint8_t* src,
-                          ptrdiff_t src_stride,
-                          uint8_t* dst,
-                          ptrdiff_t dst_stride,
-                          const int16_t* filter_x,
-                          int x_step_q4,
-                          const int16_t* filter_y,
-                          int y_step_q4,
-                          int w,
-                          int h);
-void aom_convolve8_vert_sse2(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-void aom_convolve8_vert_ssse3(const uint8_t* src,
-                              ptrdiff_t src_stride,
-                              uint8_t* dst,
-                              ptrdiff_t dst_stride,
-                              const int16_t* filter_x,
-                              int x_step_q4,
-                              const int16_t* filter_y,
-                              int y_step_q4,
-                              int w,
-                              int h);
-void aom_convolve8_vert_avx2(const uint8_t* src,
-                             ptrdiff_t src_stride,
-                             uint8_t* dst,
-                             ptrdiff_t dst_stride,
-                             const int16_t* filter_x,
-                             int x_step_q4,
-                             const int16_t* filter_y,
-                             int y_step_q4,
-                             int w,
-                             int h);
-RTCD_EXTERN void (*aom_convolve8_vert)(const uint8_t* src,
-                                       ptrdiff_t src_stride,
-                                       uint8_t* dst,
-                                       ptrdiff_t dst_stride,
-                                       const int16_t* filter_x,
-                                       int x_step_q4,
-                                       const int16_t* filter_y,
-                                       int y_step_q4,
-                                       int w,
-                                       int h);
-
-void aom_convolve8_vert_scale_c(const uint8_t* src,
-                                ptrdiff_t src_stride,
-                                uint8_t* dst,
-                                ptrdiff_t dst_stride,
-                                const int16_t* filter_x,
-                                int subpel_x,
-                                int x_step_q4,
-                                const int16_t* filter_y,
-                                int subpel_y,
-                                int y_step_q4,
-                                int w,
-                                int h);
-#define aom_convolve8_vert_scale aom_convolve8_vert_scale_c
-
-void aom_convolve_avg_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-void aom_convolve_avg_sse2(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_convolve_avg aom_convolve_avg_sse2
-
-void aom_convolve_copy_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-void aom_convolve_copy_sse2(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-#define aom_convolve_copy aom_convolve_copy_sse2
-
-void aom_d117_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x16 aom_d117_predictor_16x16_c
-
-void aom_d117_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_16x32 aom_d117_predictor_16x32_c
-
-void aom_d117_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_16x8 aom_d117_predictor_16x8_c
-
-void aom_d117_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_2x2 aom_d117_predictor_2x2_c
-
-void aom_d117_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x16 aom_d117_predictor_32x16_c
-
-void aom_d117_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d117_predictor_32x32 aom_d117_predictor_32x32_c
-
-void aom_d117_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x4 aom_d117_predictor_4x4_c
-
-void aom_d117_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_4x8 aom_d117_predictor_4x8_c
-
-void aom_d117_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d117_predictor_8x16 aom_d117_predictor_8x16_c
-
-void aom_d117_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x4 aom_d117_predictor_8x4_c
-
-void aom_d117_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d117_predictor_8x8 aom_d117_predictor_8x8_c
-
-void aom_d135_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x16 aom_d135_predictor_16x16_c
-
-void aom_d135_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_16x32 aom_d135_predictor_16x32_c
-
-void aom_d135_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_16x8 aom_d135_predictor_16x8_c
-
-void aom_d135_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_2x2 aom_d135_predictor_2x2_c
-
-void aom_d135_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x16 aom_d135_predictor_32x16_c
-
-void aom_d135_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d135_predictor_32x32 aom_d135_predictor_32x32_c
-
-void aom_d135_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x4 aom_d135_predictor_4x4_c
-
-void aom_d135_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_4x8 aom_d135_predictor_4x8_c
-
-void aom_d135_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d135_predictor_8x16 aom_d135_predictor_8x16_c
-
-void aom_d135_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x4 aom_d135_predictor_8x4_c
-
-void aom_d135_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d135_predictor_8x8 aom_d135_predictor_8x8_c
-
-void aom_d153_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_d153_predictor_16x16_ssse3(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_16x16)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_d153_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_16x32 aom_d153_predictor_16x32_c
-
-void aom_d153_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_16x8 aom_d153_predictor_16x8_c
-
-void aom_d153_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_2x2 aom_d153_predictor_2x2_c
-
-void aom_d153_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d153_predictor_32x16 aom_d153_predictor_32x16_c
-
-void aom_d153_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_d153_predictor_32x32_ssse3(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_32x32)(uint8_t* dst,
-                                             ptrdiff_t y_stride,
-                                             const uint8_t* above,
-                                             const uint8_t* left);
-
-void aom_d153_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d153_predictor_4x4_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_4x4)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d153_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_4x8 aom_d153_predictor_4x8_c
-
-void aom_d153_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d153_predictor_8x16 aom_d153_predictor_8x16_c
-
-void aom_d153_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d153_predictor_8x4 aom_d153_predictor_8x4_c
-
-void aom_d153_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d153_predictor_8x8_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d153_predictor_8x8)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d207e_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x16 aom_d207e_predictor_16x16_c
-
-void aom_d207e_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_16x32 aom_d207e_predictor_16x32_c
-
-void aom_d207e_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_16x8 aom_d207e_predictor_16x8_c
-
-void aom_d207e_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_2x2 aom_d207e_predictor_2x2_c
-
-void aom_d207e_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x16 aom_d207e_predictor_32x16_c
-
-void aom_d207e_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_d207e_predictor_32x32 aom_d207e_predictor_32x32_c
-
-void aom_d207e_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x4 aom_d207e_predictor_4x4_c
-
-void aom_d207e_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_4x8 aom_d207e_predictor_4x8_c
-
-void aom_d207e_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d207e_predictor_8x16 aom_d207e_predictor_8x16_c
-
-void aom_d207e_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x4 aom_d207e_predictor_8x4_c
-
-void aom_d207e_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d207e_predictor_8x8 aom_d207e_predictor_8x8_c
-
-void aom_d45e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x16 aom_d45e_predictor_16x16_c
-
-void aom_d45e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_16x32 aom_d45e_predictor_16x32_c
-
-void aom_d45e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_16x8 aom_d45e_predictor_16x8_c
-
-void aom_d45e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_2x2 aom_d45e_predictor_2x2_c
-
-void aom_d45e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x16 aom_d45e_predictor_32x16_c
-
-void aom_d45e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d45e_predictor_32x32 aom_d45e_predictor_32x32_c
-
-void aom_d45e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x4 aom_d45e_predictor_4x4_c
-
-void aom_d45e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_4x8 aom_d45e_predictor_4x8_c
-
-void aom_d45e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d45e_predictor_8x16 aom_d45e_predictor_8x16_c
-
-void aom_d45e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x4 aom_d45e_predictor_8x4_c
-
-void aom_d45e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d45e_predictor_8x8 aom_d45e_predictor_8x8_c
-
-void aom_d63e_predictor_16x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x16 aom_d63e_predictor_16x16_c
-
-void aom_d63e_predictor_16x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_16x32 aom_d63e_predictor_16x32_c
-
-void aom_d63e_predictor_16x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_16x8 aom_d63e_predictor_16x8_c
-
-void aom_d63e_predictor_2x2_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_2x2 aom_d63e_predictor_2x2_c
-
-void aom_d63e_predictor_32x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x16 aom_d63e_predictor_32x16_c
-
-void aom_d63e_predictor_32x32_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_d63e_predictor_32x32 aom_d63e_predictor_32x32_c
-
-void aom_d63e_predictor_4x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_d63e_predictor_4x4_ssse3(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-RTCD_EXTERN void (*aom_d63e_predictor_4x4)(uint8_t* dst,
-                                           ptrdiff_t y_stride,
-                                           const uint8_t* above,
-                                           const uint8_t* left);
-
-void aom_d63e_predictor_4x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_4x8 aom_d63e_predictor_4x8_c
-
-void aom_d63e_predictor_8x16_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_d63e_predictor_8x16 aom_d63e_predictor_8x16_c
-
-void aom_d63e_predictor_8x4_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x4 aom_d63e_predictor_8x4_c
-
-void aom_d63e_predictor_8x8_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_d63e_predictor_8x8 aom_d63e_predictor_8x8_c
-
-void aom_dc_128_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_128_predictor_16x16_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-#define aom_dc_128_predictor_16x16 aom_dc_128_predictor_16x16_sse2
-
-void aom_dc_128_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_c
-
-void aom_dc_128_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_c
-
-void aom_dc_128_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
-
-void aom_dc_128_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_128_predictor_32x16 aom_dc_128_predictor_32x16_c
-
-void aom_dc_128_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_128_predictor_32x32_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-#define aom_dc_128_predictor_32x32 aom_dc_128_predictor_32x32_sse2
-
-void aom_dc_128_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_128_predictor_4x4_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_128_predictor_4x4 aom_dc_128_predictor_4x4_sse2
-
-void aom_dc_128_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_c
-
-void aom_dc_128_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_c
-
-void aom_dc_128_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_c
-
-void aom_dc_128_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_128_predictor_8x8_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_128_predictor_8x8 aom_dc_128_predictor_8x8_sse2
-
-void aom_dc_left_predictor_16x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-void aom_dc_left_predictor_16x16_sse2(uint8_t* dst,
-                                      ptrdiff_t y_stride,
-                                      const uint8_t* above,
-                                      const uint8_t* left);
-#define aom_dc_left_predictor_16x16 aom_dc_left_predictor_16x16_sse2
-
-void aom_dc_left_predictor_16x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_c
-
-void aom_dc_left_predictor_16x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_c
-
-void aom_dc_left_predictor_2x2_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
-
-void aom_dc_left_predictor_32x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_left_predictor_32x16 aom_dc_left_predictor_32x16_c
-
-void aom_dc_left_predictor_32x32_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-void aom_dc_left_predictor_32x32_sse2(uint8_t* dst,
-                                      ptrdiff_t y_stride,
-                                      const uint8_t* above,
-                                      const uint8_t* left);
-#define aom_dc_left_predictor_32x32 aom_dc_left_predictor_32x32_sse2
-
-void aom_dc_left_predictor_4x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-void aom_dc_left_predictor_4x4_sse2(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_dc_left_predictor_4x4 aom_dc_left_predictor_4x4_sse2
-
-void aom_dc_left_predictor_4x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_c
-
-void aom_dc_left_predictor_8x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_c
-
-void aom_dc_left_predictor_8x4_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_c
-
-void aom_dc_left_predictor_8x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-void aom_dc_left_predictor_8x8_sse2(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_dc_left_predictor_8x8 aom_dc_left_predictor_8x8_sse2
-
-void aom_dc_predictor_16x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_dc_predictor_16x16_sse2(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_predictor_16x16 aom_dc_predictor_16x16_sse2
-
-void aom_dc_predictor_16x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_c
-
-void aom_dc_predictor_16x8_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_c
-
-void aom_dc_predictor_2x2_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
-
-void aom_dc_predictor_32x16_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_dc_predictor_32x16 aom_dc_predictor_32x16_c
-
-void aom_dc_predictor_32x32_c(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-void aom_dc_predictor_32x32_sse2(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_predictor_32x32 aom_dc_predictor_32x32_sse2
-
-void aom_dc_predictor_4x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-void aom_dc_predictor_4x4_sse2(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_dc_predictor_4x4 aom_dc_predictor_4x4_sse2
-
-void aom_dc_predictor_4x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_c
-
-void aom_dc_predictor_8x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_c
-
-void aom_dc_predictor_8x4_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_c
-
-void aom_dc_predictor_8x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-void aom_dc_predictor_8x8_sse2(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_dc_predictor_8x8 aom_dc_predictor_8x8_sse2
-
-void aom_dc_top_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_top_predictor_16x16_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-#define aom_dc_top_predictor_16x16 aom_dc_top_predictor_16x16_sse2
-
-void aom_dc_top_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_c
-
-void aom_dc_top_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_c
-
-void aom_dc_top_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
-
-void aom_dc_top_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_dc_top_predictor_32x16 aom_dc_top_predictor_32x16_c
-
-void aom_dc_top_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-void aom_dc_top_predictor_32x32_sse2(uint8_t* dst,
-                                     ptrdiff_t y_stride,
-                                     const uint8_t* above,
-                                     const uint8_t* left);
-#define aom_dc_top_predictor_32x32 aom_dc_top_predictor_32x32_sse2
-
-void aom_dc_top_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_top_predictor_4x4_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_top_predictor_4x4 aom_dc_top_predictor_4x4_sse2
-
-void aom_dc_top_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_c
-
-void aom_dc_top_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_c
-
-void aom_dc_top_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_c
-
-void aom_dc_top_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-void aom_dc_top_predictor_8x8_sse2(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_dc_top_predictor_8x8 aom_dc_top_predictor_8x8_sse2
-
-void aom_h_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_h_predictor_16x16_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_h_predictor_16x16 aom_h_predictor_16x16_sse2
-
-void aom_h_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_16x32 aom_h_predictor_16x32_c
-
-void aom_h_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_16x8 aom_h_predictor_16x8_c
-
-void aom_h_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
-
-void aom_h_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_h_predictor_32x16 aom_h_predictor_32x16_c
-
-void aom_h_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_h_predictor_32x32_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_h_predictor_32x32 aom_h_predictor_32x32_sse2
-
-void aom_h_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_h_predictor_4x4_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_h_predictor_4x4 aom_h_predictor_4x4_sse2
-
-void aom_h_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_4x8 aom_h_predictor_4x8_c
-
-void aom_h_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_h_predictor_8x16 aom_h_predictor_8x16_c
-
-void aom_h_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_h_predictor_8x4 aom_h_predictor_8x4_c
-
-void aom_h_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_h_predictor_8x8_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_h_predictor_8x8 aom_h_predictor_8x8_sse2
-
-void aom_highbd_iwht4x4_16_add_c(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride,
-                                 int bd);
-#define aom_highbd_iwht4x4_16_add aom_highbd_iwht4x4_16_add_c
-
-void aom_highbd_iwht4x4_1_add_c(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride,
-                                int bd);
-#define aom_highbd_iwht4x4_1_add aom_highbd_iwht4x4_1_add_c
-
-void aom_idct16x16_10_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct16x16_10_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-void aom_idct16x16_10_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_10_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct16x16_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-void aom_idct16x16_1_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct16x16_1_add_avx2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_1_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride);
-
-void aom_idct16x16_256_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct16x16_256_add_sse2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-void aom_idct16x16_256_add_avx2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_256_add)(const tran_low_t* input,
-                                          uint8_t* dest,
-                                          int dest_stride);
-
-void aom_idct16x16_38_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct16x16_38_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct16x16_38_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct32x32_1024_add_c(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct32x32_1024_add_sse2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_1024_add_ssse3(const tran_low_t* input,
-                                  uint8_t* dest,
-                                  int dest_stride);
-void aom_idct32x32_1024_add_avx2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_1024_add)(const tran_low_t* input,
-                                           uint8_t* dest,
-                                           int dest_stride);
-
-void aom_idct32x32_135_add_c(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct32x32_1024_add_sse2(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_135_add_ssse3(const tran_low_t* input,
-                                 uint8_t* dest,
-                                 int dest_stride);
-void aom_idct32x32_135_add_avx2(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_135_add)(const tran_low_t* input,
-                                          uint8_t* dest,
-                                          int dest_stride);
-
-void aom_idct32x32_1_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride);
-void aom_idct32x32_1_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-void aom_idct32x32_1_add_avx2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_1_add)(const tran_low_t* input,
-                                        uint8_t* dest,
-                                        int dest_stride);
-
-void aom_idct32x32_34_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-void aom_idct32x32_34_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-void aom_idct32x32_34_add_ssse3(const tran_low_t* input,
-                                uint8_t* dest,
-                                int dest_stride);
-void aom_idct32x32_34_add_avx2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride);
-RTCD_EXTERN void (*aom_idct32x32_34_add)(const tran_low_t* input,
-                                         uint8_t* dest,
-                                         int dest_stride);
-
-void aom_idct4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct4x4_16_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-#define aom_idct4x4_16_add aom_idct4x4_16_add_sse2
-
-void aom_idct4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-void aom_idct4x4_1_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-#define aom_idct4x4_1_add aom_idct4x4_1_add_sse2
-
-void aom_idct8x8_12_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct8x8_12_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct8x8_12_add_ssse3(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_12_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_idct8x8_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-void aom_idct8x8_1_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride);
-#define aom_idct8x8_1_add aom_idct8x8_1_add_sse2
-
-void aom_idct8x8_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_idct8x8_64_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-void aom_idct8x8_64_add_ssse3(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride);
-RTCD_EXTERN void (*aom_idct8x8_64_add)(const tran_low_t* input,
-                                       uint8_t* dest,
-                                       int dest_stride);
-
-void aom_iwht4x4_16_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride);
-void aom_iwht4x4_16_add_sse2(const tran_low_t* input,
-                             uint8_t* dest,
-                             int dest_stride);
-#define aom_iwht4x4_16_add aom_iwht4x4_16_add_sse2
-
-void aom_iwht4x4_1_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride);
-#define aom_iwht4x4_1_add aom_iwht4x4_1_add_c
-
-void aom_lpf_horizontal_4_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-void aom_lpf_horizontal_4_sse2(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit,
-                               const uint8_t* limit,
-                               const uint8_t* thresh);
-#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_sse2
-
-void aom_lpf_horizontal_4_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_c
-
-void aom_lpf_horizontal_8_c(uint8_t* s,
-                            int pitch,
-                            const uint8_t* blimit,
-                            const uint8_t* limit,
-                            const uint8_t* thresh);
-void aom_lpf_horizontal_8_sse2(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit,
-                               const uint8_t* limit,
-                               const uint8_t* thresh);
-#define aom_lpf_horizontal_8 aom_lpf_horizontal_8_sse2
-
-void aom_lpf_horizontal_8_dual_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit0,
-                                 const uint8_t* limit0,
-                                 const uint8_t* thresh0,
-                                 const uint8_t* blimit1,
-                                 const uint8_t* limit1,
-                                 const uint8_t* thresh1);
-#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_c
-
-void aom_lpf_horizontal_edge_16_c(uint8_t* s,
-                                  int pitch,
-                                  const uint8_t* blimit,
-                                  const uint8_t* limit,
-                                  const uint8_t* thresh);
-void aom_lpf_horizontal_edge_16_sse2(uint8_t* s,
-                                     int pitch,
-                                     const uint8_t* blimit,
-                                     const uint8_t* limit,
-                                     const uint8_t* thresh);
-#define aom_lpf_horizontal_edge_16 aom_lpf_horizontal_edge_16_sse2
-
-void aom_lpf_horizontal_edge_8_c(uint8_t* s,
-                                 int pitch,
-                                 const uint8_t* blimit,
-                                 const uint8_t* limit,
-                                 const uint8_t* thresh);
-void aom_lpf_horizontal_edge_8_sse2(uint8_t* s,
-                                    int pitch,
-                                    const uint8_t* blimit,
-                                    const uint8_t* limit,
-                                    const uint8_t* thresh);
-#define aom_lpf_horizontal_edge_8 aom_lpf_horizontal_edge_8_sse2
-
-void aom_lpf_vertical_16_c(uint8_t* s,
-                           int pitch,
-                           const uint8_t* blimit,
-                           const uint8_t* limit,
-                           const uint8_t* thresh);
-void aom_lpf_vertical_16_sse2(uint8_t* s,
-                              int pitch,
-                              const uint8_t* blimit,
-                              const uint8_t* limit,
-                              const uint8_t* thresh);
-#define aom_lpf_vertical_16 aom_lpf_vertical_16_sse2
-
-void aom_lpf_vertical_16_dual_c(uint8_t* s,
-                                int pitch,
-                                const uint8_t* blimit,
-                                const uint8_t* limit,
-                                const uint8_t* thresh);
-#define aom_lpf_vertical_16_dual aom_lpf_vertical_16_dual_c
-
-void aom_lpf_vertical_4_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-void aom_lpf_vertical_4_sse2(uint8_t* s,
-                             int pitch,
-                             const uint8_t* blimit,
-                             const uint8_t* limit,
-                             const uint8_t* thresh);
-#define aom_lpf_vertical_4 aom_lpf_vertical_4_sse2
-
-void aom_lpf_vertical_4_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_c
-
-void aom_lpf_vertical_8_c(uint8_t* s,
-                          int pitch,
-                          const uint8_t* blimit,
-                          const uint8_t* limit,
-                          const uint8_t* thresh);
-void aom_lpf_vertical_8_sse2(uint8_t* s,
-                             int pitch,
-                             const uint8_t* blimit,
-                             const uint8_t* limit,
-                             const uint8_t* thresh);
-#define aom_lpf_vertical_8 aom_lpf_vertical_8_sse2
-
-void aom_lpf_vertical_8_dual_c(uint8_t* s,
-                               int pitch,
-                               const uint8_t* blimit0,
-                               const uint8_t* limit0,
-                               const uint8_t* thresh0,
-                               const uint8_t* blimit1,
-                               const uint8_t* limit1,
-                               const uint8_t* thresh1);
-#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_c
-
-void aom_paeth_predictor_16x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x16 aom_paeth_predictor_16x16_c
-
-void aom_paeth_predictor_16x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_16x32 aom_paeth_predictor_16x32_c
-
-void aom_paeth_predictor_16x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_16x8 aom_paeth_predictor_16x8_c
-
-void aom_paeth_predictor_2x2_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
-
-void aom_paeth_predictor_32x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x16 aom_paeth_predictor_32x16_c
-
-void aom_paeth_predictor_32x32_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_paeth_predictor_32x32 aom_paeth_predictor_32x32_c
-
-void aom_paeth_predictor_4x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x4 aom_paeth_predictor_4x4_c
-
-void aom_paeth_predictor_4x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_4x8 aom_paeth_predictor_4x8_c
-
-void aom_paeth_predictor_8x16_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_paeth_predictor_8x16 aom_paeth_predictor_8x16_c
-
-void aom_paeth_predictor_8x4_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x4 aom_paeth_predictor_8x4_c
-
-void aom_paeth_predictor_8x8_c(uint8_t* dst,
-                               ptrdiff_t y_stride,
-                               const uint8_t* above,
-                               const uint8_t* left);
-#define aom_paeth_predictor_8x8 aom_paeth_predictor_8x8_c
-
-void aom_scaled_2d_c(const uint8_t* src,
-                     ptrdiff_t src_stride,
-                     uint8_t* dst,
-                     ptrdiff_t dst_stride,
-                     const int16_t* filter_x,
-                     int x_step_q4,
-                     const int16_t* filter_y,
-                     int y_step_q4,
-                     int w,
-                     int h);
-void aom_scaled_2d_ssse3(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-RTCD_EXTERN void (*aom_scaled_2d)(const uint8_t* src,
-                                  ptrdiff_t src_stride,
-                                  uint8_t* dst,
-                                  ptrdiff_t dst_stride,
-                                  const int16_t* filter_x,
-                                  int x_step_q4,
-                                  const int16_t* filter_y,
-                                  int y_step_q4,
-                                  int w,
-                                  int h);
-
-void aom_scaled_avg_2d_c(const uint8_t* src,
-                         ptrdiff_t src_stride,
-                         uint8_t* dst,
-                         ptrdiff_t dst_stride,
-                         const int16_t* filter_x,
-                         int x_step_q4,
-                         const int16_t* filter_y,
-                         int y_step_q4,
-                         int w,
-                         int h);
-#define aom_scaled_avg_2d aom_scaled_avg_2d_c
-
-void aom_scaled_avg_horiz_c(const uint8_t* src,
-                            ptrdiff_t src_stride,
-                            uint8_t* dst,
-                            ptrdiff_t dst_stride,
-                            const int16_t* filter_x,
-                            int x_step_q4,
-                            const int16_t* filter_y,
-                            int y_step_q4,
-                            int w,
-                            int h);
-#define aom_scaled_avg_horiz aom_scaled_avg_horiz_c
-
-void aom_scaled_avg_vert_c(const uint8_t* src,
-                           ptrdiff_t src_stride,
-                           uint8_t* dst,
-                           ptrdiff_t dst_stride,
-                           const int16_t* filter_x,
-                           int x_step_q4,
-                           const int16_t* filter_y,
-                           int y_step_q4,
-                           int w,
-                           int h);
-#define aom_scaled_avg_vert aom_scaled_avg_vert_c
-
-void aom_scaled_horiz_c(const uint8_t* src,
-                        ptrdiff_t src_stride,
-                        uint8_t* dst,
-                        ptrdiff_t dst_stride,
-                        const int16_t* filter_x,
-                        int x_step_q4,
-                        const int16_t* filter_y,
-                        int y_step_q4,
-                        int w,
-                        int h);
-#define aom_scaled_horiz aom_scaled_horiz_c
-
-void aom_scaled_vert_c(const uint8_t* src,
-                       ptrdiff_t src_stride,
-                       uint8_t* dst,
-                       ptrdiff_t dst_stride,
-                       const int16_t* filter_x,
-                       int x_step_q4,
-                       const int16_t* filter_y,
-                       int y_step_q4,
-                       int w,
-                       int h);
-#define aom_scaled_vert aom_scaled_vert_c
-
-void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x16 aom_smooth_h_predictor_16x16_c
-
-void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_16x32 aom_smooth_h_predictor_16x32_c
-
-void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_16x8 aom_smooth_h_predictor_16x8_c
-
-void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
-
-void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x16 aom_smooth_h_predictor_32x16_c
-
-void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_h_predictor_32x32 aom_smooth_h_predictor_32x32_c
-
-void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x4 aom_smooth_h_predictor_4x4_c
-
-void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_4x8 aom_smooth_h_predictor_4x8_c
-
-void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_h_predictor_8x16 aom_smooth_h_predictor_8x16_c
-
-void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x4 aom_smooth_h_predictor_8x4_c
-
-void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_h_predictor_8x8 aom_smooth_h_predictor_8x8_c
-
-void aom_smooth_predictor_16x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x16 aom_smooth_predictor_16x16_c
-
-void aom_smooth_predictor_16x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_16x32 aom_smooth_predictor_16x32_c
-
-void aom_smooth_predictor_16x8_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_16x8 aom_smooth_predictor_16x8_c
-
-void aom_smooth_predictor_2x2_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
-
-void aom_smooth_predictor_32x16_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x16 aom_smooth_predictor_32x16_c
-
-void aom_smooth_predictor_32x32_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_predictor_32x32 aom_smooth_predictor_32x32_c
-
-void aom_smooth_predictor_4x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x4 aom_smooth_predictor_4x4_c
-
-void aom_smooth_predictor_4x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_4x8 aom_smooth_predictor_4x8_c
-
-void aom_smooth_predictor_8x16_c(uint8_t* dst,
-                                 ptrdiff_t y_stride,
-                                 const uint8_t* above,
-                                 const uint8_t* left);
-#define aom_smooth_predictor_8x16 aom_smooth_predictor_8x16_c
-
-void aom_smooth_predictor_8x4_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x4 aom_smooth_predictor_8x4_c
-
-void aom_smooth_predictor_8x8_c(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_smooth_predictor_8x8 aom_smooth_predictor_8x8_c
-
-void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x16 aom_smooth_v_predictor_16x16_c
-
-void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_16x32 aom_smooth_v_predictor_16x32_c
-
-void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_16x8 aom_smooth_v_predictor_16x8_c
-
-void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
-
-void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x16 aom_smooth_v_predictor_32x16_c
-
-void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
-                                    ptrdiff_t y_stride,
-                                    const uint8_t* above,
-                                    const uint8_t* left);
-#define aom_smooth_v_predictor_32x32 aom_smooth_v_predictor_32x32_c
-
-void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x4 aom_smooth_v_predictor_4x4_c
-
-void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_4x8 aom_smooth_v_predictor_4x8_c
-
-void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
-                                   ptrdiff_t y_stride,
-                                   const uint8_t* above,
-                                   const uint8_t* left);
-#define aom_smooth_v_predictor_8x16 aom_smooth_v_predictor_8x16_c
-
-void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x4 aom_smooth_v_predictor_8x4_c
-
-void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
-                                  ptrdiff_t y_stride,
-                                  const uint8_t* above,
-                                  const uint8_t* left);
-#define aom_smooth_v_predictor_8x8 aom_smooth_v_predictor_8x8_c
-
-void aom_v_predictor_16x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_v_predictor_16x16_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_v_predictor_16x16 aom_v_predictor_16x16_sse2
-
-void aom_v_predictor_16x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_16x32 aom_v_predictor_16x32_c
-
-void aom_v_predictor_16x8_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_16x8 aom_v_predictor_16x8_c
-
-void aom_v_predictor_2x2_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
-
-void aom_v_predictor_32x16_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-#define aom_v_predictor_32x16 aom_v_predictor_32x16_c
-
-void aom_v_predictor_32x32_c(uint8_t* dst,
-                             ptrdiff_t y_stride,
-                             const uint8_t* above,
-                             const uint8_t* left);
-void aom_v_predictor_32x32_sse2(uint8_t* dst,
-                                ptrdiff_t y_stride,
-                                const uint8_t* above,
-                                const uint8_t* left);
-#define aom_v_predictor_32x32 aom_v_predictor_32x32_sse2
-
-void aom_v_predictor_4x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_v_predictor_4x4_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_v_predictor_4x4 aom_v_predictor_4x4_sse2
-
-void aom_v_predictor_4x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_4x8 aom_v_predictor_4x8_c
-
-void aom_v_predictor_8x16_c(uint8_t* dst,
-                            ptrdiff_t y_stride,
-                            const uint8_t* above,
-                            const uint8_t* left);
-#define aom_v_predictor_8x16 aom_v_predictor_8x16_c
-
-void aom_v_predictor_8x4_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-#define aom_v_predictor_8x4 aom_v_predictor_8x4_c
-
-void aom_v_predictor_8x8_c(uint8_t* dst,
-                           ptrdiff_t y_stride,
-                           const uint8_t* above,
-                           const uint8_t* left);
-void aom_v_predictor_8x8_sse2(uint8_t* dst,
-                              ptrdiff_t y_stride,
-                              const uint8_t* above,
-                              const uint8_t* left);
-#define aom_v_predictor_8x8 aom_v_predictor_8x8_sse2
-
-void aom_dsp_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-
-  aom_blend_a64_hmask = aom_blend_a64_hmask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_hmask = aom_blend_a64_hmask_sse4_1;
-  aom_blend_a64_mask = aom_blend_a64_mask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_mask = aom_blend_a64_mask_sse4_1;
-  aom_blend_a64_vmask = aom_blend_a64_vmask_c;
-  if (flags & HAS_SSE4_1)
-    aom_blend_a64_vmask = aom_blend_a64_vmask_sse4_1;
-  aom_convolve8 = aom_convolve8_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8 = aom_convolve8_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8 = aom_convolve8_avx2;
-  aom_convolve8_avg = aom_convolve8_avg_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg = aom_convolve8_avg_ssse3;
-  aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg_horiz = aom_convolve8_avg_horiz_ssse3;
-  aom_convolve8_avg_vert = aom_convolve8_avg_vert_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_avg_vert = aom_convolve8_avg_vert_ssse3;
-  aom_convolve8_horiz = aom_convolve8_horiz_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_horiz = aom_convolve8_horiz_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8_horiz = aom_convolve8_horiz_avx2;
-  aom_convolve8_vert = aom_convolve8_vert_sse2;
-  if (flags & HAS_SSSE3)
-    aom_convolve8_vert = aom_convolve8_vert_ssse3;
-  if (flags & HAS_AVX2)
-    aom_convolve8_vert = aom_convolve8_vert_avx2;
-  aom_d153_predictor_16x16 = aom_d153_predictor_16x16_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_16x16 = aom_d153_predictor_16x16_ssse3;
-  aom_d153_predictor_32x32 = aom_d153_predictor_32x32_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_32x32 = aom_d153_predictor_32x32_ssse3;
-  aom_d153_predictor_4x4 = aom_d153_predictor_4x4_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_4x4 = aom_d153_predictor_4x4_ssse3;
-  aom_d153_predictor_8x8 = aom_d153_predictor_8x8_c;
-  if (flags & HAS_SSSE3)
-    aom_d153_predictor_8x8 = aom_d153_predictor_8x8_ssse3;
-  aom_d63e_predictor_4x4 = aom_d63e_predictor_4x4_c;
-  if (flags & HAS_SSSE3)
-    aom_d63e_predictor_4x4 = aom_d63e_predictor_4x4_ssse3;
-  aom_idct16x16_10_add = aom_idct16x16_10_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_10_add = aom_idct16x16_10_add_avx2;
-  aom_idct16x16_1_add = aom_idct16x16_1_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_1_add = aom_idct16x16_1_add_avx2;
-  aom_idct16x16_256_add = aom_idct16x16_256_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_256_add = aom_idct16x16_256_add_avx2;
-  aom_idct16x16_38_add = aom_idct16x16_38_add_c;
-  if (flags & HAS_AVX2)
-    aom_idct16x16_38_add = aom_idct16x16_38_add_avx2;
-  aom_idct32x32_1024_add = aom_idct32x32_1024_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_1024_add = aom_idct32x32_1024_add_avx2;
-  aom_idct32x32_135_add = aom_idct32x32_1024_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_135_add = aom_idct32x32_135_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_135_add = aom_idct32x32_135_add_avx2;
-  aom_idct32x32_1_add = aom_idct32x32_1_add_sse2;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_1_add = aom_idct32x32_1_add_avx2;
-  aom_idct32x32_34_add = aom_idct32x32_34_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_ssse3;
-  if (flags & HAS_AVX2)
-    aom_idct32x32_34_add = aom_idct32x32_34_add_avx2;
-  aom_idct8x8_12_add = aom_idct8x8_12_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct8x8_12_add = aom_idct8x8_12_add_ssse3;
-  aom_idct8x8_64_add = aom_idct8x8_64_add_sse2;
-  if (flags & HAS_SSSE3)
-    aom_idct8x8_64_add = aom_idct8x8_64_add_ssse3;
-  aom_scaled_2d = aom_scaled_2d_c;
-  if (flags & HAS_SSSE3)
-    aom_scaled_2d = aom_scaled_2d_ssse3;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/win/x64/aom_scale_rtcd.h b/third_party/libaom/source/config/win/x64/aom_scale_rtcd.h
deleted file mode 100644
index fbf3bde..0000000
--- a/third_party/libaom/source/config/win/x64/aom_scale_rtcd.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef AOM_SCALE_RTCD_H_
-#define AOM_SCALE_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-struct yv12_buffer_config;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
-#define aom_extend_frame_borders aom_extend_frame_borders_c
-
-void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
-#define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
-
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
-#define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
-
-void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
-                                     unsigned int source_width,
-                                     unsigned char* dest,
-                                     unsigned int dest_width);
-#define aom_horizontal_line_2_1_scale aom_horizontal_line_2_1_scale_c
-
-void aom_horizontal_line_5_3_scale_c(const unsigned char* source,
-                                     unsigned int source_width,
-                                     unsigned char* dest,
-                                     unsigned int dest_width);
-#define aom_horizontal_line_5_3_scale aom_horizontal_line_5_3_scale_c
-
-void aom_horizontal_line_5_4_scale_c(const unsigned char* source,
-                                     unsigned int source_width,
-                                     unsigned char* dest,
-                                     unsigned int dest_width);
-#define aom_horizontal_line_5_4_scale aom_horizontal_line_5_4_scale_c
-
-void aom_vertical_band_2_1_scale_c(unsigned char* source,
-                                   int src_pitch,
-                                   unsigned char* dest,
-                                   int dest_pitch,
-                                   unsigned int dest_width);
-#define aom_vertical_band_2_1_scale aom_vertical_band_2_1_scale_c
-
-void aom_vertical_band_2_1_scale_i_c(unsigned char* source,
-                                     int src_pitch,
-                                     unsigned char* dest,
-                                     int dest_pitch,
-                                     unsigned int dest_width);
-#define aom_vertical_band_2_1_scale_i aom_vertical_band_2_1_scale_i_c
-
-void aom_vertical_band_5_3_scale_c(unsigned char* source,
-                                   int src_pitch,
-                                   unsigned char* dest,
-                                   int dest_pitch,
-                                   unsigned int dest_width);
-#define aom_vertical_band_5_3_scale aom_vertical_band_5_3_scale_c
-
-void aom_vertical_band_5_4_scale_c(unsigned char* source,
-                                   int src_pitch,
-                                   unsigned char* dest,
-                                   int dest_pitch,
-                                   unsigned int dest_width);
-#define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
-
-void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
-#define aom_yv12_copy_frame aom_yv12_copy_frame_c
-
-void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
-                       struct yv12_buffer_config* dst_bc);
-#define aom_yv12_copy_u aom_yv12_copy_u_c
-
-void aom_yv12_copy_v_c(const struct yv12_buffer_config* src_bc,
-                       struct yv12_buffer_config* dst_bc);
-#define aom_yv12_copy_v aom_yv12_copy_v_c
-
-void aom_yv12_copy_y_c(const struct yv12_buffer_config* src_ybc,
-                       struct yv12_buffer_config* dst_ybc);
-#define aom_yv12_copy_y aom_yv12_copy_y_c
-
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
-#define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
-
-void aom_scale_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/win/x64/av1_rtcd.h b/third_party/libaom/source/config/win/x64/av1_rtcd.h
deleted file mode 100644
index 68f06b3..0000000
--- a/third_party/libaom/source/config/win/x64/av1_rtcd.h
+++ /dev/null
@@ -1,983 +0,0 @@
-#ifndef AV1_RTCD_H_
-#define AV1_RTCD_H_
-
-#ifdef RTCD_C
-#define RTCD_EXTERN
-#else
-#define RTCD_EXTERN extern
-#endif
-
-/*
- * AV1
- */
-
-#include "aom/aom_integer.h"
-#include "aom_dsp/txfm_common.h"
-#include "av1/common/av1_txfm.h"
-#include "av1/common/common.h"
-#include "av1/common/convolve.h"
-#include "av1/common/enums.h"
-#include "av1/common/filter.h"
-#include "av1/common/odintrin.h"
-#include "av1/common/quant_common.h"
-
-struct macroblockd;
-
-/* Encoder forward decls */
-struct macroblock;
-struct txfm_param;
-struct aom_variance_vtable;
-struct search_site_config;
-struct mv;
-union int_mv;
-struct yv12_buffer_config;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void aom_clpf_block_c(uint8_t* dst,
-                      const uint16_t* src,
-                      int dstride,
-                      int sstride,
-                      int sizex,
-                      int sizey,
-                      unsigned int strength,
-                      unsigned int bd);
-void aom_clpf_block_sse2(uint8_t* dst,
-                         const uint16_t* src,
-                         int dstride,
-                         int sstride,
-                         int sizex,
-                         int sizey,
-                         unsigned int strength,
-                         unsigned int bd);
-void aom_clpf_block_ssse3(uint8_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_block_sse4_1(uint8_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_block)(uint8_t* dst,
-                                   const uint16_t* src,
-                                   int dstride,
-                                   int sstride,
-                                   int sizex,
-                                   int sizey,
-                                   unsigned int strength,
-                                   unsigned int bd);
-
-void aom_clpf_block_hbd_c(uint16_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_block_hbd_sse2(uint16_t* dst,
-                             const uint16_t* src,
-                             int dstride,
-                             int sstride,
-                             int sizex,
-                             int sizey,
-                             unsigned int strength,
-                             unsigned int bd);
-void aom_clpf_block_hbd_ssse3(uint16_t* dst,
-                              const uint16_t* src,
-                              int dstride,
-                              int sstride,
-                              int sizex,
-                              int sizey,
-                              unsigned int strength,
-                              unsigned int bd);
-void aom_clpf_block_hbd_sse4_1(uint16_t* dst,
-                               const uint16_t* src,
-                               int dstride,
-                               int sstride,
-                               int sizex,
-                               int sizey,
-                               unsigned int strength,
-                               unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_block_hbd)(uint16_t* dst,
-                                       const uint16_t* src,
-                                       int dstride,
-                                       int sstride,
-                                       int sizex,
-                                       int sizey,
-                                       unsigned int strength,
-                                       unsigned int bd);
-
-void aom_clpf_hblock_c(uint8_t* dst,
-                       const uint16_t* src,
-                       int dstride,
-                       int sstride,
-                       int sizex,
-                       int sizey,
-                       unsigned int strength,
-                       unsigned int bd);
-void aom_clpf_hblock_sse2(uint8_t* dst,
-                          const uint16_t* src,
-                          int dstride,
-                          int sstride,
-                          int sizex,
-                          int sizey,
-                          unsigned int strength,
-                          unsigned int bd);
-void aom_clpf_hblock_ssse3(uint8_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-void aom_clpf_hblock_sse4_1(uint8_t* dst,
-                            const uint16_t* src,
-                            int dstride,
-                            int sstride,
-                            int sizex,
-                            int sizey,
-                            unsigned int strength,
-                            unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_hblock)(uint8_t* dst,
-                                    const uint16_t* src,
-                                    int dstride,
-                                    int sstride,
-                                    int sizex,
-                                    int sizey,
-                                    unsigned int strength,
-                                    unsigned int bd);
-
-void aom_clpf_hblock_hbd_c(uint16_t* dst,
-                           const uint16_t* src,
-                           int dstride,
-                           int sstride,
-                           int sizex,
-                           int sizey,
-                           unsigned int strength,
-                           unsigned int bd);
-void aom_clpf_hblock_hbd_sse2(uint16_t* dst,
-                              const uint16_t* src,
-                              int dstride,
-                              int sstride,
-                              int sizex,
-                              int sizey,
-                              unsigned int strength,
-                              unsigned int bd);
-void aom_clpf_hblock_hbd_ssse3(uint16_t* dst,
-                               const uint16_t* src,
-                               int dstride,
-                               int sstride,
-                               int sizex,
-                               int sizey,
-                               unsigned int strength,
-                               unsigned int bd);
-void aom_clpf_hblock_hbd_sse4_1(uint16_t* dst,
-                                const uint16_t* src,
-                                int dstride,
-                                int sstride,
-                                int sizex,
-                                int sizey,
-                                unsigned int strength,
-                                unsigned int bd);
-RTCD_EXTERN void (*aom_clpf_hblock_hbd)(uint16_t* dst,
-                                        const uint16_t* src,
-                                        int dstride,
-                                        int sstride,
-                                        int sizex,
-                                        int sizey,
-                                        unsigned int strength,
-                                        unsigned int bd);
-
-void av1_convolve_2d_c(const uint8_t* src,
-                       int src_stride,
-                       CONV_BUF_TYPE* dst,
-                       int dst_stride,
-                       int w,
-                       int h,
-                       InterpFilterParams* filter_params_x,
-                       InterpFilterParams* filter_params_y,
-                       const int subpel_x_q4,
-                       const int subpel_y_q4,
-                       ConvolveParams* conv_params);
-void av1_convolve_2d_sse2(const uint8_t* src,
-                          int src_stride,
-                          CONV_BUF_TYPE* dst,
-                          int dst_stride,
-                          int w,
-                          int h,
-                          InterpFilterParams* filter_params_x,
-                          InterpFilterParams* filter_params_y,
-                          const int subpel_x_q4,
-                          const int subpel_y_q4,
-                          ConvolveParams* conv_params);
-#define av1_convolve_2d av1_convolve_2d_sse2
-
-void av1_convolve_2d_scale_c(const uint8_t* src,
-                             int src_stride,
-                             CONV_BUF_TYPE* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             InterpFilterParams* filter_params_x,
-                             InterpFilterParams* filter_params_y,
-                             const int subpel_x_qn,
-                             const int x_step_qn,
-                             const int subpel_y_q4,
-                             const int y_step_qn,
-                             ConvolveParams* conv_params);
-#define av1_convolve_2d_scale av1_convolve_2d_scale_c
-
-void av1_convolve_horiz_c(const uint8_t* src,
-                          int src_stride,
-                          uint8_t* dst,
-                          int dst_stride,
-                          int w,
-                          int h,
-                          const InterpFilterParams fp,
-                          const int subpel_x_q4,
-                          int x_step_q4,
-                          ConvolveParams* conv_params);
-void av1_convolve_horiz_ssse3(const uint8_t* src,
-                              int src_stride,
-                              uint8_t* dst,
-                              int dst_stride,
-                              int w,
-                              int h,
-                              const InterpFilterParams fp,
-                              const int subpel_x_q4,
-                              int x_step_q4,
-                              ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_horiz)(const uint8_t* src,
-                                       int src_stride,
-                                       uint8_t* dst,
-                                       int dst_stride,
-                                       int w,
-                                       int h,
-                                       const InterpFilterParams fp,
-                                       const int subpel_x_q4,
-                                       int x_step_q4,
-                                       ConvolveParams* conv_params);
-
-void av1_convolve_rounding_c(const int32_t* src,
-                             int src_stride,
-                             uint8_t* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             int bits);
-void av1_convolve_rounding_avx2(const int32_t* src,
-                                int src_stride,
-                                uint8_t* dst,
-                                int dst_stride,
-                                int w,
-                                int h,
-                                int bits);
-RTCD_EXTERN void (*av1_convolve_rounding)(const int32_t* src,
-                                          int src_stride,
-                                          uint8_t* dst,
-                                          int dst_stride,
-                                          int w,
-                                          int h,
-                                          int bits);
-
-void av1_convolve_vert_c(const uint8_t* src,
-                         int src_stride,
-                         uint8_t* dst,
-                         int dst_stride,
-                         int w,
-                         int h,
-                         const InterpFilterParams fp,
-                         const int subpel_x_q4,
-                         int x_step_q4,
-                         ConvolveParams* conv_params);
-void av1_convolve_vert_ssse3(const uint8_t* src,
-                             int src_stride,
-                             uint8_t* dst,
-                             int dst_stride,
-                             int w,
-                             int h,
-                             const InterpFilterParams fp,
-                             const int subpel_x_q4,
-                             int x_step_q4,
-                             ConvolveParams* conv_params);
-RTCD_EXTERN void (*av1_convolve_vert)(const uint8_t* src,
-                                      int src_stride,
-                                      uint8_t* dst,
-                                      int dst_stride,
-                                      int w,
-                                      int h,
-                                      const InterpFilterParams fp,
-                                      const int subpel_x_q4,
-                                      int x_step_q4,
-                                      ConvolveParams* conv_params);
-
-void av1_iht16x16_256_add_c(const tran_low_t* input,
-                            uint8_t* output,
-                            int pitch,
-                            const struct txfm_param* param);
-void av1_iht16x16_256_add_sse2(const tran_low_t* input,
-                               uint8_t* output,
-                               int pitch,
-                               const struct txfm_param* param);
-void av1_iht16x16_256_add_avx2(const tran_low_t* input,
-                               uint8_t* output,
-                               int pitch,
-                               const struct txfm_param* param);
-RTCD_EXTERN void (*av1_iht16x16_256_add)(const tran_low_t* input,
-                                         uint8_t* output,
-                                         int pitch,
-                                         const struct txfm_param* param);
-
-void av1_iht16x32_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-void av1_iht16x32_512_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride,
-                               const struct txfm_param* param);
-#define av1_iht16x32_512_add av1_iht16x32_512_add_sse2
-
-void av1_iht16x4_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht16x4_64_add av1_iht16x4_64_add_c
-
-void av1_iht16x8_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-void av1_iht16x8_128_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride,
-                              const struct txfm_param* param);
-#define av1_iht16x8_128_add av1_iht16x8_128_add_sse2
-
-void av1_iht32x16_512_add_c(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-void av1_iht32x16_512_add_sse2(const tran_low_t* input,
-                               uint8_t* dest,
-                               int dest_stride,
-                               const struct txfm_param* param);
-#define av1_iht32x16_512_add av1_iht32x16_512_add_sse2
-
-void av1_iht32x32_1024_add_c(const tran_low_t* input,
-                             uint8_t* output,
-                             int pitch,
-                             const struct txfm_param* param);
-#define av1_iht32x32_1024_add av1_iht32x32_1024_add_c
-
-void av1_iht32x8_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht32x8_256_add av1_iht32x8_256_add_c
-
-void av1_iht4x16_64_add_c(const tran_low_t* input,
-                          uint8_t* dest,
-                          int dest_stride,
-                          const struct txfm_param* param);
-#define av1_iht4x16_64_add av1_iht4x16_64_add_c
-
-void av1_iht4x4_16_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht4x4_16_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht4x4_16_add av1_iht4x4_16_add_sse2
-
-void av1_iht4x8_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht4x8_32_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht4x8_32_add av1_iht4x8_32_add_sse2
-
-void av1_iht8x16_128_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-void av1_iht8x16_128_add_sse2(const tran_low_t* input,
-                              uint8_t* dest,
-                              int dest_stride,
-                              const struct txfm_param* param);
-#define av1_iht8x16_128_add av1_iht8x16_128_add_sse2
-
-void av1_iht8x32_256_add_c(const tran_low_t* input,
-                           uint8_t* dest,
-                           int dest_stride,
-                           const struct txfm_param* param);
-#define av1_iht8x32_256_add av1_iht8x32_256_add_c
-
-void av1_iht8x4_32_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht8x4_32_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht8x4_32_add av1_iht8x4_32_add_sse2
-
-void av1_iht8x8_64_add_c(const tran_low_t* input,
-                         uint8_t* dest,
-                         int dest_stride,
-                         const struct txfm_param* param);
-void av1_iht8x8_64_add_sse2(const tran_low_t* input,
-                            uint8_t* dest,
-                            int dest_stride,
-                            const struct txfm_param* param);
-#define av1_iht8x8_64_add av1_iht8x8_64_add_sse2
-
-void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-void av1_inv_txfm2d_add_16x16_sse4_1(const int32_t* input,
-                                     uint16_t* output,
-                                     int stride,
-                                     int tx_type,
-                                     int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_16x16)(const int32_t* input,
-                                             uint16_t* output,
-                                             int stride,
-                                             int tx_type,
-                                             int bd);
-
-void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
-
-void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
-
-void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
-
-void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-void av1_inv_txfm2d_add_32x32_avx2(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_32x32)(const int32_t* input,
-                                             uint16_t* output,
-                                             int stride,
-                                             int tx_type,
-                                             int bd);
-
-void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-void av1_inv_txfm2d_add_4x4_sse4_1(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_4x4)(const int32_t* input,
-                                           uint16_t* output,
-                                           int stride,
-                                           int tx_type,
-                                           int bd);
-
-void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
-
-void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
-                                uint16_t* output,
-                                int stride,
-                                int tx_type,
-                                int bd);
-#define av1_inv_txfm2d_add_64x64 av1_inv_txfm2d_add_64x64_c
-
-void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
-                               uint16_t* output,
-                               int stride,
-                               int tx_type,
-                               int bd);
-#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
-
-void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
-
-void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
-                              uint16_t* output,
-                              int stride,
-                              int tx_type,
-                              int bd);
-void av1_inv_txfm2d_add_8x8_sse4_1(const int32_t* input,
-                                   uint16_t* output,
-                                   int stride,
-                                   int tx_type,
-                                   int bd);
-RTCD_EXTERN void (*av1_inv_txfm2d_add_8x8)(const int32_t* input,
-                                           uint16_t* output,
-                                           int stride,
-                                           int tx_type,
-                                           int bd);
-
-void av1_lowbd_convolve_init_c(void);
-void av1_lowbd_convolve_init_ssse3(void);
-RTCD_EXTERN void (*av1_lowbd_convolve_init)(void);
-
-void av1_warp_affine_c(const int32_t* mat,
-                       const uint8_t* ref,
-                       int width,
-                       int height,
-                       int stride,
-                       uint8_t* pred,
-                       int p_col,
-                       int p_row,
-                       int p_width,
-                       int p_height,
-                       int p_stride,
-                       int subsampling_x,
-                       int subsampling_y,
-                       ConvolveParams* conv_params,
-                       int16_t alpha,
-                       int16_t beta,
-                       int16_t gamma,
-                       int16_t delta);
-void av1_warp_affine_sse2(const int32_t* mat,
-                          const uint8_t* ref,
-                          int width,
-                          int height,
-                          int stride,
-                          uint8_t* pred,
-                          int p_col,
-                          int p_row,
-                          int p_width,
-                          int p_height,
-                          int p_stride,
-                          int subsampling_x,
-                          int subsampling_y,
-                          ConvolveParams* conv_params,
-                          int16_t alpha,
-                          int16_t beta,
-                          int16_t gamma,
-                          int16_t delta);
-void av1_warp_affine_ssse3(const int32_t* mat,
-                           const uint8_t* ref,
-                           int width,
-                           int height,
-                           int stride,
-                           uint8_t* pred,
-                           int p_col,
-                           int p_row,
-                           int p_width,
-                           int p_height,
-                           int p_stride,
-                           int subsampling_x,
-                           int subsampling_y,
-                           ConvolveParams* conv_params,
-                           int16_t alpha,
-                           int16_t beta,
-                           int16_t gamma,
-                           int16_t delta);
-RTCD_EXTERN void (*av1_warp_affine)(const int32_t* mat,
-                                    const uint8_t* ref,
-                                    int width,
-                                    int height,
-                                    int stride,
-                                    uint8_t* pred,
-                                    int p_col,
-                                    int p_row,
-                                    int p_width,
-                                    int p_height,
-                                    int p_stride,
-                                    int subsampling_x,
-                                    int subsampling_y,
-                                    ConvolveParams* conv_params,
-                                    int16_t alpha,
-                                    int16_t beta,
-                                    int16_t gamma,
-                                    int16_t delta);
-
-void cdef_direction_4x4_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-void cdef_direction_4x4_sse2(uint16_t* y,
-                             int ystride,
-                             const uint16_t* in,
-                             int threshold,
-                             int dir,
-                             int damping);
-void cdef_direction_4x4_ssse3(uint16_t* y,
-                              int ystride,
-                              const uint16_t* in,
-                              int threshold,
-                              int dir,
-                              int damping);
-void cdef_direction_4x4_sse4_1(uint16_t* y,
-                               int ystride,
-                               const uint16_t* in,
-                               int threshold,
-                               int dir,
-                               int damping);
-RTCD_EXTERN void (*cdef_direction_4x4)(uint16_t* y,
-                                       int ystride,
-                                       const uint16_t* in,
-                                       int threshold,
-                                       int dir,
-                                       int damping);
-
-void cdef_direction_8x8_c(uint16_t* y,
-                          int ystride,
-                          const uint16_t* in,
-                          int threshold,
-                          int dir,
-                          int damping);
-void cdef_direction_8x8_sse2(uint16_t* y,
-                             int ystride,
-                             const uint16_t* in,
-                             int threshold,
-                             int dir,
-                             int damping);
-void cdef_direction_8x8_ssse3(uint16_t* y,
-                              int ystride,
-                              const uint16_t* in,
-                              int threshold,
-                              int dir,
-                              int damping);
-void cdef_direction_8x8_sse4_1(uint16_t* y,
-                               int ystride,
-                               const uint16_t* in,
-                               int threshold,
-                               int dir,
-                               int damping);
-RTCD_EXTERN void (*cdef_direction_8x8)(uint16_t* y,
-                                       int ystride,
-                                       const uint16_t* in,
-                                       int threshold,
-                                       int dir,
-                                       int damping);
-
-int cdef_find_dir_c(const uint16_t* img,
-                    int stride,
-                    int32_t* var,
-                    int coeff_shift);
-int cdef_find_dir_sse2(const uint16_t* img,
-                       int stride,
-                       int32_t* var,
-                       int coeff_shift);
-int cdef_find_dir_ssse3(const uint16_t* img,
-                        int stride,
-                        int32_t* var,
-                        int coeff_shift);
-int cdef_find_dir_sse4_1(const uint16_t* img,
-                         int stride,
-                         int32_t* var,
-                         int coeff_shift);
-RTCD_EXTERN int (*cdef_find_dir)(const uint16_t* img,
-                                 int stride,
-                                 int32_t* var,
-                                 int coeff_shift);
-
-void copy_4x4_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-void copy_4x4_16bit_to_16bit_sse2(uint16_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_4x4_16bit_to_16bit_ssse3(uint16_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-void copy_4x4_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride);
-RTCD_EXTERN void (*copy_4x4_16bit_to_16bit)(uint16_t* dst,
-                                            int dstride,
-                                            const uint16_t* src,
-                                            int sstride);
-
-void copy_4x4_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-void copy_4x4_16bit_to_8bit_sse2(uint8_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride);
-void copy_4x4_16bit_to_8bit_ssse3(uint8_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_4x4_16bit_to_8bit_sse4_1(uint8_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-RTCD_EXTERN void (*copy_4x4_16bit_to_8bit)(uint8_t* dst,
-                                           int dstride,
-                                           const uint16_t* src,
-                                           int sstride);
-
-void copy_8x8_16bit_to_16bit_c(uint16_t* dst,
-                               int dstride,
-                               const uint16_t* src,
-                               int sstride);
-void copy_8x8_16bit_to_16bit_sse2(uint16_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_8x8_16bit_to_16bit_ssse3(uint16_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-void copy_8x8_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride);
-RTCD_EXTERN void (*copy_8x8_16bit_to_16bit)(uint16_t* dst,
-                                            int dstride,
-                                            const uint16_t* src,
-                                            int sstride);
-
-void copy_8x8_16bit_to_8bit_c(uint8_t* dst,
-                              int dstride,
-                              const uint16_t* src,
-                              int sstride);
-void copy_8x8_16bit_to_8bit_sse2(uint8_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride);
-void copy_8x8_16bit_to_8bit_ssse3(uint8_t* dst,
-                                  int dstride,
-                                  const uint16_t* src,
-                                  int sstride);
-void copy_8x8_16bit_to_8bit_sse4_1(uint8_t* dst,
-                                   int dstride,
-                                   const uint16_t* src,
-                                   int sstride);
-RTCD_EXTERN void (*copy_8x8_16bit_to_8bit)(uint8_t* dst,
-                                           int dstride,
-                                           const uint16_t* src,
-                                           int sstride);
-
-void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
-                                 int dstride,
-                                 const uint16_t* src,
-                                 int sstride,
-                                 int v,
-                                 int h);
-void copy_rect8_16bit_to_16bit_sse2(uint16_t* dst,
-                                    int dstride,
-                                    const uint16_t* src,
-                                    int sstride,
-                                    int v,
-                                    int h);
-void copy_rect8_16bit_to_16bit_ssse3(uint16_t* dst,
-                                     int dstride,
-                                     const uint16_t* src,
-                                     int sstride,
-                                     int v,
-                                     int h);
-void copy_rect8_16bit_to_16bit_sse4_1(uint16_t* dst,
-                                      int dstride,
-                                      const uint16_t* src,
-                                      int sstride,
-                                      int v,
-                                      int h);
-RTCD_EXTERN void (*copy_rect8_16bit_to_16bit)(uint16_t* dst,
-                                              int dstride,
-                                              const uint16_t* src,
-                                              int sstride,
-                                              int v,
-                                              int h);
-
-void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
-                                int dstride,
-                                const uint8_t* src,
-                                int sstride,
-                                int v,
-                                int h);
-void copy_rect8_8bit_to_16bit_sse2(uint16_t* dst,
-                                   int dstride,
-                                   const uint8_t* src,
-                                   int sstride,
-                                   int v,
-                                   int h);
-void copy_rect8_8bit_to_16bit_ssse3(uint16_t* dst,
-                                    int dstride,
-                                    const uint8_t* src,
-                                    int sstride,
-                                    int v,
-                                    int h);
-void copy_rect8_8bit_to_16bit_sse4_1(uint16_t* dst,
-                                     int dstride,
-                                     const uint8_t* src,
-                                     int sstride,
-                                     int v,
-                                     int h);
-RTCD_EXTERN void (*copy_rect8_8bit_to_16bit)(uint16_t* dst,
-                                             int dstride,
-                                             const uint8_t* src,
-                                             int sstride,
-                                             int v,
-                                             int h);
-
-void av1_rtcd(void);
-
-#ifdef RTCD_C
-#include "aom_ports/x86.h"
-static void setup_rtcd_internal(void) {
-  int flags = x86_simd_caps();
-
-  (void)flags;
-
-  aom_clpf_block = aom_clpf_block_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_block = aom_clpf_block_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_block = aom_clpf_block_sse4_1;
-  aom_clpf_block_hbd = aom_clpf_block_hbd_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_block_hbd = aom_clpf_block_hbd_sse4_1;
-  aom_clpf_hblock = aom_clpf_hblock_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_hblock = aom_clpf_hblock_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_hblock = aom_clpf_hblock_sse4_1;
-  aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_sse2;
-  if (flags & HAS_SSSE3)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_ssse3;
-  if (flags & HAS_SSE4_1)
-    aom_clpf_hblock_hbd = aom_clpf_hblock_hbd_sse4_1;
-  av1_convolve_horiz = av1_convolve_horiz_c;
-  if (flags & HAS_SSSE3)
-    av1_convolve_horiz = av1_convolve_horiz_ssse3;
-  av1_convolve_rounding = av1_convolve_rounding_c;
-  if (flags & HAS_AVX2)
-    av1_convolve_rounding = av1_convolve_rounding_avx2;
-  av1_convolve_vert = av1_convolve_vert_c;
-  if (flags & HAS_SSSE3)
-    av1_convolve_vert = av1_convolve_vert_ssse3;
-  av1_iht16x16_256_add = av1_iht16x16_256_add_sse2;
-  if (flags & HAS_AVX2)
-    av1_iht16x16_256_add = av1_iht16x16_256_add_avx2;
-  av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_sse4_1;
-  av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_c;
-  if (flags & HAS_AVX2)
-    av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_avx2;
-  av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_sse4_1;
-  av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_c;
-  if (flags & HAS_SSE4_1)
-    av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_sse4_1;
-  av1_lowbd_convolve_init = av1_lowbd_convolve_init_c;
-  if (flags & HAS_SSSE3)
-    av1_lowbd_convolve_init = av1_lowbd_convolve_init_ssse3;
-  av1_warp_affine = av1_warp_affine_sse2;
-  if (flags & HAS_SSSE3)
-    av1_warp_affine = av1_warp_affine_ssse3;
-  cdef_direction_4x4 = cdef_direction_4x4_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_direction_4x4 = cdef_direction_4x4_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_direction_4x4 = cdef_direction_4x4_sse4_1;
-  cdef_direction_8x8 = cdef_direction_8x8_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_direction_8x8 = cdef_direction_8x8_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_direction_8x8 = cdef_direction_8x8_sse4_1;
-  cdef_find_dir = cdef_find_dir_sse2;
-  if (flags & HAS_SSSE3)
-    cdef_find_dir = cdef_find_dir_ssse3;
-  if (flags & HAS_SSE4_1)
-    cdef_find_dir = cdef_find_dir_sse4_1;
-  copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_4x4_16bit_to_16bit = copy_4x4_16bit_to_16bit_sse4_1;
-  copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_4x4_16bit_to_8bit = copy_4x4_16bit_to_8bit_sse4_1;
-  copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_8x8_16bit_to_16bit = copy_8x8_16bit_to_16bit_sse4_1;
-  copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_8x8_16bit_to_8bit = copy_8x8_16bit_to_8bit_sse4_1;
-  copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse4_1;
-  copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse2;
-  if (flags & HAS_SSSE3)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_ssse3;
-  if (flags & HAS_SSE4_1)
-    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse4_1;
-}
-#endif
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif
diff --git a/third_party/libaom/source/config/win/x64/config/aom_config.asm b/third_party/libaom/source/config/win/x64/config/aom_config.asm
new file mode 100644
index 0000000..7d8b7b2
--- /dev/null
+++ b/third_party/libaom/source/config/win/x64/config/aom_config.asm
@@ -0,0 +1,63 @@
+%define ARCH_ARM 0
+%define ARCH_MIPS 0
+%define ARCH_PPC 0
+%define ARCH_X86 0
+%define ARCH_X86_64 1
+%define CONFIG_ACCOUNTING 0
+%define CONFIG_ANALYZER 0
+%define CONFIG_AV1_DECODER 1
+%define CONFIG_AV1_ENCODER 0
+%define CONFIG_BIG_ENDIAN 0
+%define CONFIG_BITSTREAM_DEBUG 0
+%define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+%define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+%define CONFIG_COLLECT_RD_STATS 0
+%define CONFIG_DEBUG 0
+%define CONFIG_DECODE_PERF_TESTS 0
+%define CONFIG_DIST_8X8 1
+%define CONFIG_ENCODE_PERF_TESTS 0
+%define CONFIG_ENTROPY_STATS 0
+%define CONFIG_FILEOPTIONS 1
+%define CONFIG_FP_MB_STATS 0
+%define CONFIG_GCC 0
+%define CONFIG_GCOV 0
+%define CONFIG_GPROF 0
+%define CONFIG_INSPECTION 0
+%define CONFIG_INTERNAL_STATS 0
+%define CONFIG_INTER_STATS_ONLY 0
+%define CONFIG_LIBYUV 1
+%define CONFIG_LOWBITDEPTH 1
+%define CONFIG_MISMATCH_DEBUG 0
+%define CONFIG_MSVS 1
+%define CONFIG_MULTITHREAD 1
+%define CONFIG_OS_SUPPORT 1
+%define CONFIG_PIC 0
+%define CONFIG_RD_DEBUG 0
+%define CONFIG_RUNTIME_CPU_DETECT 1
+%define CONFIG_SHARED 0
+%define CONFIG_SIZE_LIMIT 1
+%define CONFIG_SPATIAL_RESAMPLING 1
+%define CONFIG_STATIC 1
+%define CONFIG_UNIT_TESTS 1
+%define CONFIG_WEBM_IO 1
+%define DECODE_HEIGHT_LIMIT 16384
+%define DECODE_WIDTH_LIMIT 16384
+%define HAVE_AVX 1
+%define HAVE_AVX2 1
+%define HAVE_DSPR2 0
+%define HAVE_FEXCEPT 1
+%define HAVE_MIPS32 0
+%define HAVE_MIPS64 0
+%define HAVE_MMX 1
+%define HAVE_MSA 0
+%define HAVE_NEON 0
+%define HAVE_PTHREAD_H 0
+%define HAVE_SSE 1
+%define HAVE_SSE2 1
+%define HAVE_SSE3 1
+%define HAVE_SSE4_1 1
+%define HAVE_SSE4_2 1
+%define HAVE_SSSE3 1
+%define HAVE_UNISTD_H 0
+%define HAVE_VSX 0
+%define HAVE_WXWIDGETS 0
diff --git a/third_party/libaom/source/config/win/x64/config/aom_config.c b/third_party/libaom/source/config/win/x64/config/aom_config.c
new file mode 100644
index 0000000..a064ea3
--- /dev/null
+++ b/third_party/libaom/source/config/win/x64/config/aom_config.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2016, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#include "aom/aom_codec.h"
+static const char* const cfg = "-G \"Unix Makefiles\" -DAOM_TARGET_CPU=x86_64 -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=1 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=16384 -DDECODE_WIDTH_LIMIT=16384";
+const char *aom_codec_build_config(void) {return cfg;}
diff --git a/third_party/libaom/source/config/win/x64/config/aom_config.h b/third_party/libaom/source/config/win/x64/config/aom_config.h
new file mode 100644
index 0000000..28d4bd3
--- /dev/null
+++ b/third_party/libaom/source/config/win/x64/config/aom_config.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, Alliance for Open Media. All rights reserved
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+#ifndef AOM_CONFIG_H_
+#define AOM_CONFIG_H_
+#define ARCH_ARM 0
+#define ARCH_MIPS 0
+#define ARCH_PPC 0
+#define ARCH_X86 0
+#define ARCH_X86_64 1
+#define CONFIG_ACCOUNTING 0
+#define CONFIG_ANALYZER 0
+#define CONFIG_AV1_DECODER 1
+#define CONFIG_AV1_ENCODER 0
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_COLLECT_INTER_MODE_RD_STATS 1
+#define CONFIG_COLLECT_RD_STATS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_DIST_8X8 1
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_ENTROPY_STATS 0
+#define CONFIG_FILEOPTIONS 1
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_GCC 0
+#define CONFIG_GCOV 0
+#define CONFIG_GPROF 0
+#define CONFIG_INSPECTION 0
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_INTER_STATS_ONLY 0
+#define CONFIG_LIBYUV 1
+#define CONFIG_LOWBITDEPTH 1
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_MSVS 1
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_PIC 0
+#define CONFIG_RD_DEBUG 0
+#define CONFIG_RUNTIME_CPU_DETECT 1
+#define CONFIG_SHARED 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_STATIC 1
+#define CONFIG_UNIT_TESTS 1
+#define CONFIG_WEBM_IO 1
+#define DECODE_HEIGHT_LIMIT 16384
+#define DECODE_WIDTH_LIMIT 16384
+#define HAVE_AVX 1
+#define HAVE_AVX2 1
+#define HAVE_DSPR2 0
+#define HAVE_FEXCEPT 1
+#define HAVE_MIPS32 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 1
+#define HAVE_MSA 0
+#define HAVE_NEON 0
+#define HAVE_PTHREAD_H 0
+#define HAVE_SSE 1
+#define HAVE_SSE2 1
+#define HAVE_SSE3 1
+#define HAVE_SSE4_1 1
+#define HAVE_SSE4_2 1
+#define HAVE_SSSE3 1
+#define HAVE_UNISTD_H 0
+#define HAVE_VSX 0
+#define HAVE_WXWIDGETS 0
+#define INLINE __inline
+#endif /* AOM_CONFIG_H_ */
diff --git a/third_party/libaom/source/config/win/x64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/win/x64/config/aom_dsp_rtcd.h
new file mode 100644
index 0000000..be22893
--- /dev/null
+++ b/third_party/libaom/source/config/win/x64/config/aom_dsp_rtcd.h
@@ -0,0 +1,5737 @@
+// This file is generated. Do not edit.
+#ifndef AOM_DSP_RTCD_H_
+#define AOM_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/aom_dsp_common.h"
+#include "av1/common/blockd.h"
+#include "av1/common/enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void aom_blend_a64_hmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+void aom_blend_a64_hmask_sse4_1(uint8_t* dst,
+                                uint32_t dst_stride,
+                                const uint8_t* src0,
+                                uint32_t src0_stride,
+                                const uint8_t* src1,
+                                uint32_t src1_stride,
+                                const uint8_t* mask,
+                                int w,
+                                int h);
+RTCD_EXTERN void (*aom_blend_a64_hmask)(uint8_t* dst,
+                                        uint32_t dst_stride,
+                                        const uint8_t* src0,
+                                        uint32_t src0_stride,
+                                        const uint8_t* src1,
+                                        uint32_t src1_stride,
+                                        const uint8_t* mask,
+                                        int w,
+                                        int h);
+
+void aom_blend_a64_mask_c(uint8_t* dst,
+                          uint32_t dst_stride,
+                          const uint8_t* src0,
+                          uint32_t src0_stride,
+                          const uint8_t* src1,
+                          uint32_t src1_stride,
+                          const uint8_t* mask,
+                          uint32_t mask_stride,
+                          int w,
+                          int h,
+                          int subx,
+                          int suby);
+void aom_blend_a64_mask_sse4_1(uint8_t* dst,
+                               uint32_t dst_stride,
+                               const uint8_t* src0,
+                               uint32_t src0_stride,
+                               const uint8_t* src1,
+                               uint32_t src1_stride,
+                               const uint8_t* mask,
+                               uint32_t mask_stride,
+                               int w,
+                               int h,
+                               int subx,
+                               int suby);
+RTCD_EXTERN void (*aom_blend_a64_mask)(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       uint32_t mask_stride,
+                                       int w,
+                                       int h,
+                                       int subx,
+                                       int suby);
+
+void aom_blend_a64_vmask_c(uint8_t* dst,
+                           uint32_t dst_stride,
+                           const uint8_t* src0,
+                           uint32_t src0_stride,
+                           const uint8_t* src1,
+                           uint32_t src1_stride,
+                           const uint8_t* mask,
+                           int w,
+                           int h);
+void aom_blend_a64_vmask_sse4_1(uint8_t* dst,
+                                uint32_t dst_stride,
+                                const uint8_t* src0,
+                                uint32_t src0_stride,
+                                const uint8_t* src1,
+                                uint32_t src1_stride,
+                                const uint8_t* mask,
+                                int w,
+                                int h);
+RTCD_EXTERN void (*aom_blend_a64_vmask)(uint8_t* dst,
+                                        uint32_t dst_stride,
+                                        const uint8_t* src0,
+                                        uint32_t src0_stride,
+                                        const uint8_t* src1,
+                                        uint32_t src1_stride,
+                                        const uint8_t* mask,
+                                        int w,
+                                        int h);
+
+void aom_convolve8_horiz_c(const uint8_t* src,
+                           ptrdiff_t src_stride,
+                           uint8_t* dst,
+                           ptrdiff_t dst_stride,
+                           const int16_t* filter_x,
+                           int x_step_q4,
+                           const int16_t* filter_y,
+                           int y_step_q4,
+                           int w,
+                           int h);
+void aom_convolve8_horiz_sse2(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+void aom_convolve8_horiz_ssse3(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h);
+void aom_convolve8_horiz_avx2(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+RTCD_EXTERN void (*aom_convolve8_horiz)(const uint8_t* src,
+                                        ptrdiff_t src_stride,
+                                        uint8_t* dst,
+                                        ptrdiff_t dst_stride,
+                                        const int16_t* filter_x,
+                                        int x_step_q4,
+                                        const int16_t* filter_y,
+                                        int y_step_q4,
+                                        int w,
+                                        int h);
+
+void aom_convolve8_vert_c(const uint8_t* src,
+                          ptrdiff_t src_stride,
+                          uint8_t* dst,
+                          ptrdiff_t dst_stride,
+                          const int16_t* filter_x,
+                          int x_step_q4,
+                          const int16_t* filter_y,
+                          int y_step_q4,
+                          int w,
+                          int h);
+void aom_convolve8_vert_sse2(const uint8_t* src,
+                             ptrdiff_t src_stride,
+                             uint8_t* dst,
+                             ptrdiff_t dst_stride,
+                             const int16_t* filter_x,
+                             int x_step_q4,
+                             const int16_t* filter_y,
+                             int y_step_q4,
+                             int w,
+                             int h);
+void aom_convolve8_vert_ssse3(const uint8_t* src,
+                              ptrdiff_t src_stride,
+                              uint8_t* dst,
+                              ptrdiff_t dst_stride,
+                              const int16_t* filter_x,
+                              int x_step_q4,
+                              const int16_t* filter_y,
+                              int y_step_q4,
+                              int w,
+                              int h);
+void aom_convolve8_vert_avx2(const uint8_t* src,
+                             ptrdiff_t src_stride,
+                             uint8_t* dst,
+                             ptrdiff_t dst_stride,
+                             const int16_t* filter_x,
+                             int x_step_q4,
+                             const int16_t* filter_y,
+                             int y_step_q4,
+                             int w,
+                             int h);
+RTCD_EXTERN void (*aom_convolve8_vert)(const uint8_t* src,
+                                       ptrdiff_t src_stride,
+                                       uint8_t* dst,
+                                       ptrdiff_t dst_stride,
+                                       const int16_t* filter_x,
+                                       int x_step_q4,
+                                       const int16_t* filter_y,
+                                       int y_step_q4,
+                                       int w,
+                                       int h);
+
+void aom_convolve_copy_c(const uint8_t* src,
+                         ptrdiff_t src_stride,
+                         uint8_t* dst,
+                         ptrdiff_t dst_stride,
+                         const int16_t* filter_x,
+                         int x_step_q4,
+                         const int16_t* filter_y,
+                         int y_step_q4,
+                         int w,
+                         int h);
+void aom_convolve_copy_sse2(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h);
+#define aom_convolve_copy aom_convolve_copy_sse2
+
+void aom_dc_128_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_16x16 aom_dc_128_predictor_16x16_sse2
+
+void aom_dc_128_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_16x32 aom_dc_128_predictor_16x32_sse2
+
+void aom_dc_128_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_16x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_16x4 aom_dc_128_predictor_16x4_sse2
+
+void aom_dc_128_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_16x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_128_predictor_16x64 aom_dc_128_predictor_16x64_sse2
+
+void aom_dc_128_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_16x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_16x8 aom_dc_128_predictor_16x8_sse2
+
+void aom_dc_128_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_128_predictor_2x2 aom_dc_128_predictor_2x2_c
+
+void aom_dc_128_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_32x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_32x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_32x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_32x8 aom_dc_128_predictor_32x8_sse2
+
+void aom_dc_128_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_4x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_4x16 aom_dc_128_predictor_4x16_sse2
+
+void aom_dc_128_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_4x4 aom_dc_128_predictor_4x4_sse2
+
+void aom_dc_128_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_4x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_4x8 aom_dc_128_predictor_4x8_sse2
+
+void aom_dc_128_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_128_predictor_64x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_128_predictor_64x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_128_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_128_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_8x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_8x16 aom_dc_128_predictor_8x16_sse2
+
+void aom_dc_128_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_128_predictor_8x32_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_128_predictor_8x32 aom_dc_128_predictor_8x32_sse2
+
+void aom_dc_128_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_8x4 aom_dc_128_predictor_8x4_sse2
+
+void aom_dc_128_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_128_predictor_8x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_128_predictor_8x8 aom_dc_128_predictor_8x8_sse2
+
+void aom_dc_left_predictor_16x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_16x16 aom_dc_left_predictor_16x16_sse2
+
+void aom_dc_left_predictor_16x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_16x32 aom_dc_left_predictor_16x32_sse2
+
+void aom_dc_left_predictor_16x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_16x4_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_16x4 aom_dc_left_predictor_16x4_sse2
+
+void aom_dc_left_predictor_16x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_16x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+#define aom_dc_left_predictor_16x64 aom_dc_left_predictor_16x64_sse2
+
+void aom_dc_left_predictor_16x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_16x8_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_16x8 aom_dc_left_predictor_16x8_sse2
+
+void aom_dc_left_predictor_2x2_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_left_predictor_2x2 aom_dc_left_predictor_2x2_c
+
+void aom_dc_left_predictor_32x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x16_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x32_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_32x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_32x64_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_32x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_32x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_32x8_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_32x8 aom_dc_left_predictor_32x8_sse2
+
+void aom_dc_left_predictor_4x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_4x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_4x16 aom_dc_left_predictor_4x16_sse2
+
+void aom_dc_left_predictor_4x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_4x4 aom_dc_left_predictor_4x4_sse2
+
+void aom_dc_left_predictor_4x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_4x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_4x8 aom_dc_left_predictor_4x8_sse2
+
+void aom_dc_left_predictor_64x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x16_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x16_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_64x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x32_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x32_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_64x64_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_dc_left_predictor_64x64_sse2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+void aom_dc_left_predictor_64x64_avx2(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_left_predictor_64x64)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_dc_left_predictor_8x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_8x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_8x16 aom_dc_left_predictor_8x16_sse2
+
+void aom_dc_left_predictor_8x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_left_predictor_8x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_left_predictor_8x32 aom_dc_left_predictor_8x32_sse2
+
+void aom_dc_left_predictor_8x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_8x4 aom_dc_left_predictor_8x4_sse2
+
+void aom_dc_left_predictor_8x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_left_predictor_8x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_left_predictor_8x8 aom_dc_left_predictor_8x8_sse2
+
+void aom_dc_predictor_16x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_16x16 aom_dc_predictor_16x16_sse2
+
+void aom_dc_predictor_16x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_16x32 aom_dc_predictor_16x32_sse2
+
+void aom_dc_predictor_16x4_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_16x4_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_16x4 aom_dc_predictor_16x4_sse2
+
+void aom_dc_predictor_16x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_16x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+#define aom_dc_predictor_16x64 aom_dc_predictor_16x64_sse2
+
+void aom_dc_predictor_16x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_16x8_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_16x8 aom_dc_predictor_16x8_sse2
+
+void aom_dc_predictor_2x2_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+#define aom_dc_predictor_2x2 aom_dc_predictor_2x2_c
+
+void aom_dc_predictor_32x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x16_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x32_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_32x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_32x64_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_32x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_32x8_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_32x8_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_32x8 aom_dc_predictor_32x8_sse2
+
+void aom_dc_predictor_4x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_4x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_4x16 aom_dc_predictor_4x16_sse2
+
+void aom_dc_predictor_4x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_4x4 aom_dc_predictor_4x4_sse2
+
+void aom_dc_predictor_4x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_4x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_4x8 aom_dc_predictor_4x8_sse2
+
+void aom_dc_predictor_64x16_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x16_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x16_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x16)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_64x32_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x32_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x32_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x32)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_64x64_c(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+void aom_dc_predictor_64x64_sse2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_predictor_64x64_avx2(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_predictor_64x64)(uint8_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint8_t* above,
+                                           const uint8_t* left);
+
+void aom_dc_predictor_8x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_8x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_8x16 aom_dc_predictor_8x16_sse2
+
+void aom_dc_predictor_8x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_dc_predictor_8x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_predictor_8x32 aom_dc_predictor_8x32_sse2
+
+void aom_dc_predictor_8x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_8x4 aom_dc_predictor_8x4_sse2
+
+void aom_dc_predictor_8x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_dc_predictor_8x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_dc_predictor_8x8 aom_dc_predictor_8x8_sse2
+
+void aom_dc_top_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_16x16 aom_dc_top_predictor_16x16_sse2
+
+void aom_dc_top_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_16x32 aom_dc_top_predictor_16x32_sse2
+
+void aom_dc_top_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_16x4_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_16x4 aom_dc_top_predictor_16x4_sse2
+
+void aom_dc_top_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_16x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+#define aom_dc_top_predictor_16x64 aom_dc_top_predictor_16x64_sse2
+
+void aom_dc_top_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_16x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_16x8 aom_dc_top_predictor_16x8_sse2
+
+void aom_dc_top_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_dc_top_predictor_2x2 aom_dc_top_predictor_2x2_c
+
+void aom_dc_top_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_32x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_32x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_32x8_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_32x8 aom_dc_top_predictor_32x8_sse2
+
+void aom_dc_top_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_4x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_4x16 aom_dc_top_predictor_4x16_sse2
+
+void aom_dc_top_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_4x4 aom_dc_top_predictor_4x4_sse2
+
+void aom_dc_top_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_4x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_4x8 aom_dc_top_predictor_4x8_sse2
+
+void aom_dc_top_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x16_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x16_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x32_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x32_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_dc_top_predictor_64x64_sse2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_dc_top_predictor_64x64_avx2(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_dc_top_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_dc_top_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_8x16_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_8x16 aom_dc_top_predictor_8x16_sse2
+
+void aom_dc_top_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_dc_top_predictor_8x32_sse2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+#define aom_dc_top_predictor_8x32 aom_dc_top_predictor_8x32_sse2
+
+void aom_dc_top_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x4_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_8x4 aom_dc_top_predictor_8x4_sse2
+
+void aom_dc_top_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_dc_top_predictor_8x8_sse2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+#define aom_dc_top_predictor_8x8 aom_dc_top_predictor_8x8_sse2
+
+void aom_h_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_16x16 aom_h_predictor_16x16_sse2
+
+void aom_h_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_16x32 aom_h_predictor_16x32_sse2
+
+void aom_h_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_16x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_16x4 aom_h_predictor_16x4_sse2
+
+void aom_h_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_16x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_16x64 aom_h_predictor_16x64_sse2
+
+void aom_h_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_16x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_16x8 aom_h_predictor_16x8_sse2
+
+void aom_h_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_h_predictor_2x2 aom_h_predictor_2x2_c
+
+void aom_h_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_32x16 aom_h_predictor_32x16_sse2
+
+void aom_h_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_h_predictor_32x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_h_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_h_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_32x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_32x64 aom_h_predictor_32x64_sse2
+
+void aom_h_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_32x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_32x8 aom_h_predictor_32x8_sse2
+
+void aom_h_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_4x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_4x16 aom_h_predictor_4x16_sse2
+
+void aom_h_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_4x4 aom_h_predictor_4x4_sse2
+
+void aom_h_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_4x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_4x8 aom_h_predictor_4x8_sse2
+
+void aom_h_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_64x16 aom_h_predictor_64x16_sse2
+
+void aom_h_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_64x32 aom_h_predictor_64x32_sse2
+
+void aom_h_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_h_predictor_64x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_h_predictor_64x64 aom_h_predictor_64x64_sse2
+
+void aom_h_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_8x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_8x16 aom_h_predictor_8x16_sse2
+
+void aom_h_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_h_predictor_8x32_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_h_predictor_8x32 aom_h_predictor_8x32_sse2
+
+void aom_h_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_8x4 aom_h_predictor_8x4_sse2
+
+void aom_h_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_h_predictor_8x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_h_predictor_8x8 aom_h_predictor_8x8_sse2
+
+void aom_highbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                     uint32_t dst_stride,
+                                     const CONV_BUF_TYPE* src0,
+                                     uint32_t src0_stride,
+                                     const CONV_BUF_TYPE* src1,
+                                     uint32_t src1_stride,
+                                     const uint8_t* mask,
+                                     uint32_t mask_stride,
+                                     int w,
+                                     int h,
+                                     int subx,
+                                     int suby,
+                                     ConvolveParams* conv_params,
+                                     const int bd);
+#define aom_highbd_blend_a64_d16_mask aom_highbd_blend_a64_d16_mask_c
+
+void aom_highbd_blend_a64_hmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+void aom_highbd_blend_a64_hmask_sse4_1(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       int w,
+                                       int h,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_hmask)(uint8_t* dst,
+                                               uint32_t dst_stride,
+                                               const uint8_t* src0,
+                                               uint32_t src0_stride,
+                                               const uint8_t* src1,
+                                               uint32_t src1_stride,
+                                               const uint8_t* mask,
+                                               int w,
+                                               int h,
+                                               int bd);
+
+void aom_highbd_blend_a64_mask_c(uint8_t* dst,
+                                 uint32_t dst_stride,
+                                 const uint8_t* src0,
+                                 uint32_t src0_stride,
+                                 const uint8_t* src1,
+                                 uint32_t src1_stride,
+                                 const uint8_t* mask,
+                                 uint32_t mask_stride,
+                                 int w,
+                                 int h,
+                                 int subx,
+                                 int suby,
+                                 int bd);
+void aom_highbd_blend_a64_mask_sse4_1(uint8_t* dst,
+                                      uint32_t dst_stride,
+                                      const uint8_t* src0,
+                                      uint32_t src0_stride,
+                                      const uint8_t* src1,
+                                      uint32_t src1_stride,
+                                      const uint8_t* mask,
+                                      uint32_t mask_stride,
+                                      int w,
+                                      int h,
+                                      int subx,
+                                      int suby,
+                                      int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_mask)(uint8_t* dst,
+                                              uint32_t dst_stride,
+                                              const uint8_t* src0,
+                                              uint32_t src0_stride,
+                                              const uint8_t* src1,
+                                              uint32_t src1_stride,
+                                              const uint8_t* mask,
+                                              uint32_t mask_stride,
+                                              int w,
+                                              int h,
+                                              int subx,
+                                              int suby,
+                                              int bd);
+
+void aom_highbd_blend_a64_vmask_c(uint8_t* dst,
+                                  uint32_t dst_stride,
+                                  const uint8_t* src0,
+                                  uint32_t src0_stride,
+                                  const uint8_t* src1,
+                                  uint32_t src1_stride,
+                                  const uint8_t* mask,
+                                  int w,
+                                  int h,
+                                  int bd);
+void aom_highbd_blend_a64_vmask_sse4_1(uint8_t* dst,
+                                       uint32_t dst_stride,
+                                       const uint8_t* src0,
+                                       uint32_t src0_stride,
+                                       const uint8_t* src1,
+                                       uint32_t src1_stride,
+                                       const uint8_t* mask,
+                                       int w,
+                                       int h,
+                                       int bd);
+RTCD_EXTERN void (*aom_highbd_blend_a64_vmask)(uint8_t* dst,
+                                               uint32_t dst_stride,
+                                               const uint8_t* src0,
+                                               uint32_t src0_stride,
+                                               const uint8_t* src1,
+                                               uint32_t src1_stride,
+                                               const uint8_t* mask,
+                                               int w,
+                                               int h,
+                                               int bd);
+
+void aom_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+void aom_highbd_convolve8_horiz_sse2(const uint8_t* src,
+                                     ptrdiff_t src_stride,
+                                     uint8_t* dst,
+                                     ptrdiff_t dst_stride,
+                                     const int16_t* filter_x,
+                                     int x_step_q4,
+                                     const int16_t* filter_y,
+                                     int y_step_q4,
+                                     int w,
+                                     int h,
+                                     int bps);
+void aom_highbd_convolve8_horiz_avx2(const uint8_t* src,
+                                     ptrdiff_t src_stride,
+                                     uint8_t* dst,
+                                     ptrdiff_t dst_stride,
+                                     const int16_t* filter_x,
+                                     int x_step_q4,
+                                     const int16_t* filter_y,
+                                     int y_step_q4,
+                                     int w,
+                                     int h,
+                                     int bps);
+RTCD_EXTERN void (*aom_highbd_convolve8_horiz)(const uint8_t* src,
+                                               ptrdiff_t src_stride,
+                                               uint8_t* dst,
+                                               ptrdiff_t dst_stride,
+                                               const int16_t* filter_x,
+                                               int x_step_q4,
+                                               const int16_t* filter_y,
+                                               int y_step_q4,
+                                               int w,
+                                               int h,
+                                               int bps);
+
+void aom_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+void aom_highbd_convolve8_vert_sse2(const uint8_t* src,
+                                    ptrdiff_t src_stride,
+                                    uint8_t* dst,
+                                    ptrdiff_t dst_stride,
+                                    const int16_t* filter_x,
+                                    int x_step_q4,
+                                    const int16_t* filter_y,
+                                    int y_step_q4,
+                                    int w,
+                                    int h,
+                                    int bps);
+void aom_highbd_convolve8_vert_avx2(const uint8_t* src,
+                                    ptrdiff_t src_stride,
+                                    uint8_t* dst,
+                                    ptrdiff_t dst_stride,
+                                    const int16_t* filter_x,
+                                    int x_step_q4,
+                                    const int16_t* filter_y,
+                                    int y_step_q4,
+                                    int w,
+                                    int h,
+                                    int bps);
+RTCD_EXTERN void (*aom_highbd_convolve8_vert)(const uint8_t* src,
+                                              ptrdiff_t src_stride,
+                                              uint8_t* dst,
+                                              ptrdiff_t dst_stride,
+                                              const int16_t* filter_x,
+                                              int x_step_q4,
+                                              const int16_t* filter_y,
+                                              int y_step_q4,
+                                              int w,
+                                              int h,
+                                              int bps);
+
+void aom_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+void aom_highbd_convolve_copy_sse2(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   int bps);
+void aom_highbd_convolve_copy_avx2(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   int bps);
+RTCD_EXTERN void (*aom_highbd_convolve_copy)(const uint8_t* src,
+                                             ptrdiff_t src_stride,
+                                             uint8_t* dst,
+                                             ptrdiff_t dst_stride,
+                                             const int16_t* filter_x,
+                                             int x_step_q4,
+                                             const int16_t* filter_y,
+                                             int y_step_q4,
+                                             int w,
+                                             int h,
+                                             int bps);
+
+void aom_highbd_dc_128_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_16x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_128_predictor_16x16 aom_highbd_dc_128_predictor_16x16_sse2
+
+void aom_highbd_dc_128_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_16x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_128_predictor_16x32 aom_highbd_dc_128_predictor_16x32_sse2
+
+void aom_highbd_dc_128_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_16x4 aom_highbd_dc_128_predictor_16x4_c
+
+void aom_highbd_dc_128_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_16x64 aom_highbd_dc_128_predictor_16x64_c
+
+void aom_highbd_dc_128_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_128_predictor_16x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_128_predictor_16x8 aom_highbd_dc_128_predictor_16x8_sse2
+
+void aom_highbd_dc_128_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_128_predictor_2x2 aom_highbd_dc_128_predictor_2x2_c
+
+void aom_highbd_dc_128_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_32x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_128_predictor_32x16 aom_highbd_dc_128_predictor_32x16_sse2
+
+void aom_highbd_dc_128_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_128_predictor_32x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_128_predictor_32x32 aom_highbd_dc_128_predictor_32x32_sse2
+
+void aom_highbd_dc_128_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_32x64 aom_highbd_dc_128_predictor_32x64_c
+
+void aom_highbd_dc_128_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_32x8 aom_highbd_dc_128_predictor_32x8_c
+
+void aom_highbd_dc_128_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_4x16 aom_highbd_dc_128_predictor_4x16_c
+
+void aom_highbd_dc_128_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_4x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_128_predictor_4x4 aom_highbd_dc_128_predictor_4x4_sse2
+
+void aom_highbd_dc_128_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_4x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_128_predictor_4x8 aom_highbd_dc_128_predictor_4x8_sse2
+
+void aom_highbd_dc_128_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x16 aom_highbd_dc_128_predictor_64x16_c
+
+void aom_highbd_dc_128_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x32 aom_highbd_dc_128_predictor_64x32_c
+
+void aom_highbd_dc_128_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_128_predictor_64x64 aom_highbd_dc_128_predictor_64x64_c
+
+void aom_highbd_dc_128_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_128_predictor_8x16_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_128_predictor_8x16 aom_highbd_dc_128_predictor_8x16_sse2
+
+void aom_highbd_dc_128_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_128_predictor_8x32 aom_highbd_dc_128_predictor_8x32_c
+
+void aom_highbd_dc_128_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_8x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_128_predictor_8x4 aom_highbd_dc_128_predictor_8x4_sse2
+
+void aom_highbd_dc_128_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_128_predictor_8x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_128_predictor_8x8 aom_highbd_dc_128_predictor_8x8_sse2
+
+void aom_highbd_dc_left_predictor_16x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_16x16_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+#define aom_highbd_dc_left_predictor_16x16 \
+  aom_highbd_dc_left_predictor_16x16_sse2
+
+void aom_highbd_dc_left_predictor_16x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_16x32_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+#define aom_highbd_dc_left_predictor_16x32 \
+  aom_highbd_dc_left_predictor_16x32_sse2
+
+void aom_highbd_dc_left_predictor_16x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_16x4 aom_highbd_dc_left_predictor_16x4_c
+
+void aom_highbd_dc_left_predictor_16x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_16x64 aom_highbd_dc_left_predictor_16x64_c
+
+void aom_highbd_dc_left_predictor_16x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_left_predictor_16x8_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_left_predictor_16x8 aom_highbd_dc_left_predictor_16x8_sse2
+
+void aom_highbd_dc_left_predictor_2x2_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_left_predictor_2x2 aom_highbd_dc_left_predictor_2x2_c
+
+void aom_highbd_dc_left_predictor_32x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_32x16_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+#define aom_highbd_dc_left_predictor_32x16 \
+  aom_highbd_dc_left_predictor_32x16_sse2
+
+void aom_highbd_dc_left_predictor_32x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+void aom_highbd_dc_left_predictor_32x32_sse2(uint16_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint16_t* above,
+                                             const uint16_t* left,
+                                             int bd);
+#define aom_highbd_dc_left_predictor_32x32 \
+  aom_highbd_dc_left_predictor_32x32_sse2
+
+void aom_highbd_dc_left_predictor_32x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_32x64 aom_highbd_dc_left_predictor_32x64_c
+
+void aom_highbd_dc_left_predictor_32x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_32x8 aom_highbd_dc_left_predictor_32x8_c
+
+void aom_highbd_dc_left_predictor_4x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_4x16 aom_highbd_dc_left_predictor_4x16_c
+
+void aom_highbd_dc_left_predictor_4x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_4x4_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_left_predictor_4x4 aom_highbd_dc_left_predictor_4x4_sse2
+
+void aom_highbd_dc_left_predictor_4x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_4x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_left_predictor_4x8 aom_highbd_dc_left_predictor_4x8_sse2
+
+void aom_highbd_dc_left_predictor_64x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x16 aom_highbd_dc_left_predictor_64x16_c
+
+void aom_highbd_dc_left_predictor_64x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x32 aom_highbd_dc_left_predictor_64x32_c
+
+void aom_highbd_dc_left_predictor_64x64_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_left_predictor_64x64 aom_highbd_dc_left_predictor_64x64_c
+
+void aom_highbd_dc_left_predictor_8x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_left_predictor_8x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_left_predictor_8x16 aom_highbd_dc_left_predictor_8x16_sse2
+
+void aom_highbd_dc_left_predictor_8x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_left_predictor_8x32 aom_highbd_dc_left_predictor_8x32_c
+
+void aom_highbd_dc_left_predictor_8x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_8x4_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_left_predictor_8x4 aom_highbd_dc_left_predictor_8x4_sse2
+
+void aom_highbd_dc_left_predictor_8x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_left_predictor_8x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_left_predictor_8x8 aom_highbd_dc_left_predictor_8x8_sse2
+
+void aom_highbd_dc_predictor_16x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_16x16_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_predictor_16x16 aom_highbd_dc_predictor_16x16_sse2
+
+void aom_highbd_dc_predictor_16x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_16x32_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_predictor_16x32 aom_highbd_dc_predictor_16x32_sse2
+
+void aom_highbd_dc_predictor_16x4_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_16x4 aom_highbd_dc_predictor_16x4_c
+
+void aom_highbd_dc_predictor_16x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_16x64 aom_highbd_dc_predictor_16x64_c
+
+void aom_highbd_dc_predictor_16x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_dc_predictor_16x8_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_predictor_16x8 aom_highbd_dc_predictor_16x8_sse2
+
+void aom_highbd_dc_predictor_2x2_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_dc_predictor_2x2 aom_highbd_dc_predictor_2x2_c
+
+void aom_highbd_dc_predictor_32x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_32x16_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_predictor_32x16 aom_highbd_dc_predictor_32x16_sse2
+
+void aom_highbd_dc_predictor_32x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+void aom_highbd_dc_predictor_32x32_sse2(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_predictor_32x32 aom_highbd_dc_predictor_32x32_sse2
+
+void aom_highbd_dc_predictor_32x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_32x64 aom_highbd_dc_predictor_32x64_c
+
+void aom_highbd_dc_predictor_32x8_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_32x8 aom_highbd_dc_predictor_32x8_c
+
+void aom_highbd_dc_predictor_4x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_4x16 aom_highbd_dc_predictor_4x16_c
+
+void aom_highbd_dc_predictor_4x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_4x4_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_dc_predictor_4x4 aom_highbd_dc_predictor_4x4_sse2
+
+void aom_highbd_dc_predictor_4x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_4x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_dc_predictor_4x8 aom_highbd_dc_predictor_4x8_sse2
+
+void aom_highbd_dc_predictor_64x16_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x16 aom_highbd_dc_predictor_64x16_c
+
+void aom_highbd_dc_predictor_64x32_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x32 aom_highbd_dc_predictor_64x32_c
+
+void aom_highbd_dc_predictor_64x64_c(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_dc_predictor_64x64 aom_highbd_dc_predictor_64x64_c
+
+void aom_highbd_dc_predictor_8x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_dc_predictor_8x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_predictor_8x16 aom_highbd_dc_predictor_8x16_sse2
+
+void aom_highbd_dc_predictor_8x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_dc_predictor_8x32 aom_highbd_dc_predictor_8x32_c
+
+void aom_highbd_dc_predictor_8x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_8x4_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_dc_predictor_8x4 aom_highbd_dc_predictor_8x4_sse2
+
+void aom_highbd_dc_predictor_8x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_dc_predictor_8x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_dc_predictor_8x8 aom_highbd_dc_predictor_8x8_sse2
+
+void aom_highbd_dc_top_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_16x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_top_predictor_16x16 aom_highbd_dc_top_predictor_16x16_sse2
+
+void aom_highbd_dc_top_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_16x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_top_predictor_16x32 aom_highbd_dc_top_predictor_16x32_sse2
+
+void aom_highbd_dc_top_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_16x4 aom_highbd_dc_top_predictor_16x4_c
+
+void aom_highbd_dc_top_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_16x64 aom_highbd_dc_top_predictor_16x64_c
+
+void aom_highbd_dc_top_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_top_predictor_16x8_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_top_predictor_16x8 aom_highbd_dc_top_predictor_16x8_sse2
+
+void aom_highbd_dc_top_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_dc_top_predictor_2x2 aom_highbd_dc_top_predictor_2x2_c
+
+void aom_highbd_dc_top_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_32x16_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_top_predictor_32x16 aom_highbd_dc_top_predictor_32x16_sse2
+
+void aom_highbd_dc_top_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+void aom_highbd_dc_top_predictor_32x32_sse2(uint16_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint16_t* above,
+                                            const uint16_t* left,
+                                            int bd);
+#define aom_highbd_dc_top_predictor_32x32 aom_highbd_dc_top_predictor_32x32_sse2
+
+void aom_highbd_dc_top_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_32x64 aom_highbd_dc_top_predictor_32x64_c
+
+void aom_highbd_dc_top_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_32x8 aom_highbd_dc_top_predictor_32x8_c
+
+void aom_highbd_dc_top_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_4x16 aom_highbd_dc_top_predictor_4x16_c
+
+void aom_highbd_dc_top_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_4x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_top_predictor_4x4 aom_highbd_dc_top_predictor_4x4_sse2
+
+void aom_highbd_dc_top_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_4x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_top_predictor_4x8 aom_highbd_dc_top_predictor_4x8_sse2
+
+void aom_highbd_dc_top_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x16 aom_highbd_dc_top_predictor_64x16_c
+
+void aom_highbd_dc_top_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x32 aom_highbd_dc_top_predictor_64x32_c
+
+void aom_highbd_dc_top_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_dc_top_predictor_64x64 aom_highbd_dc_top_predictor_64x64_c
+
+void aom_highbd_dc_top_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+void aom_highbd_dc_top_predictor_8x16_sse2(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_dc_top_predictor_8x16 aom_highbd_dc_top_predictor_8x16_sse2
+
+void aom_highbd_dc_top_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_dc_top_predictor_8x32 aom_highbd_dc_top_predictor_8x32_c
+
+void aom_highbd_dc_top_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_8x4_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_top_predictor_8x4 aom_highbd_dc_top_predictor_8x4_sse2
+
+void aom_highbd_dc_top_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+void aom_highbd_dc_top_predictor_8x8_sse2(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_dc_top_predictor_8x8 aom_highbd_dc_top_predictor_8x8_sse2
+
+void aom_highbd_h_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_16x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_h_predictor_16x16 aom_highbd_h_predictor_16x16_sse2
+
+void aom_highbd_h_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_16x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_h_predictor_16x32 aom_highbd_h_predictor_16x32_sse2
+
+void aom_highbd_h_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_16x4 aom_highbd_h_predictor_16x4_c
+
+void aom_highbd_h_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_16x64 aom_highbd_h_predictor_16x64_c
+
+void aom_highbd_h_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_h_predictor_16x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_h_predictor_16x8 aom_highbd_h_predictor_16x8_sse2
+
+void aom_highbd_h_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_h_predictor_2x2 aom_highbd_h_predictor_2x2_c
+
+void aom_highbd_h_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_32x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_h_predictor_32x16 aom_highbd_h_predictor_32x16_sse2
+
+void aom_highbd_h_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_h_predictor_32x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_h_predictor_32x32 aom_highbd_h_predictor_32x32_sse2
+
+void aom_highbd_h_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_32x64 aom_highbd_h_predictor_32x64_c
+
+void aom_highbd_h_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_32x8 aom_highbd_h_predictor_32x8_c
+
+void aom_highbd_h_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_4x16 aom_highbd_h_predictor_4x16_c
+
+void aom_highbd_h_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_4x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_h_predictor_4x4 aom_highbd_h_predictor_4x4_sse2
+
+void aom_highbd_h_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_4x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_h_predictor_4x8 aom_highbd_h_predictor_4x8_sse2
+
+void aom_highbd_h_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x16 aom_highbd_h_predictor_64x16_c
+
+void aom_highbd_h_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x32 aom_highbd_h_predictor_64x32_c
+
+void aom_highbd_h_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_h_predictor_64x64 aom_highbd_h_predictor_64x64_c
+
+void aom_highbd_h_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_h_predictor_8x16_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_h_predictor_8x16 aom_highbd_h_predictor_8x16_sse2
+
+void aom_highbd_h_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_h_predictor_8x32 aom_highbd_h_predictor_8x32_c
+
+void aom_highbd_h_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_8x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_h_predictor_8x4 aom_highbd_h_predictor_8x4_sse2
+
+void aom_highbd_h_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_h_predictor_8x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_h_predictor_8x8 aom_highbd_h_predictor_8x8_sse2
+
+void aom_highbd_lpf_horizontal_14_c(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+void aom_highbd_lpf_horizontal_14_sse2(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit,
+                                       const uint8_t* limit,
+                                       const uint8_t* thresh,
+                                       int bd);
+#define aom_highbd_lpf_horizontal_14 aom_highbd_lpf_horizontal_14_sse2
+
+void aom_highbd_lpf_horizontal_14_dual_c(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limt1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_horizontal_14_dual_sse2(uint16_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limt1,
+                                            const uint8_t* thresh1,
+                                            int bd);
+void aom_highbd_lpf_horizontal_14_dual_avx2(uint16_t* s,
+                                            int pitch,
+                                            const uint8_t* blimit0,
+                                            const uint8_t* limit0,
+                                            const uint8_t* thresh0,
+                                            const uint8_t* blimit1,
+                                            const uint8_t* limt1,
+                                            const uint8_t* thresh1,
+                                            int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_14_dual)(uint16_t* s,
+                                                      int pitch,
+                                                      const uint8_t* blimit0,
+                                                      const uint8_t* limit0,
+                                                      const uint8_t* thresh0,
+                                                      const uint8_t* blimit1,
+                                                      const uint8_t* limt1,
+                                                      const uint8_t* thresh1,
+                                                      int bd);
+
+void aom_highbd_lpf_horizontal_4_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_4_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+#define aom_highbd_lpf_horizontal_4 aom_highbd_lpf_horizontal_4_sse2
+
+void aom_highbd_lpf_horizontal_4_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_4_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+void aom_highbd_lpf_horizontal_4_dual_avx2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_4_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_horizontal_6_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_6_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+#define aom_highbd_lpf_horizontal_6 aom_highbd_lpf_horizontal_6_sse2
+
+void aom_highbd_lpf_horizontal_6_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_6_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+#define aom_highbd_lpf_horizontal_6_dual aom_highbd_lpf_horizontal_6_dual_sse2
+
+void aom_highbd_lpf_horizontal_8_c(uint16_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit,
+                                   const uint8_t* limit,
+                                   const uint8_t* thresh,
+                                   int bd);
+void aom_highbd_lpf_horizontal_8_sse2(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit,
+                                      const uint8_t* limit,
+                                      const uint8_t* thresh,
+                                      int bd);
+#define aom_highbd_lpf_horizontal_8 aom_highbd_lpf_horizontal_8_sse2
+
+void aom_highbd_lpf_horizontal_8_dual_c(uint16_t* s,
+                                        int pitch,
+                                        const uint8_t* blimit0,
+                                        const uint8_t* limit0,
+                                        const uint8_t* thresh0,
+                                        const uint8_t* blimit1,
+                                        const uint8_t* limit1,
+                                        const uint8_t* thresh1,
+                                        int bd);
+void aom_highbd_lpf_horizontal_8_dual_sse2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+void aom_highbd_lpf_horizontal_8_dual_avx2(uint16_t* s,
+                                           int pitch,
+                                           const uint8_t* blimit0,
+                                           const uint8_t* limit0,
+                                           const uint8_t* thresh0,
+                                           const uint8_t* blimit1,
+                                           const uint8_t* limit1,
+                                           const uint8_t* thresh1,
+                                           int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_horizontal_8_dual)(uint16_t* s,
+                                                     int pitch,
+                                                     const uint8_t* blimit0,
+                                                     const uint8_t* limit0,
+                                                     const uint8_t* thresh0,
+                                                     const uint8_t* blimit1,
+                                                     const uint8_t* limit1,
+                                                     const uint8_t* thresh1,
+                                                     int bd);
+
+void aom_highbd_lpf_vertical_14_c(uint16_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit,
+                                  const uint8_t* limit,
+                                  const uint8_t* thresh,
+                                  int bd);
+void aom_highbd_lpf_vertical_14_sse2(uint16_t* s,
+                                     int pitch,
+                                     const uint8_t* blimit,
+                                     const uint8_t* limit,
+                                     const uint8_t* thresh,
+                                     int bd);
+#define aom_highbd_lpf_vertical_14 aom_highbd_lpf_vertical_14_sse2
+
+void aom_highbd_lpf_vertical_14_dual_c(uint16_t* s,
+                                       int pitch,
+                                       const uint8_t* blimit0,
+                                       const uint8_t* limit0,
+                                       const uint8_t* thresh0,
+                                       const uint8_t* blimit1,
+                                       const uint8_t* limit1,
+                                       const uint8_t* thresh1,
+                                       int bd);
+void aom_highbd_lpf_vertical_14_dual_sse2(uint16_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit0,
+                                          const uint8_t* limit0,
+                                          const uint8_t* thresh0,
+                                          const uint8_t* blimit1,
+                                          const uint8_t* limit1,
+                                          const uint8_t* thresh1,
+                                          int bd);
+void aom_highbd_lpf_vertical_14_dual_avx2(uint16_t* s,
+                                          int pitch,
+                                          const uint8_t* blimit0,
+                                          const uint8_t* limit0,
+                                          const uint8_t* thresh0,
+                                          const uint8_t* blimit1,
+                                          const uint8_t* limit1,
+                                          const uint8_t* thresh1,
+                                          int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_14_dual)(uint16_t* s,
+                                                    int pitch,
+                                                    const uint8_t* blimit0,
+                                                    const uint8_t* limit0,
+                                                    const uint8_t* thresh0,
+                                                    const uint8_t* blimit1,
+                                                    const uint8_t* limit1,
+                                                    const uint8_t* thresh1,
+                                                    int bd);
+
+void aom_highbd_lpf_vertical_4_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_4_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_vertical_4 aom_highbd_lpf_vertical_4_sse2
+
+void aom_highbd_lpf_vertical_4_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_4_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_vertical_4_dual_avx2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_4_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_lpf_vertical_6_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_6_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_vertical_6 aom_highbd_lpf_vertical_6_sse2
+
+void aom_highbd_lpf_vertical_6_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_6_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+#define aom_highbd_lpf_vertical_6_dual aom_highbd_lpf_vertical_6_dual_sse2
+
+void aom_highbd_lpf_vertical_8_c(uint16_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit,
+                                 const uint8_t* limit,
+                                 const uint8_t* thresh,
+                                 int bd);
+void aom_highbd_lpf_vertical_8_sse2(uint16_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit,
+                                    const uint8_t* limit,
+                                    const uint8_t* thresh,
+                                    int bd);
+#define aom_highbd_lpf_vertical_8 aom_highbd_lpf_vertical_8_sse2
+
+void aom_highbd_lpf_vertical_8_dual_c(uint16_t* s,
+                                      int pitch,
+                                      const uint8_t* blimit0,
+                                      const uint8_t* limit0,
+                                      const uint8_t* thresh0,
+                                      const uint8_t* blimit1,
+                                      const uint8_t* limit1,
+                                      const uint8_t* thresh1,
+                                      int bd);
+void aom_highbd_lpf_vertical_8_dual_sse2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+void aom_highbd_lpf_vertical_8_dual_avx2(uint16_t* s,
+                                         int pitch,
+                                         const uint8_t* blimit0,
+                                         const uint8_t* limit0,
+                                         const uint8_t* thresh0,
+                                         const uint8_t* blimit1,
+                                         const uint8_t* limit1,
+                                         const uint8_t* thresh1,
+                                         int bd);
+RTCD_EXTERN void (*aom_highbd_lpf_vertical_8_dual)(uint16_t* s,
+                                                   int pitch,
+                                                   const uint8_t* blimit0,
+                                                   const uint8_t* limit0,
+                                                   const uint8_t* thresh0,
+                                                   const uint8_t* blimit1,
+                                                   const uint8_t* limit1,
+                                                   const uint8_t* thresh1,
+                                                   int bd);
+
+void aom_highbd_paeth_predictor_16x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x16 aom_highbd_paeth_predictor_16x16_c
+
+void aom_highbd_paeth_predictor_16x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x32 aom_highbd_paeth_predictor_16x32_c
+
+void aom_highbd_paeth_predictor_16x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x4 aom_highbd_paeth_predictor_16x4_c
+
+void aom_highbd_paeth_predictor_16x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_16x64 aom_highbd_paeth_predictor_16x64_c
+
+void aom_highbd_paeth_predictor_16x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_16x8 aom_highbd_paeth_predictor_16x8_c
+
+void aom_highbd_paeth_predictor_2x2_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_2x2 aom_highbd_paeth_predictor_2x2_c
+
+void aom_highbd_paeth_predictor_32x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x16 aom_highbd_paeth_predictor_32x16_c
+
+void aom_highbd_paeth_predictor_32x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x32 aom_highbd_paeth_predictor_32x32_c
+
+void aom_highbd_paeth_predictor_32x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_32x64 aom_highbd_paeth_predictor_32x64_c
+
+void aom_highbd_paeth_predictor_32x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_32x8 aom_highbd_paeth_predictor_32x8_c
+
+void aom_highbd_paeth_predictor_4x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_4x16 aom_highbd_paeth_predictor_4x16_c
+
+void aom_highbd_paeth_predictor_4x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x4 aom_highbd_paeth_predictor_4x4_c
+
+void aom_highbd_paeth_predictor_4x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_4x8 aom_highbd_paeth_predictor_4x8_c
+
+void aom_highbd_paeth_predictor_64x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x16 aom_highbd_paeth_predictor_64x16_c
+
+void aom_highbd_paeth_predictor_64x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x32 aom_highbd_paeth_predictor_64x32_c
+
+void aom_highbd_paeth_predictor_64x64_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_paeth_predictor_64x64 aom_highbd_paeth_predictor_64x64_c
+
+void aom_highbd_paeth_predictor_8x16_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x16 aom_highbd_paeth_predictor_8x16_c
+
+void aom_highbd_paeth_predictor_8x32_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_paeth_predictor_8x32 aom_highbd_paeth_predictor_8x32_c
+
+void aom_highbd_paeth_predictor_8x4_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x4 aom_highbd_paeth_predictor_8x4_c
+
+void aom_highbd_paeth_predictor_8x8_c(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_paeth_predictor_8x8 aom_highbd_paeth_predictor_8x8_c
+
+void aom_highbd_smooth_h_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x16 \
+  aom_highbd_smooth_h_predictor_16x16_c
+
+void aom_highbd_smooth_h_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x32 \
+  aom_highbd_smooth_h_predictor_16x32_c
+
+void aom_highbd_smooth_h_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x4 aom_highbd_smooth_h_predictor_16x4_c
+
+void aom_highbd_smooth_h_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_16x64 \
+  aom_highbd_smooth_h_predictor_16x64_c
+
+void aom_highbd_smooth_h_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_16x8 aom_highbd_smooth_h_predictor_16x8_c
+
+void aom_highbd_smooth_h_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_2x2 aom_highbd_smooth_h_predictor_2x2_c
+
+void aom_highbd_smooth_h_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x16 \
+  aom_highbd_smooth_h_predictor_32x16_c
+
+void aom_highbd_smooth_h_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x32 \
+  aom_highbd_smooth_h_predictor_32x32_c
+
+void aom_highbd_smooth_h_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_32x64 \
+  aom_highbd_smooth_h_predictor_32x64_c
+
+void aom_highbd_smooth_h_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_32x8 aom_highbd_smooth_h_predictor_32x8_c
+
+void aom_highbd_smooth_h_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_4x16 aom_highbd_smooth_h_predictor_4x16_c
+
+void aom_highbd_smooth_h_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x4 aom_highbd_smooth_h_predictor_4x4_c
+
+void aom_highbd_smooth_h_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_4x8 aom_highbd_smooth_h_predictor_4x8_c
+
+void aom_highbd_smooth_h_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x16 \
+  aom_highbd_smooth_h_predictor_64x16_c
+
+void aom_highbd_smooth_h_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x32 \
+  aom_highbd_smooth_h_predictor_64x32_c
+
+void aom_highbd_smooth_h_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_h_predictor_64x64 \
+  aom_highbd_smooth_h_predictor_64x64_c
+
+void aom_highbd_smooth_h_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x16 aom_highbd_smooth_h_predictor_8x16_c
+
+void aom_highbd_smooth_h_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_h_predictor_8x32 aom_highbd_smooth_h_predictor_8x32_c
+
+void aom_highbd_smooth_h_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x4 aom_highbd_smooth_h_predictor_8x4_c
+
+void aom_highbd_smooth_h_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_h_predictor_8x8 aom_highbd_smooth_h_predictor_8x8_c
+
+void aom_highbd_smooth_predictor_16x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x16 aom_highbd_smooth_predictor_16x16_c
+
+void aom_highbd_smooth_predictor_16x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x32 aom_highbd_smooth_predictor_16x32_c
+
+void aom_highbd_smooth_predictor_16x4_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x4 aom_highbd_smooth_predictor_16x4_c
+
+void aom_highbd_smooth_predictor_16x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_16x64 aom_highbd_smooth_predictor_16x64_c
+
+void aom_highbd_smooth_predictor_16x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_16x8 aom_highbd_smooth_predictor_16x8_c
+
+void aom_highbd_smooth_predictor_2x2_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_2x2 aom_highbd_smooth_predictor_2x2_c
+
+void aom_highbd_smooth_predictor_32x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x16 aom_highbd_smooth_predictor_32x16_c
+
+void aom_highbd_smooth_predictor_32x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x32 aom_highbd_smooth_predictor_32x32_c
+
+void aom_highbd_smooth_predictor_32x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_32x64 aom_highbd_smooth_predictor_32x64_c
+
+void aom_highbd_smooth_predictor_32x8_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_32x8 aom_highbd_smooth_predictor_32x8_c
+
+void aom_highbd_smooth_predictor_4x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_4x16 aom_highbd_smooth_predictor_4x16_c
+
+void aom_highbd_smooth_predictor_4x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x4 aom_highbd_smooth_predictor_4x4_c
+
+void aom_highbd_smooth_predictor_4x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_4x8 aom_highbd_smooth_predictor_4x8_c
+
+void aom_highbd_smooth_predictor_64x16_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x16 aom_highbd_smooth_predictor_64x16_c
+
+void aom_highbd_smooth_predictor_64x32_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x32 aom_highbd_smooth_predictor_64x32_c
+
+void aom_highbd_smooth_predictor_64x64_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_predictor_64x64 aom_highbd_smooth_predictor_64x64_c
+
+void aom_highbd_smooth_predictor_8x16_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x16 aom_highbd_smooth_predictor_8x16_c
+
+void aom_highbd_smooth_predictor_8x32_c(uint16_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint16_t* above,
+                                        const uint16_t* left,
+                                        int bd);
+#define aom_highbd_smooth_predictor_8x32 aom_highbd_smooth_predictor_8x32_c
+
+void aom_highbd_smooth_predictor_8x4_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x4 aom_highbd_smooth_predictor_8x4_c
+
+void aom_highbd_smooth_predictor_8x8_c(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_smooth_predictor_8x8 aom_highbd_smooth_predictor_8x8_c
+
+void aom_highbd_smooth_v_predictor_16x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x16 \
+  aom_highbd_smooth_v_predictor_16x16_c
+
+void aom_highbd_smooth_v_predictor_16x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x32 \
+  aom_highbd_smooth_v_predictor_16x32_c
+
+void aom_highbd_smooth_v_predictor_16x4_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x4 aom_highbd_smooth_v_predictor_16x4_c
+
+void aom_highbd_smooth_v_predictor_16x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_16x64 \
+  aom_highbd_smooth_v_predictor_16x64_c
+
+void aom_highbd_smooth_v_predictor_16x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_16x8 aom_highbd_smooth_v_predictor_16x8_c
+
+void aom_highbd_smooth_v_predictor_2x2_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_2x2 aom_highbd_smooth_v_predictor_2x2_c
+
+void aom_highbd_smooth_v_predictor_32x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x16 \
+  aom_highbd_smooth_v_predictor_32x16_c
+
+void aom_highbd_smooth_v_predictor_32x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x32 \
+  aom_highbd_smooth_v_predictor_32x32_c
+
+void aom_highbd_smooth_v_predictor_32x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_32x64 \
+  aom_highbd_smooth_v_predictor_32x64_c
+
+void aom_highbd_smooth_v_predictor_32x8_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_32x8 aom_highbd_smooth_v_predictor_32x8_c
+
+void aom_highbd_smooth_v_predictor_4x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_4x16 aom_highbd_smooth_v_predictor_4x16_c
+
+void aom_highbd_smooth_v_predictor_4x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x4 aom_highbd_smooth_v_predictor_4x4_c
+
+void aom_highbd_smooth_v_predictor_4x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_4x8 aom_highbd_smooth_v_predictor_4x8_c
+
+void aom_highbd_smooth_v_predictor_64x16_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x16 \
+  aom_highbd_smooth_v_predictor_64x16_c
+
+void aom_highbd_smooth_v_predictor_64x32_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x32 \
+  aom_highbd_smooth_v_predictor_64x32_c
+
+void aom_highbd_smooth_v_predictor_64x64_c(uint16_t* dst,
+                                           ptrdiff_t y_stride,
+                                           const uint16_t* above,
+                                           const uint16_t* left,
+                                           int bd);
+#define aom_highbd_smooth_v_predictor_64x64 \
+  aom_highbd_smooth_v_predictor_64x64_c
+
+void aom_highbd_smooth_v_predictor_8x16_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x16 aom_highbd_smooth_v_predictor_8x16_c
+
+void aom_highbd_smooth_v_predictor_8x32_c(uint16_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint16_t* above,
+                                          const uint16_t* left,
+                                          int bd);
+#define aom_highbd_smooth_v_predictor_8x32 aom_highbd_smooth_v_predictor_8x32_c
+
+void aom_highbd_smooth_v_predictor_8x4_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x4 aom_highbd_smooth_v_predictor_8x4_c
+
+void aom_highbd_smooth_v_predictor_8x8_c(uint16_t* dst,
+                                         ptrdiff_t y_stride,
+                                         const uint16_t* above,
+                                         const uint16_t* left,
+                                         int bd);
+#define aom_highbd_smooth_v_predictor_8x8 aom_highbd_smooth_v_predictor_8x8_c
+
+void aom_highbd_v_predictor_16x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_16x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_v_predictor_16x16 aom_highbd_v_predictor_16x16_sse2
+
+void aom_highbd_v_predictor_16x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_16x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_v_predictor_16x32 aom_highbd_v_predictor_16x32_sse2
+
+void aom_highbd_v_predictor_16x4_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_16x4 aom_highbd_v_predictor_16x4_c
+
+void aom_highbd_v_predictor_16x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_16x64 aom_highbd_v_predictor_16x64_c
+
+void aom_highbd_v_predictor_16x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_v_predictor_16x8_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_v_predictor_16x8 aom_highbd_v_predictor_16x8_sse2
+
+void aom_highbd_v_predictor_2x2_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+#define aom_highbd_v_predictor_2x2 aom_highbd_v_predictor_2x2_c
+
+void aom_highbd_v_predictor_32x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_32x16_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_v_predictor_32x16 aom_highbd_v_predictor_32x16_sse2
+
+void aom_highbd_v_predictor_32x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+void aom_highbd_v_predictor_32x32_sse2(uint16_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint16_t* above,
+                                       const uint16_t* left,
+                                       int bd);
+#define aom_highbd_v_predictor_32x32 aom_highbd_v_predictor_32x32_sse2
+
+void aom_highbd_v_predictor_32x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_32x64 aom_highbd_v_predictor_32x64_c
+
+void aom_highbd_v_predictor_32x8_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_32x8 aom_highbd_v_predictor_32x8_c
+
+void aom_highbd_v_predictor_4x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_4x16 aom_highbd_v_predictor_4x16_c
+
+void aom_highbd_v_predictor_4x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_4x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_v_predictor_4x4 aom_highbd_v_predictor_4x4_sse2
+
+void aom_highbd_v_predictor_4x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_4x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_v_predictor_4x8 aom_highbd_v_predictor_4x8_sse2
+
+void aom_highbd_v_predictor_64x16_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x16 aom_highbd_v_predictor_64x16_c
+
+void aom_highbd_v_predictor_64x32_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x32 aom_highbd_v_predictor_64x32_c
+
+void aom_highbd_v_predictor_64x64_c(uint16_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint16_t* above,
+                                    const uint16_t* left,
+                                    int bd);
+#define aom_highbd_v_predictor_64x64 aom_highbd_v_predictor_64x64_c
+
+void aom_highbd_v_predictor_8x16_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+void aom_highbd_v_predictor_8x16_sse2(uint16_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint16_t* above,
+                                      const uint16_t* left,
+                                      int bd);
+#define aom_highbd_v_predictor_8x16 aom_highbd_v_predictor_8x16_sse2
+
+void aom_highbd_v_predictor_8x32_c(uint16_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int bd);
+#define aom_highbd_v_predictor_8x32 aom_highbd_v_predictor_8x32_c
+
+void aom_highbd_v_predictor_8x4_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_8x4_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_v_predictor_8x4 aom_highbd_v_predictor_8x4_sse2
+
+void aom_highbd_v_predictor_8x8_c(uint16_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint16_t* above,
+                                  const uint16_t* left,
+                                  int bd);
+void aom_highbd_v_predictor_8x8_sse2(uint16_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint16_t* above,
+                                     const uint16_t* left,
+                                     int bd);
+#define aom_highbd_v_predictor_8x8 aom_highbd_v_predictor_8x8_sse2
+
+void aom_lowbd_blend_a64_d16_mask_c(uint8_t* dst,
+                                    uint32_t dst_stride,
+                                    const CONV_BUF_TYPE* src0,
+                                    uint32_t src0_stride,
+                                    const CONV_BUF_TYPE* src1,
+                                    uint32_t src1_stride,
+                                    const uint8_t* mask,
+                                    uint32_t mask_stride,
+                                    int w,
+                                    int h,
+                                    int subx,
+                                    int suby,
+                                    ConvolveParams* conv_params);
+void aom_lowbd_blend_a64_d16_mask_sse4_1(uint8_t* dst,
+                                         uint32_t dst_stride,
+                                         const CONV_BUF_TYPE* src0,
+                                         uint32_t src0_stride,
+                                         const CONV_BUF_TYPE* src1,
+                                         uint32_t src1_stride,
+                                         const uint8_t* mask,
+                                         uint32_t mask_stride,
+                                         int w,
+                                         int h,
+                                         int subx,
+                                         int suby,
+                                         ConvolveParams* conv_params);
+RTCD_EXTERN void (*aom_lowbd_blend_a64_d16_mask)(uint8_t* dst,
+                                                 uint32_t dst_stride,
+                                                 const CONV_BUF_TYPE* src0,
+                                                 uint32_t src0_stride,
+                                                 const CONV_BUF_TYPE* src1,
+                                                 uint32_t src1_stride,
+                                                 const uint8_t* mask,
+                                                 uint32_t mask_stride,
+                                                 int w,
+                                                 int h,
+                                                 int subx,
+                                                 int suby,
+                                                 ConvolveParams* conv_params);
+
+void aom_lpf_horizontal_14_c(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+void aom_lpf_horizontal_14_sse2(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit,
+                                const uint8_t* limit,
+                                const uint8_t* thresh);
+#define aom_lpf_horizontal_14 aom_lpf_horizontal_14_sse2
+
+void aom_lpf_horizontal_14_dual_c(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+void aom_lpf_horizontal_14_dual_sse2(uint8_t* s,
+                                     int pitch,
+                                     const uint8_t* blimit0,
+                                     const uint8_t* limit0,
+                                     const uint8_t* thresh0,
+                                     const uint8_t* blimit1,
+                                     const uint8_t* limit1,
+                                     const uint8_t* thresh1);
+#define aom_lpf_horizontal_14_dual aom_lpf_horizontal_14_dual_sse2
+
+void aom_lpf_horizontal_4_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_4_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_4 aom_lpf_horizontal_4_sse2
+
+void aom_lpf_horizontal_4_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_4_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+#define aom_lpf_horizontal_4_dual aom_lpf_horizontal_4_dual_sse2
+
+void aom_lpf_horizontal_6_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_6_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_6 aom_lpf_horizontal_6_sse2
+
+void aom_lpf_horizontal_6_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_6_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+#define aom_lpf_horizontal_6_dual aom_lpf_horizontal_6_dual_sse2
+
+void aom_lpf_horizontal_8_c(uint8_t* s,
+                            int pitch,
+                            const uint8_t* blimit,
+                            const uint8_t* limit,
+                            const uint8_t* thresh);
+void aom_lpf_horizontal_8_sse2(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit,
+                               const uint8_t* limit,
+                               const uint8_t* thresh);
+#define aom_lpf_horizontal_8 aom_lpf_horizontal_8_sse2
+
+void aom_lpf_horizontal_8_dual_c(uint8_t* s,
+                                 int pitch,
+                                 const uint8_t* blimit0,
+                                 const uint8_t* limit0,
+                                 const uint8_t* thresh0,
+                                 const uint8_t* blimit1,
+                                 const uint8_t* limit1,
+                                 const uint8_t* thresh1);
+void aom_lpf_horizontal_8_dual_sse2(uint8_t* s,
+                                    int pitch,
+                                    const uint8_t* blimit0,
+                                    const uint8_t* limit0,
+                                    const uint8_t* thresh0,
+                                    const uint8_t* blimit1,
+                                    const uint8_t* limit1,
+                                    const uint8_t* thresh1);
+#define aom_lpf_horizontal_8_dual aom_lpf_horizontal_8_dual_sse2
+
+void aom_lpf_vertical_14_c(uint8_t* s,
+                           int pitch,
+                           const uint8_t* blimit,
+                           const uint8_t* limit,
+                           const uint8_t* thresh);
+void aom_lpf_vertical_14_sse2(uint8_t* s,
+                              int pitch,
+                              const uint8_t* blimit,
+                              const uint8_t* limit,
+                              const uint8_t* thresh);
+#define aom_lpf_vertical_14 aom_lpf_vertical_14_sse2
+
+void aom_lpf_vertical_14_dual_c(uint8_t* s,
+                                int pitch,
+                                const uint8_t* blimit0,
+                                const uint8_t* limit0,
+                                const uint8_t* thresh0,
+                                const uint8_t* blimit1,
+                                const uint8_t* limit1,
+                                const uint8_t* thresh1);
+void aom_lpf_vertical_14_dual_sse2(uint8_t* s,
+                                   int pitch,
+                                   const uint8_t* blimit0,
+                                   const uint8_t* limit0,
+                                   const uint8_t* thresh0,
+                                   const uint8_t* blimit1,
+                                   const uint8_t* limit1,
+                                   const uint8_t* thresh1);
+#define aom_lpf_vertical_14_dual aom_lpf_vertical_14_dual_sse2
+
+void aom_lpf_vertical_4_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_4_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_vertical_4 aom_lpf_vertical_4_sse2
+
+void aom_lpf_vertical_4_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_4_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_vertical_4_dual aom_lpf_vertical_4_dual_sse2
+
+void aom_lpf_vertical_6_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_6_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_vertical_6 aom_lpf_vertical_6_sse2
+
+void aom_lpf_vertical_6_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_6_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_vertical_6_dual aom_lpf_vertical_6_dual_sse2
+
+void aom_lpf_vertical_8_c(uint8_t* s,
+                          int pitch,
+                          const uint8_t* blimit,
+                          const uint8_t* limit,
+                          const uint8_t* thresh);
+void aom_lpf_vertical_8_sse2(uint8_t* s,
+                             int pitch,
+                             const uint8_t* blimit,
+                             const uint8_t* limit,
+                             const uint8_t* thresh);
+#define aom_lpf_vertical_8 aom_lpf_vertical_8_sse2
+
+void aom_lpf_vertical_8_dual_c(uint8_t* s,
+                               int pitch,
+                               const uint8_t* blimit0,
+                               const uint8_t* limit0,
+                               const uint8_t* thresh0,
+                               const uint8_t* blimit1,
+                               const uint8_t* limit1,
+                               const uint8_t* thresh1);
+void aom_lpf_vertical_8_dual_sse2(uint8_t* s,
+                                  int pitch,
+                                  const uint8_t* blimit0,
+                                  const uint8_t* limit0,
+                                  const uint8_t* thresh0,
+                                  const uint8_t* blimit1,
+                                  const uint8_t* limit1,
+                                  const uint8_t* thresh1);
+#define aom_lpf_vertical_8_dual aom_lpf_vertical_8_dual_sse2
+
+void aom_paeth_predictor_16x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_16x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_16x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_16x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_16x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_16x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_16x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_paeth_predictor_16x8_avx2(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_16x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_2x2_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_paeth_predictor_2x2 aom_paeth_predictor_2x2_c
+
+void aom_paeth_predictor_32x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_32x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_32x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_32x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_32x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_32x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_4x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_4x16_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x16)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_4x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_4x4_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x4)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_4x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_4x8_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_4x8)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_64x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x16_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_64x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x32_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_64x64_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_paeth_predictor_64x64_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+void aom_paeth_predictor_64x64_avx2(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_64x64)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_paeth_predictor_8x16_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_8x16_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x16)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_8x32_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_paeth_predictor_8x32_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x32)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_paeth_predictor_8x4_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_8x4_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x4)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_paeth_predictor_8x8_c(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+void aom_paeth_predictor_8x8_ssse3(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+RTCD_EXTERN void (*aom_paeth_predictor_8x8)(uint8_t* dst,
+                                            ptrdiff_t y_stride,
+                                            const uint8_t* above,
+                                            const uint8_t* left);
+
+void aom_smooth_h_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_16x4_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x4)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_16x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_16x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_16x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_h_predictor_2x2 aom_smooth_h_predictor_2x2_c
+
+void aom_smooth_h_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_32x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_32x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_32x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_4x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_4x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_4x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_4x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_h_predictor_64x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_64x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_h_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_8x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_h_predictor_8x32_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_h_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_8x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_h_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_h_predictor_8x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_h_predictor_8x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x4_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_16x4_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x4)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_16x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_16x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_16x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_16x8_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_16x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_2x2_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_smooth_predictor_2x2 aom_smooth_predictor_2x2_c
+
+void aom_smooth_predictor_32x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_32x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_32x8_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_32x8_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_32x8)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_4x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_4x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_4x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_4x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_4x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_4x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_4x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_64x16_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x16_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x16)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_64x32_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x32_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x32)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_64x64_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_predictor_64x64_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_64x64)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_predictor_8x16_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_8x16_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x16)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_8x32_c(uint8_t* dst,
+                                 ptrdiff_t y_stride,
+                                 const uint8_t* above,
+                                 const uint8_t* left);
+void aom_smooth_predictor_8x32_ssse3(uint8_t* dst,
+                                     ptrdiff_t y_stride,
+                                     const uint8_t* above,
+                                     const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x32)(uint8_t* dst,
+                                              ptrdiff_t y_stride,
+                                              const uint8_t* above,
+                                              const uint8_t* left);
+
+void aom_smooth_predictor_8x4_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_8x4_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x4)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_predictor_8x8_c(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_smooth_predictor_8x8_ssse3(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_predictor_8x8)(uint8_t* dst,
+                                             ptrdiff_t y_stride,
+                                             const uint8_t* above,
+                                             const uint8_t* left);
+
+void aom_smooth_v_predictor_16x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x4_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_16x4_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x4)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_16x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_16x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_16x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_16x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_16x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_2x2_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+#define aom_smooth_v_predictor_2x2 aom_smooth_v_predictor_2x2_c
+
+void aom_smooth_v_predictor_32x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_32x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_32x8_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_32x8_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_32x8)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_4x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_4x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_4x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_4x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_4x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_4x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_4x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_64x16_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x16_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x16)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_64x32_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x32_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x32)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_64x64_c(uint8_t* dst,
+                                    ptrdiff_t y_stride,
+                                    const uint8_t* above,
+                                    const uint8_t* left);
+void aom_smooth_v_predictor_64x64_ssse3(uint8_t* dst,
+                                        ptrdiff_t y_stride,
+                                        const uint8_t* above,
+                                        const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_64x64)(uint8_t* dst,
+                                                 ptrdiff_t y_stride,
+                                                 const uint8_t* above,
+                                                 const uint8_t* left);
+
+void aom_smooth_v_predictor_8x16_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_8x16_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x16)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_8x32_c(uint8_t* dst,
+                                   ptrdiff_t y_stride,
+                                   const uint8_t* above,
+                                   const uint8_t* left);
+void aom_smooth_v_predictor_8x32_ssse3(uint8_t* dst,
+                                       ptrdiff_t y_stride,
+                                       const uint8_t* above,
+                                       const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x32)(uint8_t* dst,
+                                                ptrdiff_t y_stride,
+                                                const uint8_t* above,
+                                                const uint8_t* left);
+
+void aom_smooth_v_predictor_8x4_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_8x4_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x4)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_smooth_v_predictor_8x8_c(uint8_t* dst,
+                                  ptrdiff_t y_stride,
+                                  const uint8_t* above,
+                                  const uint8_t* left);
+void aom_smooth_v_predictor_8x8_ssse3(uint8_t* dst,
+                                      ptrdiff_t y_stride,
+                                      const uint8_t* above,
+                                      const uint8_t* left);
+RTCD_EXTERN void (*aom_smooth_v_predictor_8x8)(uint8_t* dst,
+                                               ptrdiff_t y_stride,
+                                               const uint8_t* above,
+                                               const uint8_t* left);
+
+void aom_v_predictor_16x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_16x16 aom_v_predictor_16x16_sse2
+
+void aom_v_predictor_16x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_16x32 aom_v_predictor_16x32_sse2
+
+void aom_v_predictor_16x4_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_16x4_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_16x4 aom_v_predictor_16x4_sse2
+
+void aom_v_predictor_16x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_16x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+#define aom_v_predictor_16x64 aom_v_predictor_16x64_sse2
+
+void aom_v_predictor_16x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_16x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_16x8 aom_v_predictor_16x8_sse2
+
+void aom_v_predictor_2x2_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+#define aom_v_predictor_2x2 aom_v_predictor_2x2_c
+
+void aom_v_predictor_32x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x16_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_32x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_32x64_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_32x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_32x8_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_32x8_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_32x8 aom_v_predictor_32x8_sse2
+
+void aom_v_predictor_4x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_4x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_4x16 aom_v_predictor_4x16_sse2
+
+void aom_v_predictor_4x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_4x4 aom_v_predictor_4x4_sse2
+
+void aom_v_predictor_4x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_4x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_4x8 aom_v_predictor_4x8_sse2
+
+void aom_v_predictor_64x16_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x16_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x16_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x16)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_64x32_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x32_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x32_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x32)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_64x64_c(uint8_t* dst,
+                             ptrdiff_t y_stride,
+                             const uint8_t* above,
+                             const uint8_t* left);
+void aom_v_predictor_64x64_sse2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+void aom_v_predictor_64x64_avx2(uint8_t* dst,
+                                ptrdiff_t y_stride,
+                                const uint8_t* above,
+                                const uint8_t* left);
+RTCD_EXTERN void (*aom_v_predictor_64x64)(uint8_t* dst,
+                                          ptrdiff_t y_stride,
+                                          const uint8_t* above,
+                                          const uint8_t* left);
+
+void aom_v_predictor_8x16_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_8x16_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_8x16 aom_v_predictor_8x16_sse2
+
+void aom_v_predictor_8x32_c(uint8_t* dst,
+                            ptrdiff_t y_stride,
+                            const uint8_t* above,
+                            const uint8_t* left);
+void aom_v_predictor_8x32_sse2(uint8_t* dst,
+                               ptrdiff_t y_stride,
+                               const uint8_t* above,
+                               const uint8_t* left);
+#define aom_v_predictor_8x32 aom_v_predictor_8x32_sse2
+
+void aom_v_predictor_8x4_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x4_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_8x4 aom_v_predictor_8x4_sse2
+
+void aom_v_predictor_8x8_c(uint8_t* dst,
+                           ptrdiff_t y_stride,
+                           const uint8_t* above,
+                           const uint8_t* left);
+void aom_v_predictor_8x8_sse2(uint8_t* dst,
+                              ptrdiff_t y_stride,
+                              const uint8_t* above,
+                              const uint8_t* left);
+#define aom_v_predictor_8x8 aom_v_predictor_8x8_sse2
+
+void av1_round_shift_array_c(int32_t* arr, int size, int bit);
+void av1_round_shift_array_sse4_1(int32_t* arr, int size, int bit);
+RTCD_EXTERN void (*av1_round_shift_array)(int32_t* arr, int size, int bit);
+
+void aom_dsp_rtcd(void);
+
+#ifdef RTCD_C
+#include "aom_ports/x86.h"
+static void setup_rtcd_internal(void) {
+  int flags = x86_simd_caps();
+
+  (void)flags;
+
+  aom_blend_a64_hmask = aom_blend_a64_hmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_hmask = aom_blend_a64_hmask_sse4_1;
+  aom_blend_a64_mask = aom_blend_a64_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_mask = aom_blend_a64_mask_sse4_1;
+  aom_blend_a64_vmask = aom_blend_a64_vmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_blend_a64_vmask = aom_blend_a64_vmask_sse4_1;
+  aom_convolve8_horiz = aom_convolve8_horiz_sse2;
+  if (flags & HAS_SSSE3)
+    aom_convolve8_horiz = aom_convolve8_horiz_ssse3;
+  if (flags & HAS_AVX2)
+    aom_convolve8_horiz = aom_convolve8_horiz_avx2;
+  aom_convolve8_vert = aom_convolve8_vert_sse2;
+  if (flags & HAS_SSSE3)
+    aom_convolve8_vert = aom_convolve8_vert_ssse3;
+  if (flags & HAS_AVX2)
+    aom_convolve8_vert = aom_convolve8_vert_avx2;
+  aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x16 = aom_dc_128_predictor_32x16_avx2;
+  aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x32 = aom_dc_128_predictor_32x32_avx2;
+  aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_32x64 = aom_dc_128_predictor_32x64_avx2;
+  aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x16 = aom_dc_128_predictor_64x16_avx2;
+  aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x32 = aom_dc_128_predictor_64x32_avx2;
+  aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_128_predictor_64x64 = aom_dc_128_predictor_64x64_avx2;
+  aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x16 = aom_dc_left_predictor_32x16_avx2;
+  aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x32 = aom_dc_left_predictor_32x32_avx2;
+  aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_32x64 = aom_dc_left_predictor_32x64_avx2;
+  aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x16 = aom_dc_left_predictor_64x16_avx2;
+  aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x32 = aom_dc_left_predictor_64x32_avx2;
+  aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_left_predictor_64x64 = aom_dc_left_predictor_64x64_avx2;
+  aom_dc_predictor_32x16 = aom_dc_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x16 = aom_dc_predictor_32x16_avx2;
+  aom_dc_predictor_32x32 = aom_dc_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x32 = aom_dc_predictor_32x32_avx2;
+  aom_dc_predictor_32x64 = aom_dc_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_32x64 = aom_dc_predictor_32x64_avx2;
+  aom_dc_predictor_64x16 = aom_dc_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x16 = aom_dc_predictor_64x16_avx2;
+  aom_dc_predictor_64x32 = aom_dc_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x32 = aom_dc_predictor_64x32_avx2;
+  aom_dc_predictor_64x64 = aom_dc_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_predictor_64x64 = aom_dc_predictor_64x64_avx2;
+  aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x16 = aom_dc_top_predictor_32x16_avx2;
+  aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x32 = aom_dc_top_predictor_32x32_avx2;
+  aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_32x64 = aom_dc_top_predictor_32x64_avx2;
+  aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x16 = aom_dc_top_predictor_64x16_avx2;
+  aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x32 = aom_dc_top_predictor_64x32_avx2;
+  aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_dc_top_predictor_64x64 = aom_dc_top_predictor_64x64_avx2;
+  aom_h_predictor_32x32 = aom_h_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_h_predictor_32x32 = aom_h_predictor_32x32_avx2;
+  aom_highbd_blend_a64_hmask = aom_highbd_blend_a64_hmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_hmask = aom_highbd_blend_a64_hmask_sse4_1;
+  aom_highbd_blend_a64_mask = aom_highbd_blend_a64_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_mask = aom_highbd_blend_a64_mask_sse4_1;
+  aom_highbd_blend_a64_vmask = aom_highbd_blend_a64_vmask_c;
+  if (flags & HAS_SSE4_1)
+    aom_highbd_blend_a64_vmask = aom_highbd_blend_a64_vmask_sse4_1;
+  aom_highbd_convolve8_horiz = aom_highbd_convolve8_horiz_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve8_horiz = aom_highbd_convolve8_horiz_avx2;
+  aom_highbd_convolve8_vert = aom_highbd_convolve8_vert_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve8_vert = aom_highbd_convolve8_vert_avx2;
+  aom_highbd_convolve_copy = aom_highbd_convolve_copy_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_convolve_copy = aom_highbd_convolve_copy_avx2;
+  aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_14_dual = aom_highbd_lpf_horizontal_14_dual_avx2;
+  aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_4_dual = aom_highbd_lpf_horizontal_4_dual_avx2;
+  aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_horizontal_8_dual = aom_highbd_lpf_horizontal_8_dual_avx2;
+  aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_14_dual = aom_highbd_lpf_vertical_14_dual_avx2;
+  aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_4_dual = aom_highbd_lpf_vertical_4_dual_avx2;
+  aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_sse2;
+  if (flags & HAS_AVX2)
+    aom_highbd_lpf_vertical_8_dual = aom_highbd_lpf_vertical_8_dual_avx2;
+  aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_c;
+  if (flags & HAS_SSE4_1)
+    aom_lowbd_blend_a64_d16_mask = aom_lowbd_blend_a64_d16_mask_sse4_1;
+  aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x16 = aom_paeth_predictor_16x16_avx2;
+  aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x32 = aom_paeth_predictor_16x32_avx2;
+  aom_paeth_predictor_16x4 = aom_paeth_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x4 = aom_paeth_predictor_16x4_ssse3;
+  aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x64 = aom_paeth_predictor_16x64_avx2;
+  aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_16x8 = aom_paeth_predictor_16x8_avx2;
+  aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x16 = aom_paeth_predictor_32x16_avx2;
+  aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x32 = aom_paeth_predictor_32x32_avx2;
+  aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_32x64 = aom_paeth_predictor_32x64_avx2;
+  aom_paeth_predictor_32x8 = aom_paeth_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_32x8 = aom_paeth_predictor_32x8_ssse3;
+  aom_paeth_predictor_4x16 = aom_paeth_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x16 = aom_paeth_predictor_4x16_ssse3;
+  aom_paeth_predictor_4x4 = aom_paeth_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x4 = aom_paeth_predictor_4x4_ssse3;
+  aom_paeth_predictor_4x8 = aom_paeth_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_4x8 = aom_paeth_predictor_4x8_ssse3;
+  aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x16 = aom_paeth_predictor_64x16_avx2;
+  aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x32 = aom_paeth_predictor_64x32_avx2;
+  aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_ssse3;
+  if (flags & HAS_AVX2)
+    aom_paeth_predictor_64x64 = aom_paeth_predictor_64x64_avx2;
+  aom_paeth_predictor_8x16 = aom_paeth_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x16 = aom_paeth_predictor_8x16_ssse3;
+  aom_paeth_predictor_8x32 = aom_paeth_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x32 = aom_paeth_predictor_8x32_ssse3;
+  aom_paeth_predictor_8x4 = aom_paeth_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x4 = aom_paeth_predictor_8x4_ssse3;
+  aom_paeth_predictor_8x8 = aom_paeth_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_paeth_predictor_8x8 = aom_paeth_predictor_8x8_ssse3;
+  aom_smooth_h_predictor_16x16 = aom_smooth_h_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x16 = aom_smooth_h_predictor_16x16_ssse3;
+  aom_smooth_h_predictor_16x32 = aom_smooth_h_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x32 = aom_smooth_h_predictor_16x32_ssse3;
+  aom_smooth_h_predictor_16x4 = aom_smooth_h_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x4 = aom_smooth_h_predictor_16x4_ssse3;
+  aom_smooth_h_predictor_16x64 = aom_smooth_h_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x64 = aom_smooth_h_predictor_16x64_ssse3;
+  aom_smooth_h_predictor_16x8 = aom_smooth_h_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_16x8 = aom_smooth_h_predictor_16x8_ssse3;
+  aom_smooth_h_predictor_32x16 = aom_smooth_h_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x16 = aom_smooth_h_predictor_32x16_ssse3;
+  aom_smooth_h_predictor_32x32 = aom_smooth_h_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x32 = aom_smooth_h_predictor_32x32_ssse3;
+  aom_smooth_h_predictor_32x64 = aom_smooth_h_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x64 = aom_smooth_h_predictor_32x64_ssse3;
+  aom_smooth_h_predictor_32x8 = aom_smooth_h_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_32x8 = aom_smooth_h_predictor_32x8_ssse3;
+  aom_smooth_h_predictor_4x16 = aom_smooth_h_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x16 = aom_smooth_h_predictor_4x16_ssse3;
+  aom_smooth_h_predictor_4x4 = aom_smooth_h_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x4 = aom_smooth_h_predictor_4x4_ssse3;
+  aom_smooth_h_predictor_4x8 = aom_smooth_h_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_4x8 = aom_smooth_h_predictor_4x8_ssse3;
+  aom_smooth_h_predictor_64x16 = aom_smooth_h_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x16 = aom_smooth_h_predictor_64x16_ssse3;
+  aom_smooth_h_predictor_64x32 = aom_smooth_h_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x32 = aom_smooth_h_predictor_64x32_ssse3;
+  aom_smooth_h_predictor_64x64 = aom_smooth_h_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_64x64 = aom_smooth_h_predictor_64x64_ssse3;
+  aom_smooth_h_predictor_8x16 = aom_smooth_h_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x16 = aom_smooth_h_predictor_8x16_ssse3;
+  aom_smooth_h_predictor_8x32 = aom_smooth_h_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x32 = aom_smooth_h_predictor_8x32_ssse3;
+  aom_smooth_h_predictor_8x4 = aom_smooth_h_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x4 = aom_smooth_h_predictor_8x4_ssse3;
+  aom_smooth_h_predictor_8x8 = aom_smooth_h_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_h_predictor_8x8 = aom_smooth_h_predictor_8x8_ssse3;
+  aom_smooth_predictor_16x16 = aom_smooth_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x16 = aom_smooth_predictor_16x16_ssse3;
+  aom_smooth_predictor_16x32 = aom_smooth_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x32 = aom_smooth_predictor_16x32_ssse3;
+  aom_smooth_predictor_16x4 = aom_smooth_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x4 = aom_smooth_predictor_16x4_ssse3;
+  aom_smooth_predictor_16x64 = aom_smooth_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x64 = aom_smooth_predictor_16x64_ssse3;
+  aom_smooth_predictor_16x8 = aom_smooth_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_16x8 = aom_smooth_predictor_16x8_ssse3;
+  aom_smooth_predictor_32x16 = aom_smooth_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x16 = aom_smooth_predictor_32x16_ssse3;
+  aom_smooth_predictor_32x32 = aom_smooth_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x32 = aom_smooth_predictor_32x32_ssse3;
+  aom_smooth_predictor_32x64 = aom_smooth_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x64 = aom_smooth_predictor_32x64_ssse3;
+  aom_smooth_predictor_32x8 = aom_smooth_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_32x8 = aom_smooth_predictor_32x8_ssse3;
+  aom_smooth_predictor_4x16 = aom_smooth_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x16 = aom_smooth_predictor_4x16_ssse3;
+  aom_smooth_predictor_4x4 = aom_smooth_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x4 = aom_smooth_predictor_4x4_ssse3;
+  aom_smooth_predictor_4x8 = aom_smooth_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_4x8 = aom_smooth_predictor_4x8_ssse3;
+  aom_smooth_predictor_64x16 = aom_smooth_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x16 = aom_smooth_predictor_64x16_ssse3;
+  aom_smooth_predictor_64x32 = aom_smooth_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x32 = aom_smooth_predictor_64x32_ssse3;
+  aom_smooth_predictor_64x64 = aom_smooth_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_64x64 = aom_smooth_predictor_64x64_ssse3;
+  aom_smooth_predictor_8x16 = aom_smooth_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x16 = aom_smooth_predictor_8x16_ssse3;
+  aom_smooth_predictor_8x32 = aom_smooth_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x32 = aom_smooth_predictor_8x32_ssse3;
+  aom_smooth_predictor_8x4 = aom_smooth_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x4 = aom_smooth_predictor_8x4_ssse3;
+  aom_smooth_predictor_8x8 = aom_smooth_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_predictor_8x8 = aom_smooth_predictor_8x8_ssse3;
+  aom_smooth_v_predictor_16x16 = aom_smooth_v_predictor_16x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x16 = aom_smooth_v_predictor_16x16_ssse3;
+  aom_smooth_v_predictor_16x32 = aom_smooth_v_predictor_16x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x32 = aom_smooth_v_predictor_16x32_ssse3;
+  aom_smooth_v_predictor_16x4 = aom_smooth_v_predictor_16x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x4 = aom_smooth_v_predictor_16x4_ssse3;
+  aom_smooth_v_predictor_16x64 = aom_smooth_v_predictor_16x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x64 = aom_smooth_v_predictor_16x64_ssse3;
+  aom_smooth_v_predictor_16x8 = aom_smooth_v_predictor_16x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_16x8 = aom_smooth_v_predictor_16x8_ssse3;
+  aom_smooth_v_predictor_32x16 = aom_smooth_v_predictor_32x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x16 = aom_smooth_v_predictor_32x16_ssse3;
+  aom_smooth_v_predictor_32x32 = aom_smooth_v_predictor_32x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x32 = aom_smooth_v_predictor_32x32_ssse3;
+  aom_smooth_v_predictor_32x64 = aom_smooth_v_predictor_32x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x64 = aom_smooth_v_predictor_32x64_ssse3;
+  aom_smooth_v_predictor_32x8 = aom_smooth_v_predictor_32x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_32x8 = aom_smooth_v_predictor_32x8_ssse3;
+  aom_smooth_v_predictor_4x16 = aom_smooth_v_predictor_4x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x16 = aom_smooth_v_predictor_4x16_ssse3;
+  aom_smooth_v_predictor_4x4 = aom_smooth_v_predictor_4x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x4 = aom_smooth_v_predictor_4x4_ssse3;
+  aom_smooth_v_predictor_4x8 = aom_smooth_v_predictor_4x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_4x8 = aom_smooth_v_predictor_4x8_ssse3;
+  aom_smooth_v_predictor_64x16 = aom_smooth_v_predictor_64x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x16 = aom_smooth_v_predictor_64x16_ssse3;
+  aom_smooth_v_predictor_64x32 = aom_smooth_v_predictor_64x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x32 = aom_smooth_v_predictor_64x32_ssse3;
+  aom_smooth_v_predictor_64x64 = aom_smooth_v_predictor_64x64_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_64x64 = aom_smooth_v_predictor_64x64_ssse3;
+  aom_smooth_v_predictor_8x16 = aom_smooth_v_predictor_8x16_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x16 = aom_smooth_v_predictor_8x16_ssse3;
+  aom_smooth_v_predictor_8x32 = aom_smooth_v_predictor_8x32_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x32 = aom_smooth_v_predictor_8x32_ssse3;
+  aom_smooth_v_predictor_8x4 = aom_smooth_v_predictor_8x4_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x4 = aom_smooth_v_predictor_8x4_ssse3;
+  aom_smooth_v_predictor_8x8 = aom_smooth_v_predictor_8x8_c;
+  if (flags & HAS_SSSE3)
+    aom_smooth_v_predictor_8x8 = aom_smooth_v_predictor_8x8_ssse3;
+  aom_v_predictor_32x16 = aom_v_predictor_32x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x16 = aom_v_predictor_32x16_avx2;
+  aom_v_predictor_32x32 = aom_v_predictor_32x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x32 = aom_v_predictor_32x32_avx2;
+  aom_v_predictor_32x64 = aom_v_predictor_32x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_32x64 = aom_v_predictor_32x64_avx2;
+  aom_v_predictor_64x16 = aom_v_predictor_64x16_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x16 = aom_v_predictor_64x16_avx2;
+  aom_v_predictor_64x32 = aom_v_predictor_64x32_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x32 = aom_v_predictor_64x32_avx2;
+  aom_v_predictor_64x64 = aom_v_predictor_64x64_sse2;
+  if (flags & HAS_AVX2)
+    aom_v_predictor_64x64 = aom_v_predictor_64x64_avx2;
+  av1_round_shift_array = av1_round_shift_array_c;
+  if (flags & HAS_SSE4_1)
+    av1_round_shift_array = av1_round_shift_array_sse4_1;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h b/third_party/libaom/source/config/win/x64/config/aom_scale_rtcd.h
similarity index 71%
copy from third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
copy to third_party/libaom/source/config/win/x64/config/aom_scale_rtcd.h
index fbf3bde..9fe39d9 100644
--- a/third_party/libaom/source/config/linux/ia32/aom_scale_rtcd.h
+++ b/third_party/libaom/source/config/win/x64/config/aom_scale_rtcd.h
@@ -1,3 +1,4 @@
+// This file is generated. Do not edit.
 #ifndef AOM_SCALE_RTCD_H_
 #define AOM_SCALE_RTCD_H_
 
@@ -13,13 +14,15 @@
 extern "C" {
 #endif
 
-void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                const int num_planes);
 #define aom_extend_frame_borders aom_extend_frame_borders_c
 
 void aom_extend_frame_borders_y_c(struct yv12_buffer_config* ybf);
 #define aom_extend_frame_borders_y aom_extend_frame_borders_y_c
 
-void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf);
+void aom_extend_frame_inner_borders_c(struct yv12_buffer_config* ybf,
+                                      const int num_planes);
 #define aom_extend_frame_inner_borders aom_extend_frame_inner_borders_c
 
 void aom_horizontal_line_2_1_scale_c(const unsigned char* source,
@@ -69,7 +72,8 @@
 #define aom_vertical_band_5_4_scale aom_vertical_band_5_4_scale_c
 
 void aom_yv12_copy_frame_c(const struct yv12_buffer_config* src_bc,
-                           struct yv12_buffer_config* dst_bc);
+                           struct yv12_buffer_config* dst_bc,
+                           const int num_planes);
 #define aom_yv12_copy_frame aom_yv12_copy_frame_c
 
 void aom_yv12_copy_u_c(const struct yv12_buffer_config* src_bc,
@@ -84,9 +88,34 @@
                        struct yv12_buffer_config* dst_ybc);
 #define aom_yv12_copy_y aom_yv12_copy_y_c
 
-void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf);
+void aom_yv12_extend_frame_borders_c(struct yv12_buffer_config* ybf,
+                                     const int num_planes);
 #define aom_yv12_extend_frame_borders aom_yv12_extend_frame_borders_c
 
+void aom_yv12_partial_copy_u_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_u aom_yv12_partial_copy_u_c
+
+void aom_yv12_partial_copy_v_c(const struct yv12_buffer_config* src_bc,
+                               struct yv12_buffer_config* dst_bc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_v aom_yv12_partial_copy_v_c
+
+void aom_yv12_partial_copy_y_c(const struct yv12_buffer_config* src_ybc,
+                               struct yv12_buffer_config* dst_ybc,
+                               int hstart,
+                               int hend,
+                               int vstart,
+                               int vend);
+#define aom_yv12_partial_copy_y aom_yv12_partial_copy_y_c
+
 void aom_scale_rtcd(void);
 
 #ifdef RTCD_C
diff --git a/third_party/libaom/source/config/win/x64/config/av1_rtcd.h b/third_party/libaom/source/config/win/x64/config/av1_rtcd.h
new file mode 100644
index 0000000..961d3dd7
--- /dev/null
+++ b/third_party/libaom/source/config/win/x64/config/av1_rtcd.h
@@ -0,0 +1,2230 @@
+// This file is generated. Do not edit.
+#ifndef AV1_RTCD_H_
+#define AV1_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * AV1
+ */
+
+#include "aom/aom_integer.h"
+#include "aom_dsp/txfm_common.h"
+#include "av1/common/av1_txfm.h"
+#include "av1/common/common.h"
+#include "av1/common/convolve.h"
+#include "av1/common/enums.h"
+#include "av1/common/filter.h"
+#include "av1/common/odintrin.h"
+#include "av1/common/quant_common.h"
+#include "av1/common/restoration.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct txfm_param;
+struct aom_variance_vtable;
+struct search_site_config;
+struct yv12_buffer_config;
+
+/* Function pointers return by CfL functions */
+typedef void (*cfl_subsample_lbd_fn)(const uint8_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subsample_hbd_fn)(const uint16_t* input,
+                                     int input_stride,
+                                     uint16_t* output_q3);
+
+typedef void (*cfl_subtract_average_fn)(const uint16_t* src, int16_t* dst);
+
+typedef void (*cfl_predict_lbd_fn)(const int16_t* src,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3);
+
+typedef void (*cfl_predict_hbd_fn)(const int16_t* src,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int alpha_q3,
+                                   int bd);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void apply_selfguided_restoration_c(const uint8_t* dat,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    int eps,
+                                    const int* xqd,
+                                    uint8_t* dst,
+                                    int dst_stride,
+                                    int32_t* tmpbuf,
+                                    int bit_depth,
+                                    int highbd);
+void apply_selfguided_restoration_sse4_1(const uint8_t* dat,
+                                         int width,
+                                         int height,
+                                         int stride,
+                                         int eps,
+                                         const int* xqd,
+                                         uint8_t* dst,
+                                         int dst_stride,
+                                         int32_t* tmpbuf,
+                                         int bit_depth,
+                                         int highbd);
+void apply_selfguided_restoration_avx2(const uint8_t* dat,
+                                       int width,
+                                       int height,
+                                       int stride,
+                                       int eps,
+                                       const int* xqd,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int32_t* tmpbuf,
+                                       int bit_depth,
+                                       int highbd);
+RTCD_EXTERN void (*apply_selfguided_restoration)(const uint8_t* dat,
+                                                 int width,
+                                                 int height,
+                                                 int stride,
+                                                 int eps,
+                                                 const int* xqd,
+                                                 uint8_t* dst,
+                                                 int dst_stride,
+                                                 int32_t* tmpbuf,
+                                                 int bit_depth,
+                                                 int highbd);
+
+void av1_build_compound_diffwtd_mask_c(uint8_t* mask,
+                                       DIFFWTD_MASK_TYPE mask_type,
+                                       const uint8_t* src0,
+                                       int src0_stride,
+                                       const uint8_t* src1,
+                                       int src1_stride,
+                                       int h,
+                                       int w);
+void av1_build_compound_diffwtd_mask_sse4_1(uint8_t* mask,
+                                            DIFFWTD_MASK_TYPE mask_type,
+                                            const uint8_t* src0,
+                                            int src0_stride,
+                                            const uint8_t* src1,
+                                            int src1_stride,
+                                            int h,
+                                            int w);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask)(uint8_t* mask,
+                                                    DIFFWTD_MASK_TYPE mask_type,
+                                                    const uint8_t* src0,
+                                                    int src0_stride,
+                                                    const uint8_t* src1,
+                                                    int src1_stride,
+                                                    int h,
+                                                    int w);
+
+void av1_build_compound_diffwtd_mask_d16_c(uint8_t* mask,
+                                           DIFFWTD_MASK_TYPE mask_type,
+                                           const CONV_BUF_TYPE* src0,
+                                           int src0_stride,
+                                           const CONV_BUF_TYPE* src1,
+                                           int src1_stride,
+                                           int h,
+                                           int w,
+                                           ConvolveParams* conv_params,
+                                           int bd);
+void av1_build_compound_diffwtd_mask_d16_sse4_1(uint8_t* mask,
+                                                DIFFWTD_MASK_TYPE mask_type,
+                                                const CONV_BUF_TYPE* src0,
+                                                int src0_stride,
+                                                const CONV_BUF_TYPE* src1,
+                                                int src1_stride,
+                                                int h,
+                                                int w,
+                                                ConvolveParams* conv_params,
+                                                int bd);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask_d16)(
+    uint8_t* mask,
+    DIFFWTD_MASK_TYPE mask_type,
+    const CONV_BUF_TYPE* src0,
+    int src0_stride,
+    const CONV_BUF_TYPE* src1,
+    int src1_stride,
+    int h,
+    int w,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_build_compound_diffwtd_mask_highbd_c(uint8_t* mask,
+                                              DIFFWTD_MASK_TYPE mask_type,
+                                              const uint8_t* src0,
+                                              int src0_stride,
+                                              const uint8_t* src1,
+                                              int src1_stride,
+                                              int h,
+                                              int w,
+                                              int bd);
+void av1_build_compound_diffwtd_mask_highbd_ssse3(uint8_t* mask,
+                                                  DIFFWTD_MASK_TYPE mask_type,
+                                                  const uint8_t* src0,
+                                                  int src0_stride,
+                                                  const uint8_t* src1,
+                                                  int src1_stride,
+                                                  int h,
+                                                  int w,
+                                                  int bd);
+void av1_build_compound_diffwtd_mask_highbd_avx2(uint8_t* mask,
+                                                 DIFFWTD_MASK_TYPE mask_type,
+                                                 const uint8_t* src0,
+                                                 int src0_stride,
+                                                 const uint8_t* src1,
+                                                 int src1_stride,
+                                                 int h,
+                                                 int w,
+                                                 int bd);
+RTCD_EXTERN void (*av1_build_compound_diffwtd_mask_highbd)(
+    uint8_t* mask,
+    DIFFWTD_MASK_TYPE mask_type,
+    const uint8_t* src0,
+    int src0_stride,
+    const uint8_t* src1,
+    int src1_stride,
+    int h,
+    int w,
+    int bd);
+
+void av1_convolve_2d_copy_sr_c(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_sse2(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+void av1_convolve_2d_copy_sr_avx2(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_copy_sr)(const uint8_t* src,
+                                            int src_stride,
+                                            uint8_t* dst,
+                                            int dst_stride,
+                                            int w,
+                                            int h,
+                                            InterpFilterParams* filter_params_x,
+                                            InterpFilterParams* filter_params_y,
+                                            const int subpel_x_q4,
+                                            const int subpel_y_q4,
+                                            ConvolveParams* conv_params);
+
+void av1_convolve_2d_scale_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_qn,
+                             const int x_step_qn,
+                             const int subpel_y_q4,
+                             const int y_step_qn,
+                             ConvolveParams* conv_params);
+void av1_convolve_2d_scale_sse4_1(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_qn,
+                                  const int x_step_qn,
+                                  const int subpel_y_q4,
+                                  const int y_step_qn,
+                                  ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_scale)(const uint8_t* src,
+                                          int src_stride,
+                                          uint8_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          InterpFilterParams* filter_params_x,
+                                          InterpFilterParams* filter_params_y,
+                                          const int subpel_x_qn,
+                                          const int x_step_qn,
+                                          const int subpel_y_q4,
+                                          const int y_step_qn,
+                                          ConvolveParams* conv_params);
+
+void av1_convolve_2d_sr_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_convolve_2d_sr_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_convolve_2d_sr_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_2d_sr)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_convolve_horiz_rs_c(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             const int16_t* x_filters,
+                             int x0_qn,
+                             int x_step_qn);
+void av1_convolve_horiz_rs_sse4_1(const uint8_t* src,
+                                  int src_stride,
+                                  uint8_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  const int16_t* x_filters,
+                                  int x0_qn,
+                                  int x_step_qn);
+RTCD_EXTERN void (*av1_convolve_horiz_rs)(const uint8_t* src,
+                                          int src_stride,
+                                          uint8_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          const int16_t* x_filters,
+                                          int x0_qn,
+                                          int x_step_qn);
+
+void av1_convolve_x_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_x_sr_sse2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+void av1_convolve_x_sr_avx2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_x_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_convolve_y_sr_c(const uint8_t* src,
+                         int src_stride,
+                         uint8_t* dst,
+                         int dst_stride,
+                         int w,
+                         int h,
+                         InterpFilterParams* filter_params_x,
+                         InterpFilterParams* filter_params_y,
+                         const int subpel_x_q4,
+                         const int subpel_y_q4,
+                         ConvolveParams* conv_params);
+void av1_convolve_y_sr_sse2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+void av1_convolve_y_sr_avx2(const uint8_t* src,
+                            int src_stride,
+                            uint8_t* dst,
+                            int dst_stride,
+                            int w,
+                            int h,
+                            InterpFilterParams* filter_params_x,
+                            InterpFilterParams* filter_params_y,
+                            const int subpel_x_q4,
+                            const int subpel_y_q4,
+                            ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_convolve_y_sr)(const uint8_t* src,
+                                      int src_stride,
+                                      uint8_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params);
+
+void av1_dr_prediction_z1_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z1 av1_dr_prediction_z1_c
+
+void av1_dr_prediction_z2_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_above,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z2 av1_dr_prediction_z2_c
+
+void av1_dr_prediction_z3_c(uint8_t* dst,
+                            ptrdiff_t stride,
+                            int bw,
+                            int bh,
+                            const uint8_t* above,
+                            const uint8_t* left,
+                            int upsample_left,
+                            int dx,
+                            int dy);
+#define av1_dr_prediction_z3 av1_dr_prediction_z3_c
+
+void av1_filter_intra_edge_c(uint8_t* p, int sz, int strength);
+void av1_filter_intra_edge_sse4_1(uint8_t* p, int sz, int strength);
+RTCD_EXTERN void (*av1_filter_intra_edge)(uint8_t* p, int sz, int strength);
+
+void av1_filter_intra_edge_high_c(uint16_t* p, int sz, int strength);
+void av1_filter_intra_edge_high_sse4_1(uint16_t* p, int sz, int strength);
+RTCD_EXTERN void (*av1_filter_intra_edge_high)(uint16_t* p,
+                                               int sz,
+                                               int strength);
+
+void av1_filter_intra_predictor_c(uint8_t* dst,
+                                  ptrdiff_t stride,
+                                  TX_SIZE tx_size,
+                                  const uint8_t* above,
+                                  const uint8_t* left,
+                                  int mode);
+void av1_filter_intra_predictor_sse4_1(uint8_t* dst,
+                                       ptrdiff_t stride,
+                                       TX_SIZE tx_size,
+                                       const uint8_t* above,
+                                       const uint8_t* left,
+                                       int mode);
+RTCD_EXTERN void (*av1_filter_intra_predictor)(uint8_t* dst,
+                                               ptrdiff_t stride,
+                                               TX_SIZE tx_size,
+                                               const uint8_t* above,
+                                               const uint8_t* left,
+                                               int mode);
+
+void av1_highbd_convolve8_c(const uint8_t* src,
+                            ptrdiff_t src_stride,
+                            uint8_t* dst,
+                            ptrdiff_t dst_stride,
+                            const int16_t* filter_x,
+                            int x_step_q4,
+                            const int16_t* filter_y,
+                            int y_step_q4,
+                            int w,
+                            int h,
+                            int bps);
+void av1_highbd_convolve8_sse2(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve8 av1_highbd_convolve8_sse2
+
+void av1_highbd_convolve8_horiz_c(const uint8_t* src,
+                                  ptrdiff_t src_stride,
+                                  uint8_t* dst,
+                                  ptrdiff_t dst_stride,
+                                  const int16_t* filter_x,
+                                  int x_step_q4,
+                                  const int16_t* filter_y,
+                                  int y_step_q4,
+                                  int w,
+                                  int h,
+                                  int bps);
+void av1_highbd_convolve8_horiz_sse2(const uint8_t* src,
+                                     ptrdiff_t src_stride,
+                                     uint8_t* dst,
+                                     ptrdiff_t dst_stride,
+                                     const int16_t* filter_x,
+                                     int x_step_q4,
+                                     const int16_t* filter_y,
+                                     int y_step_q4,
+                                     int w,
+                                     int h,
+                                     int bps);
+#define av1_highbd_convolve8_horiz av1_highbd_convolve8_horiz_sse2
+
+void av1_highbd_convolve8_vert_c(const uint8_t* src,
+                                 ptrdiff_t src_stride,
+                                 uint8_t* dst,
+                                 ptrdiff_t dst_stride,
+                                 const int16_t* filter_x,
+                                 int x_step_q4,
+                                 const int16_t* filter_y,
+                                 int y_step_q4,
+                                 int w,
+                                 int h,
+                                 int bps);
+void av1_highbd_convolve8_vert_sse2(const uint8_t* src,
+                                    ptrdiff_t src_stride,
+                                    uint8_t* dst,
+                                    ptrdiff_t dst_stride,
+                                    const int16_t* filter_x,
+                                    int x_step_q4,
+                                    const int16_t* filter_y,
+                                    int y_step_q4,
+                                    int w,
+                                    int h,
+                                    int bps);
+#define av1_highbd_convolve8_vert av1_highbd_convolve8_vert_sse2
+
+void av1_highbd_convolve_2d_copy_sr_c(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_convolve_2d_copy_sr_sse2(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int subpel_y_q4,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+void av1_highbd_convolve_2d_copy_sr_avx2(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int subpel_y_q4,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_copy_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_2d_scale_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int x_step_qn,
+                                    const int subpel_y_q4,
+                                    const int y_step_qn,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_2d_scale_sse4_1(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         InterpFilterParams* filter_params_x,
+                                         InterpFilterParams* filter_params_y,
+                                         const int subpel_x_q4,
+                                         const int x_step_qn,
+                                         const int subpel_y_q4,
+                                         const int y_step_qn,
+                                         ConvolveParams* conv_params,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_scale)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int x_step_qn,
+    const int subpel_y_q4,
+    const int y_step_qn,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_2d_sr_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_convolve_2d_sr_ssse3(const uint16_t* src,
+                                     int src_stride,
+                                     uint16_t* dst,
+                                     int dst_stride,
+                                     int w,
+                                     int h,
+                                     InterpFilterParams* filter_params_x,
+                                     InterpFilterParams* filter_params_y,
+                                     const int subpel_x_q4,
+                                     const int subpel_y_q4,
+                                     ConvolveParams* conv_params,
+                                     int bd);
+void av1_highbd_convolve_2d_sr_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_2d_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_avg_c(const uint8_t* src,
+                               ptrdiff_t src_stride,
+                               uint8_t* dst,
+                               ptrdiff_t dst_stride,
+                               const int16_t* filter_x,
+                               int x_step_q4,
+                               const int16_t* filter_y,
+                               int y_step_q4,
+                               int w,
+                               int h,
+                               int bps);
+#define av1_highbd_convolve_avg av1_highbd_convolve_avg_c
+
+void av1_highbd_convolve_copy_c(const uint8_t* src,
+                                ptrdiff_t src_stride,
+                                uint8_t* dst,
+                                ptrdiff_t dst_stride,
+                                const int16_t* filter_x,
+                                int x_step_q4,
+                                const int16_t* filter_y,
+                                int y_step_q4,
+                                int w,
+                                int h,
+                                int bps);
+#define av1_highbd_convolve_copy av1_highbd_convolve_copy_c
+
+void av1_highbd_convolve_horiz_rs_c(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    const int16_t* x_filters,
+                                    int x0_qn,
+                                    int x_step_qn,
+                                    int bd);
+void av1_highbd_convolve_horiz_rs_sse4_1(const uint16_t* src,
+                                         int src_stride,
+                                         uint16_t* dst,
+                                         int dst_stride,
+                                         int w,
+                                         int h,
+                                         const int16_t* x_filters,
+                                         int x0_qn,
+                                         int x_step_qn,
+                                         int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_horiz_rs)(const uint16_t* src,
+                                                 int src_stride,
+                                                 uint16_t* dst,
+                                                 int dst_stride,
+                                                 int w,
+                                                 int h,
+                                                 const int16_t* x_filters,
+                                                 int x0_qn,
+                                                 int x_step_qn,
+                                                 int bd);
+
+void av1_highbd_convolve_x_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+void av1_highbd_convolve_x_sr_ssse3(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_x_sr_avx2(const uint16_t* src,
+                                   int src_stride,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params,
+                                   int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_x_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_convolve_y_sr_c(const uint16_t* src,
+                                int src_stride,
+                                uint16_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params,
+                                int bd);
+void av1_highbd_convolve_y_sr_ssse3(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+void av1_highbd_convolve_y_sr_avx2(const uint16_t* src,
+                                   int src_stride,
+                                   uint16_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params,
+                                   int bd);
+RTCD_EXTERN void (*av1_highbd_convolve_y_sr)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_dr_prediction_z1_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z1 av1_highbd_dr_prediction_z1_c
+
+void av1_highbd_dr_prediction_z2_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_above,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z2 av1_highbd_dr_prediction_z2_c
+
+void av1_highbd_dr_prediction_z3_c(uint16_t* dst,
+                                   ptrdiff_t stride,
+                                   int bw,
+                                   int bh,
+                                   const uint16_t* above,
+                                   const uint16_t* left,
+                                   int upsample_left,
+                                   int dx,
+                                   int dy,
+                                   int bd);
+#define av1_highbd_dr_prediction_z3 av1_highbd_dr_prediction_z3_c
+
+void av1_highbd_iwht4x4_16_add_c(const tran_low_t* input,
+                                 uint8_t* dest,
+                                 int dest_stride,
+                                 int bd);
+#define av1_highbd_iwht4x4_16_add av1_highbd_iwht4x4_16_add_c
+
+void av1_highbd_iwht4x4_1_add_c(const tran_low_t* input,
+                                uint8_t* dest,
+                                int dest_stride,
+                                int bd);
+#define av1_highbd_iwht4x4_1_add av1_highbd_iwht4x4_1_add_c
+
+void av1_highbd_jnt_convolve_2d_c(const uint16_t* src,
+                                  int src_stride,
+                                  uint16_t* dst,
+                                  int dst_stride,
+                                  int w,
+                                  int h,
+                                  InterpFilterParams* filter_params_x,
+                                  InterpFilterParams* filter_params_y,
+                                  const int subpel_x_q4,
+                                  const int subpel_y_q4,
+                                  ConvolveParams* conv_params,
+                                  int bd);
+void av1_highbd_jnt_convolve_2d_sse4_1(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+void av1_highbd_jnt_convolve_2d_avx2(const uint16_t* src,
+                                     int src_stride,
+                                     uint16_t* dst,
+                                     int dst_stride,
+                                     int w,
+                                     int h,
+                                     InterpFilterParams* filter_params_x,
+                                     InterpFilterParams* filter_params_y,
+                                     const int subpel_x_q4,
+                                     const int subpel_y_q4,
+                                     ConvolveParams* conv_params,
+                                     int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_2d)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_2d_copy_c(const uint16_t* src,
+                                       int src_stride,
+                                       uint16_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params,
+                                       int bd);
+void av1_highbd_jnt_convolve_2d_copy_sse4_1(const uint16_t* src,
+                                            int src_stride,
+                                            uint16_t* dst,
+                                            int dst_stride,
+                                            int w,
+                                            int h,
+                                            InterpFilterParams* filter_params_x,
+                                            InterpFilterParams* filter_params_y,
+                                            const int subpel_x_q4,
+                                            const int subpel_y_q4,
+                                            ConvolveParams* conv_params,
+                                            int bd);
+void av1_highbd_jnt_convolve_2d_copy_avx2(const uint16_t* src,
+                                          int src_stride,
+                                          uint16_t* dst,
+                                          int dst_stride,
+                                          int w,
+                                          int h,
+                                          InterpFilterParams* filter_params_x,
+                                          InterpFilterParams* filter_params_y,
+                                          const int subpel_x_q4,
+                                          const int subpel_y_q4,
+                                          ConvolveParams* conv_params,
+                                          int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_2d_copy)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_x_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_jnt_convolve_x_sse4_1(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_jnt_convolve_x_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_x)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_jnt_convolve_y_c(const uint16_t* src,
+                                 int src_stride,
+                                 uint16_t* dst,
+                                 int dst_stride,
+                                 int w,
+                                 int h,
+                                 InterpFilterParams* filter_params_x,
+                                 InterpFilterParams* filter_params_y,
+                                 const int subpel_x_q4,
+                                 const int subpel_y_q4,
+                                 ConvolveParams* conv_params,
+                                 int bd);
+void av1_highbd_jnt_convolve_y_sse4_1(const uint16_t* src,
+                                      int src_stride,
+                                      uint16_t* dst,
+                                      int dst_stride,
+                                      int w,
+                                      int h,
+                                      InterpFilterParams* filter_params_x,
+                                      InterpFilterParams* filter_params_y,
+                                      const int subpel_x_q4,
+                                      const int subpel_y_q4,
+                                      ConvolveParams* conv_params,
+                                      int bd);
+void av1_highbd_jnt_convolve_y_avx2(const uint16_t* src,
+                                    int src_stride,
+                                    uint16_t* dst,
+                                    int dst_stride,
+                                    int w,
+                                    int h,
+                                    InterpFilterParams* filter_params_x,
+                                    InterpFilterParams* filter_params_y,
+                                    const int subpel_x_q4,
+                                    const int subpel_y_q4,
+                                    ConvolveParams* conv_params,
+                                    int bd);
+RTCD_EXTERN void (*av1_highbd_jnt_convolve_y)(
+    const uint16_t* src,
+    int src_stride,
+    uint16_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params,
+    int bd);
+
+void av1_highbd_warp_affine_c(const int32_t* mat,
+                              const uint16_t* ref,
+                              int width,
+                              int height,
+                              int stride,
+                              uint16_t* pred,
+                              int p_col,
+                              int p_row,
+                              int p_width,
+                              int p_height,
+                              int p_stride,
+                              int subsampling_x,
+                              int subsampling_y,
+                              int bd,
+                              ConvolveParams* conv_params,
+                              int16_t alpha,
+                              int16_t beta,
+                              int16_t gamma,
+                              int16_t delta);
+void av1_highbd_warp_affine_sse4_1(const int32_t* mat,
+                                   const uint16_t* ref,
+                                   int width,
+                                   int height,
+                                   int stride,
+                                   uint16_t* pred,
+                                   int p_col,
+                                   int p_row,
+                                   int p_width,
+                                   int p_height,
+                                   int p_stride,
+                                   int subsampling_x,
+                                   int subsampling_y,
+                                   int bd,
+                                   ConvolveParams* conv_params,
+                                   int16_t alpha,
+                                   int16_t beta,
+                                   int16_t gamma,
+                                   int16_t delta);
+RTCD_EXTERN void (*av1_highbd_warp_affine)(const int32_t* mat,
+                                           const uint16_t* ref,
+                                           int width,
+                                           int height,
+                                           int stride,
+                                           uint16_t* pred,
+                                           int p_col,
+                                           int p_row,
+                                           int p_width,
+                                           int p_height,
+                                           int p_stride,
+                                           int subsampling_x,
+                                           int subsampling_y,
+                                           int bd,
+                                           ConvolveParams* conv_params,
+                                           int16_t alpha,
+                                           int16_t beta,
+                                           int16_t gamma,
+                                           int16_t delta);
+
+void av1_highbd_wiener_convolve_add_src_c(const uint8_t* src,
+                                          ptrdiff_t src_stride,
+                                          uint8_t* dst,
+                                          ptrdiff_t dst_stride,
+                                          const int16_t* filter_x,
+                                          int x_step_q4,
+                                          const int16_t* filter_y,
+                                          int y_step_q4,
+                                          int w,
+                                          int h,
+                                          const ConvolveParams* conv_params,
+                                          int bps);
+void av1_highbd_wiener_convolve_add_src_ssse3(const uint8_t* src,
+                                              ptrdiff_t src_stride,
+                                              uint8_t* dst,
+                                              ptrdiff_t dst_stride,
+                                              const int16_t* filter_x,
+                                              int x_step_q4,
+                                              const int16_t* filter_y,
+                                              int y_step_q4,
+                                              int w,
+                                              int h,
+                                              const ConvolveParams* conv_params,
+                                              int bps);
+void av1_highbd_wiener_convolve_add_src_avx2(const uint8_t* src,
+                                             ptrdiff_t src_stride,
+                                             uint8_t* dst,
+                                             ptrdiff_t dst_stride,
+                                             const int16_t* filter_x,
+                                             int x_step_q4,
+                                             const int16_t* filter_y,
+                                             int y_step_q4,
+                                             int w,
+                                             int h,
+                                             const ConvolveParams* conv_params,
+                                             int bps);
+RTCD_EXTERN void (*av1_highbd_wiener_convolve_add_src)(
+    const uint8_t* src,
+    ptrdiff_t src_stride,
+    uint8_t* dst,
+    ptrdiff_t dst_stride,
+    const int16_t* filter_x,
+    int x_step_q4,
+    const int16_t* filter_y,
+    int y_step_q4,
+    int w,
+    int h,
+    const ConvolveParams* conv_params,
+    int bps);
+
+void av1_inv_txfm2d_add_16x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_16x16_sse4_1(const int32_t* input,
+                                     uint16_t* output,
+                                     int stride,
+                                     TX_TYPE tx_type,
+                                     int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_16x16)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_16x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x32 av1_inv_txfm2d_add_16x32_c
+
+void av1_inv_txfm2d_add_16x4_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x4 av1_inv_txfm2d_add_16x4_c
+
+void av1_inv_txfm2d_add_16x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_16x64 av1_inv_txfm2d_add_16x64_c
+
+void av1_inv_txfm2d_add_16x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_16x8 av1_inv_txfm2d_add_16x8_c
+
+void av1_inv_txfm2d_add_32x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x16 av1_inv_txfm2d_add_32x16_c
+
+void av1_inv_txfm2d_add_32x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_32x32_avx2(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_32x32)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_32x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_32x64 av1_inv_txfm2d_add_32x64_c
+
+void av1_inv_txfm2d_add_32x8_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_32x8 av1_inv_txfm2d_add_32x8_c
+
+void av1_inv_txfm2d_add_4x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_4x16 av1_inv_txfm2d_add_4x16_c
+
+void av1_inv_txfm2d_add_4x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+void av1_inv_txfm2d_add_4x4_sse4_1(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_4x4)(const int32_t* input,
+                                           uint16_t* output,
+                                           int stride,
+                                           TX_TYPE tx_type,
+                                           int bd);
+
+void av1_inv_txfm2d_add_4x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_4x8 av1_inv_txfm2d_add_4x8_c
+
+void av1_inv_txfm2d_add_64x16_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x16 av1_inv_txfm2d_add_64x16_c
+
+void av1_inv_txfm2d_add_64x32_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+#define av1_inv_txfm2d_add_64x32 av1_inv_txfm2d_add_64x32_c
+
+void av1_inv_txfm2d_add_64x64_c(const int32_t* input,
+                                uint16_t* output,
+                                int stride,
+                                TX_TYPE tx_type,
+                                int bd);
+void av1_inv_txfm2d_add_64x64_sse4_1(const int32_t* input,
+                                     uint16_t* output,
+                                     int stride,
+                                     TX_TYPE tx_type,
+                                     int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_64x64)(const int32_t* input,
+                                             uint16_t* output,
+                                             int stride,
+                                             TX_TYPE tx_type,
+                                             int bd);
+
+void av1_inv_txfm2d_add_8x16_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x16 av1_inv_txfm2d_add_8x16_c
+
+void av1_inv_txfm2d_add_8x32_c(const int32_t* input,
+                               uint16_t* output,
+                               int stride,
+                               TX_TYPE tx_type,
+                               int bd);
+#define av1_inv_txfm2d_add_8x32 av1_inv_txfm2d_add_8x32_c
+
+void av1_inv_txfm2d_add_8x4_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+#define av1_inv_txfm2d_add_8x4 av1_inv_txfm2d_add_8x4_c
+
+void av1_inv_txfm2d_add_8x8_c(const int32_t* input,
+                              uint16_t* output,
+                              int stride,
+                              TX_TYPE tx_type,
+                              int bd);
+void av1_inv_txfm2d_add_8x8_sse4_1(const int32_t* input,
+                                   uint16_t* output,
+                                   int stride,
+                                   TX_TYPE tx_type,
+                                   int bd);
+RTCD_EXTERN void (*av1_inv_txfm2d_add_8x8)(const int32_t* input,
+                                           uint16_t* output,
+                                           int stride,
+                                           TX_TYPE tx_type,
+                                           int bd);
+
+void av1_inv_txfm_add_c(const tran_low_t* dqcoeff,
+                        uint8_t* dst,
+                        int stride,
+                        const TxfmParam* txfm_param);
+void av1_inv_txfm_add_ssse3(const tran_low_t* dqcoeff,
+                            uint8_t* dst,
+                            int stride,
+                            const TxfmParam* txfm_param);
+void av1_inv_txfm_add_avx2(const tran_low_t* dqcoeff,
+                           uint8_t* dst,
+                           int stride,
+                           const TxfmParam* txfm_param);
+RTCD_EXTERN void (*av1_inv_txfm_add)(const tran_low_t* dqcoeff,
+                                     uint8_t* dst,
+                                     int stride,
+                                     const TxfmParam* txfm_param);
+
+void av1_jnt_convolve_2d_c(const uint8_t* src,
+                           int src_stride,
+                           uint8_t* dst,
+                           int dst_stride,
+                           int w,
+                           int h,
+                           InterpFilterParams* filter_params_x,
+                           InterpFilterParams* filter_params_y,
+                           const int subpel_x_q4,
+                           const int subpel_y_q4,
+                           ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_ssse3(const uint8_t* src,
+                               int src_stride,
+                               uint8_t* dst,
+                               int dst_stride,
+                               int w,
+                               int h,
+                               InterpFilterParams* filter_params_x,
+                               InterpFilterParams* filter_params_y,
+                               const int subpel_x_q4,
+                               const int subpel_y_q4,
+                               ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_avx2(const uint8_t* src,
+                              int src_stride,
+                              uint8_t* dst,
+                              int dst_stride,
+                              int w,
+                              int h,
+                              InterpFilterParams* filter_params_x,
+                              InterpFilterParams* filter_params_y,
+                              const int subpel_x_q4,
+                              const int subpel_y_q4,
+                              ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d)(const uint8_t* src,
+                                        int src_stride,
+                                        uint8_t* dst,
+                                        int dst_stride,
+                                        int w,
+                                        int h,
+                                        InterpFilterParams* filter_params_x,
+                                        InterpFilterParams* filter_params_y,
+                                        const int subpel_x_q4,
+                                        const int subpel_y_q4,
+                                        ConvolveParams* conv_params);
+
+void av1_jnt_convolve_2d_copy_c(const uint8_t* src,
+                                int src_stride,
+                                uint8_t* dst,
+                                int dst_stride,
+                                int w,
+                                int h,
+                                InterpFilterParams* filter_params_x,
+                                InterpFilterParams* filter_params_y,
+                                const int subpel_x_q4,
+                                const int subpel_y_q4,
+                                ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_sse2(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+void av1_jnt_convolve_2d_copy_avx2(const uint8_t* src,
+                                   int src_stride,
+                                   uint8_t* dst,
+                                   int dst_stride,
+                                   int w,
+                                   int h,
+                                   InterpFilterParams* filter_params_x,
+                                   InterpFilterParams* filter_params_y,
+                                   const int subpel_x_q4,
+                                   const int subpel_y_q4,
+                                   ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_2d_copy)(
+    const uint8_t* src,
+    int src_stride,
+    uint8_t* dst,
+    int dst_stride,
+    int w,
+    int h,
+    InterpFilterParams* filter_params_x,
+    InterpFilterParams* filter_params_y,
+    const int subpel_x_q4,
+    const int subpel_y_q4,
+    ConvolveParams* conv_params);
+
+void av1_jnt_convolve_x_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_x_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_jnt_convolve_x_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_x)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_jnt_convolve_y_c(const uint8_t* src,
+                          int src_stride,
+                          uint8_t* dst,
+                          int dst_stride,
+                          int w,
+                          int h,
+                          InterpFilterParams* filter_params_x,
+                          InterpFilterParams* filter_params_y,
+                          const int subpel_x_q4,
+                          const int subpel_y_q4,
+                          ConvolveParams* conv_params);
+void av1_jnt_convolve_y_sse2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+void av1_jnt_convolve_y_avx2(const uint8_t* src,
+                             int src_stride,
+                             uint8_t* dst,
+                             int dst_stride,
+                             int w,
+                             int h,
+                             InterpFilterParams* filter_params_x,
+                             InterpFilterParams* filter_params_y,
+                             const int subpel_x_q4,
+                             const int subpel_y_q4,
+                             ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_jnt_convolve_y)(const uint8_t* src,
+                                       int src_stride,
+                                       uint8_t* dst,
+                                       int dst_stride,
+                                       int w,
+                                       int h,
+                                       InterpFilterParams* filter_params_x,
+                                       InterpFilterParams* filter_params_y,
+                                       const int subpel_x_q4,
+                                       const int subpel_y_q4,
+                                       ConvolveParams* conv_params);
+
+void av1_selfguided_restoration_c(const uint8_t* dgd8,
+                                  int width,
+                                  int height,
+                                  int dgd_stride,
+                                  int32_t* flt0,
+                                  int32_t* flt1,
+                                  int flt_stride,
+                                  int sgr_params_idx,
+                                  int bit_depth,
+                                  int highbd);
+void av1_selfguided_restoration_sse4_1(const uint8_t* dgd8,
+                                       int width,
+                                       int height,
+                                       int dgd_stride,
+                                       int32_t* flt0,
+                                       int32_t* flt1,
+                                       int flt_stride,
+                                       int sgr_params_idx,
+                                       int bit_depth,
+                                       int highbd);
+void av1_selfguided_restoration_avx2(const uint8_t* dgd8,
+                                     int width,
+                                     int height,
+                                     int dgd_stride,
+                                     int32_t* flt0,
+                                     int32_t* flt1,
+                                     int flt_stride,
+                                     int sgr_params_idx,
+                                     int bit_depth,
+                                     int highbd);
+RTCD_EXTERN void (*av1_selfguided_restoration)(const uint8_t* dgd8,
+                                               int width,
+                                               int height,
+                                               int dgd_stride,
+                                               int32_t* flt0,
+                                               int32_t* flt1,
+                                               int flt_stride,
+                                               int sgr_params_idx,
+                                               int bit_depth,
+                                               int highbd);
+
+void av1_upsample_intra_edge_c(uint8_t* p, int sz);
+void av1_upsample_intra_edge_sse4_1(uint8_t* p, int sz);
+RTCD_EXTERN void (*av1_upsample_intra_edge)(uint8_t* p, int sz);
+
+void av1_upsample_intra_edge_high_c(uint16_t* p, int sz, int bd);
+void av1_upsample_intra_edge_high_sse4_1(uint16_t* p, int sz, int bd);
+RTCD_EXTERN void (*av1_upsample_intra_edge_high)(uint16_t* p, int sz, int bd);
+
+void av1_warp_affine_c(const int32_t* mat,
+                       const uint8_t* ref,
+                       int width,
+                       int height,
+                       int stride,
+                       uint8_t* pred,
+                       int p_col,
+                       int p_row,
+                       int p_width,
+                       int p_height,
+                       int p_stride,
+                       int subsampling_x,
+                       int subsampling_y,
+                       ConvolveParams* conv_params,
+                       int16_t alpha,
+                       int16_t beta,
+                       int16_t gamma,
+                       int16_t delta);
+void av1_warp_affine_sse4_1(const int32_t* mat,
+                            const uint8_t* ref,
+                            int width,
+                            int height,
+                            int stride,
+                            uint8_t* pred,
+                            int p_col,
+                            int p_row,
+                            int p_width,
+                            int p_height,
+                            int p_stride,
+                            int subsampling_x,
+                            int subsampling_y,
+                            ConvolveParams* conv_params,
+                            int16_t alpha,
+                            int16_t beta,
+                            int16_t gamma,
+                            int16_t delta);
+RTCD_EXTERN void (*av1_warp_affine)(const int32_t* mat,
+                                    const uint8_t* ref,
+                                    int width,
+                                    int height,
+                                    int stride,
+                                    uint8_t* pred,
+                                    int p_col,
+                                    int p_row,
+                                    int p_width,
+                                    int p_height,
+                                    int p_stride,
+                                    int subsampling_x,
+                                    int subsampling_y,
+                                    ConvolveParams* conv_params,
+                                    int16_t alpha,
+                                    int16_t beta,
+                                    int16_t gamma,
+                                    int16_t delta);
+
+void av1_wiener_convolve_add_src_c(const uint8_t* src,
+                                   ptrdiff_t src_stride,
+                                   uint8_t* dst,
+                                   ptrdiff_t dst_stride,
+                                   const int16_t* filter_x,
+                                   int x_step_q4,
+                                   const int16_t* filter_y,
+                                   int y_step_q4,
+                                   int w,
+                                   int h,
+                                   const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_sse2(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+void av1_wiener_convolve_add_src_avx2(const uint8_t* src,
+                                      ptrdiff_t src_stride,
+                                      uint8_t* dst,
+                                      ptrdiff_t dst_stride,
+                                      const int16_t* filter_x,
+                                      int x_step_q4,
+                                      const int16_t* filter_y,
+                                      int y_step_q4,
+                                      int w,
+                                      int h,
+                                      const ConvolveParams* conv_params);
+RTCD_EXTERN void (*av1_wiener_convolve_add_src)(
+    const uint8_t* src,
+    ptrdiff_t src_stride,
+    uint8_t* dst,
+    ptrdiff_t dst_stride,
+    const int16_t* filter_x,
+    int x_step_q4,
+    const int16_t* filter_y,
+    int y_step_q4,
+    int w,
+    int h,
+    const ConvolveParams* conv_params);
+
+void cdef_filter_block_c(uint8_t* dst8,
+                         uint16_t* dst16,
+                         int dstride,
+                         const uint16_t* in,
+                         int pri_strength,
+                         int sec_strength,
+                         int dir,
+                         int pri_damping,
+                         int sec_damping,
+                         int bsize,
+                         int max,
+                         int coeff_shift);
+void cdef_filter_block_sse2(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+void cdef_filter_block_ssse3(uint8_t* dst8,
+                             uint16_t* dst16,
+                             int dstride,
+                             const uint16_t* in,
+                             int pri_strength,
+                             int sec_strength,
+                             int dir,
+                             int pri_damping,
+                             int sec_damping,
+                             int bsize,
+                             int max,
+                             int coeff_shift);
+void cdef_filter_block_sse4_1(uint8_t* dst8,
+                              uint16_t* dst16,
+                              int dstride,
+                              const uint16_t* in,
+                              int pri_strength,
+                              int sec_strength,
+                              int dir,
+                              int pri_damping,
+                              int sec_damping,
+                              int bsize,
+                              int max,
+                              int coeff_shift);
+void cdef_filter_block_avx2(uint8_t* dst8,
+                            uint16_t* dst16,
+                            int dstride,
+                            const uint16_t* in,
+                            int pri_strength,
+                            int sec_strength,
+                            int dir,
+                            int pri_damping,
+                            int sec_damping,
+                            int bsize,
+                            int max,
+                            int coeff_shift);
+RTCD_EXTERN void (*cdef_filter_block)(uint8_t* dst8,
+                                      uint16_t* dst16,
+                                      int dstride,
+                                      const uint16_t* in,
+                                      int pri_strength,
+                                      int sec_strength,
+                                      int dir,
+                                      int pri_damping,
+                                      int sec_damping,
+                                      int bsize,
+                                      int max,
+                                      int coeff_shift);
+
+int cdef_find_dir_c(const uint16_t* img,
+                    int stride,
+                    int32_t* var,
+                    int coeff_shift);
+int cdef_find_dir_sse2(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+int cdef_find_dir_ssse3(const uint16_t* img,
+                        int stride,
+                        int32_t* var,
+                        int coeff_shift);
+int cdef_find_dir_sse4_1(const uint16_t* img,
+                         int stride,
+                         int32_t* var,
+                         int coeff_shift);
+int cdef_find_dir_avx2(const uint16_t* img,
+                       int stride,
+                       int32_t* var,
+                       int coeff_shift);
+RTCD_EXTERN int (*cdef_find_dir)(const uint16_t* img,
+                                 int stride,
+                                 int32_t* var,
+                                 int coeff_shift);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_420_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_420_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_422_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_422_lbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_c(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_hbd_fn (*cfl_get_luma_subsampling_444_hbd)(
+    TX_SIZE tx_size);
+
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_c(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_ssse3(TX_SIZE tx_size);
+cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subsample_lbd_fn (*cfl_get_luma_subsampling_444_lbd)(
+    TX_SIZE tx_size);
+
+void copy_rect8_16bit_to_16bit_c(uint16_t* dst,
+                                 int dstride,
+                                 const uint16_t* src,
+                                 int sstride,
+                                 int v,
+                                 int h);
+void copy_rect8_16bit_to_16bit_sse2(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+void copy_rect8_16bit_to_16bit_ssse3(uint16_t* dst,
+                                     int dstride,
+                                     const uint16_t* src,
+                                     int sstride,
+                                     int v,
+                                     int h);
+void copy_rect8_16bit_to_16bit_sse4_1(uint16_t* dst,
+                                      int dstride,
+                                      const uint16_t* src,
+                                      int sstride,
+                                      int v,
+                                      int h);
+void copy_rect8_16bit_to_16bit_avx2(uint16_t* dst,
+                                    int dstride,
+                                    const uint16_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+RTCD_EXTERN void (*copy_rect8_16bit_to_16bit)(uint16_t* dst,
+                                              int dstride,
+                                              const uint16_t* src,
+                                              int sstride,
+                                              int v,
+                                              int h);
+
+void copy_rect8_8bit_to_16bit_c(uint16_t* dst,
+                                int dstride,
+                                const uint8_t* src,
+                                int sstride,
+                                int v,
+                                int h);
+void copy_rect8_8bit_to_16bit_sse2(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+void copy_rect8_8bit_to_16bit_ssse3(uint16_t* dst,
+                                    int dstride,
+                                    const uint8_t* src,
+                                    int sstride,
+                                    int v,
+                                    int h);
+void copy_rect8_8bit_to_16bit_sse4_1(uint16_t* dst,
+                                     int dstride,
+                                     const uint8_t* src,
+                                     int sstride,
+                                     int v,
+                                     int h);
+void copy_rect8_8bit_to_16bit_avx2(uint16_t* dst,
+                                   int dstride,
+                                   const uint8_t* src,
+                                   int sstride,
+                                   int v,
+                                   int h);
+RTCD_EXTERN void (*copy_rect8_8bit_to_16bit)(uint16_t* dst,
+                                             int dstride,
+                                             const uint8_t* src,
+                                             int sstride,
+                                             int v,
+                                             int h);
+
+cfl_predict_hbd_fn get_predict_hbd_fn_c(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_ssse3(TX_SIZE tx_size);
+cfl_predict_hbd_fn get_predict_hbd_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_hbd_fn (*get_predict_hbd_fn)(TX_SIZE tx_size);
+
+cfl_predict_lbd_fn get_predict_lbd_fn_c(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_ssse3(TX_SIZE tx_size);
+cfl_predict_lbd_fn get_predict_lbd_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_predict_lbd_fn (*get_predict_lbd_fn)(TX_SIZE tx_size);
+
+cfl_subtract_average_fn get_subtract_average_fn_c(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_sse2(TX_SIZE tx_size);
+cfl_subtract_average_fn get_subtract_average_fn_avx2(TX_SIZE tx_size);
+RTCD_EXTERN cfl_subtract_average_fn (*get_subtract_average_fn)(TX_SIZE tx_size);
+
+void av1_rtcd(void);
+
+#ifdef RTCD_C
+#include "aom_ports/x86.h"
+static void setup_rtcd_internal(void) {
+  int flags = x86_simd_caps();
+
+  (void)flags;
+
+  apply_selfguided_restoration = apply_selfguided_restoration_c;
+  if (flags & HAS_SSE4_1)
+    apply_selfguided_restoration = apply_selfguided_restoration_sse4_1;
+  if (flags & HAS_AVX2)
+    apply_selfguided_restoration = apply_selfguided_restoration_avx2;
+  av1_build_compound_diffwtd_mask = av1_build_compound_diffwtd_mask_c;
+  if (flags & HAS_SSE4_1)
+    av1_build_compound_diffwtd_mask = av1_build_compound_diffwtd_mask_sse4_1;
+  av1_build_compound_diffwtd_mask_d16 = av1_build_compound_diffwtd_mask_d16_c;
+  if (flags & HAS_SSE4_1)
+    av1_build_compound_diffwtd_mask_d16 =
+        av1_build_compound_diffwtd_mask_d16_sse4_1;
+  av1_build_compound_diffwtd_mask_highbd =
+      av1_build_compound_diffwtd_mask_highbd_c;
+  if (flags & HAS_SSSE3)
+    av1_build_compound_diffwtd_mask_highbd =
+        av1_build_compound_diffwtd_mask_highbd_ssse3;
+  if (flags & HAS_AVX2)
+    av1_build_compound_diffwtd_mask_highbd =
+        av1_build_compound_diffwtd_mask_highbd_avx2;
+  av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_2d_copy_sr = av1_convolve_2d_copy_sr_avx2;
+  av1_convolve_2d_scale = av1_convolve_2d_scale_c;
+  if (flags & HAS_SSE4_1)
+    av1_convolve_2d_scale = av1_convolve_2d_scale_sse4_1;
+  av1_convolve_2d_sr = av1_convolve_2d_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_2d_sr = av1_convolve_2d_sr_avx2;
+  av1_convolve_horiz_rs = av1_convolve_horiz_rs_c;
+  if (flags & HAS_SSE4_1)
+    av1_convolve_horiz_rs = av1_convolve_horiz_rs_sse4_1;
+  av1_convolve_x_sr = av1_convolve_x_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_x_sr = av1_convolve_x_sr_avx2;
+  av1_convolve_y_sr = av1_convolve_y_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_convolve_y_sr = av1_convolve_y_sr_avx2;
+  av1_filter_intra_edge = av1_filter_intra_edge_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_edge = av1_filter_intra_edge_sse4_1;
+  av1_filter_intra_edge_high = av1_filter_intra_edge_high_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_edge_high = av1_filter_intra_edge_high_sse4_1;
+  av1_filter_intra_predictor = av1_filter_intra_predictor_c;
+  if (flags & HAS_SSE4_1)
+    av1_filter_intra_predictor = av1_filter_intra_predictor_sse4_1;
+  av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_sse2;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_2d_copy_sr = av1_highbd_convolve_2d_copy_sr_avx2;
+  av1_highbd_convolve_2d_scale = av1_highbd_convolve_2d_scale_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_convolve_2d_scale = av1_highbd_convolve_2d_scale_sse4_1;
+  av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_2d_sr = av1_highbd_convolve_2d_sr_avx2;
+  av1_highbd_convolve_horiz_rs = av1_highbd_convolve_horiz_rs_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_convolve_horiz_rs = av1_highbd_convolve_horiz_rs_sse4_1;
+  av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_x_sr = av1_highbd_convolve_x_sr_avx2;
+  av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_convolve_y_sr = av1_highbd_convolve_y_sr_avx2;
+  av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_2d = av1_highbd_jnt_convolve_2d_avx2;
+  av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_2d_copy = av1_highbd_jnt_convolve_2d_copy_avx2;
+  av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_x = av1_highbd_jnt_convolve_x_avx2;
+  av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_highbd_jnt_convolve_y = av1_highbd_jnt_convolve_y_avx2;
+  av1_highbd_warp_affine = av1_highbd_warp_affine_c;
+  if (flags & HAS_SSE4_1)
+    av1_highbd_warp_affine = av1_highbd_warp_affine_sse4_1;
+  av1_highbd_wiener_convolve_add_src = av1_highbd_wiener_convolve_add_src_c;
+  if (flags & HAS_SSSE3)
+    av1_highbd_wiener_convolve_add_src =
+        av1_highbd_wiener_convolve_add_src_ssse3;
+  if (flags & HAS_AVX2)
+    av1_highbd_wiener_convolve_add_src =
+        av1_highbd_wiener_convolve_add_src_avx2;
+  av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_16x16 = av1_inv_txfm2d_add_16x16_sse4_1;
+  av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_c;
+  if (flags & HAS_AVX2)
+    av1_inv_txfm2d_add_32x32 = av1_inv_txfm2d_add_32x32_avx2;
+  av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_4x4 = av1_inv_txfm2d_add_4x4_sse4_1;
+  av1_inv_txfm2d_add_64x64 = av1_inv_txfm2d_add_64x64_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_64x64 = av1_inv_txfm2d_add_64x64_sse4_1;
+  av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_c;
+  if (flags & HAS_SSE4_1)
+    av1_inv_txfm2d_add_8x8 = av1_inv_txfm2d_add_8x8_sse4_1;
+  av1_inv_txfm_add = av1_inv_txfm_add_c;
+  if (flags & HAS_SSSE3)
+    av1_inv_txfm_add = av1_inv_txfm_add_ssse3;
+  if (flags & HAS_AVX2)
+    av1_inv_txfm_add = av1_inv_txfm_add_avx2;
+  av1_jnt_convolve_2d = av1_jnt_convolve_2d_c;
+  if (flags & HAS_SSSE3)
+    av1_jnt_convolve_2d = av1_jnt_convolve_2d_ssse3;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_2d = av1_jnt_convolve_2d_avx2;
+  av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_2d_copy = av1_jnt_convolve_2d_copy_avx2;
+  av1_jnt_convolve_x = av1_jnt_convolve_x_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_x = av1_jnt_convolve_x_avx2;
+  av1_jnt_convolve_y = av1_jnt_convolve_y_sse2;
+  if (flags & HAS_AVX2)
+    av1_jnt_convolve_y = av1_jnt_convolve_y_avx2;
+  av1_selfguided_restoration = av1_selfguided_restoration_c;
+  if (flags & HAS_SSE4_1)
+    av1_selfguided_restoration = av1_selfguided_restoration_sse4_1;
+  if (flags & HAS_AVX2)
+    av1_selfguided_restoration = av1_selfguided_restoration_avx2;
+  av1_upsample_intra_edge = av1_upsample_intra_edge_c;
+  if (flags & HAS_SSE4_1)
+    av1_upsample_intra_edge = av1_upsample_intra_edge_sse4_1;
+  av1_upsample_intra_edge_high = av1_upsample_intra_edge_high_c;
+  if (flags & HAS_SSE4_1)
+    av1_upsample_intra_edge_high = av1_upsample_intra_edge_high_sse4_1;
+  av1_warp_affine = av1_warp_affine_c;
+  if (flags & HAS_SSE4_1)
+    av1_warp_affine = av1_warp_affine_sse4_1;
+  av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_sse2;
+  if (flags & HAS_AVX2)
+    av1_wiener_convolve_add_src = av1_wiener_convolve_add_src_avx2;
+  cdef_filter_block = cdef_filter_block_sse2;
+  if (flags & HAS_SSSE3)
+    cdef_filter_block = cdef_filter_block_ssse3;
+  if (flags & HAS_SSE4_1)
+    cdef_filter_block = cdef_filter_block_sse4_1;
+  if (flags & HAS_AVX2)
+    cdef_filter_block = cdef_filter_block_avx2;
+  cdef_find_dir = cdef_find_dir_sse2;
+  if (flags & HAS_SSSE3)
+    cdef_find_dir = cdef_find_dir_ssse3;
+  if (flags & HAS_SSE4_1)
+    cdef_find_dir = cdef_find_dir_sse4_1;
+  if (flags & HAS_AVX2)
+    cdef_find_dir = cdef_find_dir_avx2;
+  cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_420_hbd = cfl_get_luma_subsampling_420_hbd_avx2;
+  cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_420_lbd = cfl_get_luma_subsampling_420_lbd_avx2;
+  cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_422_hbd = cfl_get_luma_subsampling_422_hbd_avx2;
+  cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_422_lbd = cfl_get_luma_subsampling_422_lbd_avx2;
+  cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_444_hbd = cfl_get_luma_subsampling_444_hbd_avx2;
+  cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_c;
+  if (flags & HAS_SSSE3)
+    cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_ssse3;
+  if (flags & HAS_AVX2)
+    cfl_get_luma_subsampling_444_lbd = cfl_get_luma_subsampling_444_lbd_avx2;
+  copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse2;
+  if (flags & HAS_SSSE3)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_ssse3;
+  if (flags & HAS_SSE4_1)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_sse4_1;
+  if (flags & HAS_AVX2)
+    copy_rect8_16bit_to_16bit = copy_rect8_16bit_to_16bit_avx2;
+  copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse2;
+  if (flags & HAS_SSSE3)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_ssse3;
+  if (flags & HAS_SSE4_1)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_sse4_1;
+  if (flags & HAS_AVX2)
+    copy_rect8_8bit_to_16bit = copy_rect8_8bit_to_16bit_avx2;
+  get_predict_hbd_fn = get_predict_hbd_fn_c;
+  if (flags & HAS_SSSE3)
+    get_predict_hbd_fn = get_predict_hbd_fn_ssse3;
+  if (flags & HAS_AVX2)
+    get_predict_hbd_fn = get_predict_hbd_fn_avx2;
+  get_predict_lbd_fn = get_predict_lbd_fn_c;
+  if (flags & HAS_SSSE3)
+    get_predict_lbd_fn = get_predict_lbd_fn_ssse3;
+  if (flags & HAS_AVX2)
+    get_predict_lbd_fn = get_predict_lbd_fn_avx2;
+  get_subtract_average_fn = get_subtract_average_fn_sse2;
+  if (flags & HAS_AVX2)
+    get_subtract_average_fn = get_subtract_average_fn_avx2;
+}
+#endif
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif
diff --git a/tools/gdb/gdbinit b/tools/gdb/gdbinit
index 44b3195..039ced9f3 100644
--- a/tools/gdb/gdbinit
+++ b/tools/gdb/gdbinit
@@ -1,5 +1,5 @@
-# This is gdbinit for source level debugging with -fdebug-prefix-map compile
-# option.
+# This is gdbinit for source level debugging with -fdebug-compilation-dir
+# compile option.
 
 python
 
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 61f67f7..af6b2ef4 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -19035,6 +19035,9 @@
       label="V8SpeechRecognitionEvent_Interpretation_AttributeGetter"/>
   <int value="2482" label="V8SpeechRecognitionEvent_Emma_AttributeGetter"/>
   <int value="2483" label="V8SpeechSynthesis_Speak_Method"/>
+  <int value="2484" label="LegacySymantecCertMainFrameResource"/>
+  <int value="2485" label="LegacySymantecCertInSubresource"/>
+  <int value="2486" label="LegacySymantecCertInSubframeMainResource"/>
 </enum>
 
 <enum name="FeedbackSource">
@@ -37972,6 +37975,7 @@
   <int value="4" label="AMP Redirection"/>
   <int value="5" label="NoScript"/>
   <int value="6" label="Unspecified"/>
+  <int value="7" label="ResourceLoadingHints"/>
 </enum>
 
 <enum name="PreviewsUserOptedOut">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index ed5f9d9..6fd9c7a 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -121552,6 +121552,8 @@
   <suffix name="LoFi" label="LoFi previews"/>
   <suffix name="NoScript" label="NoScript previews"/>
   <suffix name="Offline" label="Offline previews"/>
+  <suffix name="ResourceLoadingHints"
+      label="Resource loading hints based previews"/>
   <affected-histogram name="Previews.EligibilityReason"/>
   <affected-histogram name="Previews.InfoBarAction"/>
   <affected-histogram name="Previews.OptOut.UserOptedOut"/>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index 34a9de9..6a58716 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -830,6 +830,12 @@
     navigation and whether the document was in the main frame. This can be used
     to link subframe UKM events to the parent document.
   </summary>
+  <metric name="IsCrossOriginFrame">
+    <summary>
+      Whether the document was in a cross origin iframe. This can either be 0 or
+      1.
+    </summary>
+  </metric>
   <metric name="IsMainFrame">
     <summary>
       Whether the document was in the main frame. This is can either be 0 or 1.
@@ -1231,6 +1237,27 @@
   </metric>
 </event>
 
+<event name="Media.Autoplay.AudioContext">
+  <owner>mlamouri@chromium.org</owner>
+  <owner>media-dev@chromium.org</owner>
+  <summary>
+    Records the AudioContext autoplay information.
+  </summary>
+  <metric name="Status">
+    <summary>
+      Status of this AudioContext when the autoplay policy applies. It will
+      match the values from AudioContext::AutoplayStatus.
+    </summary>
+  </metric>
+  <metric name="UnlockType">
+    <summary>
+      How the AudioContext was unlocked if it was. It will match the values from
+      AudioContext::AutoplayUnlockType unless the AudioContext was never
+      unlocked in which case it will be equal to -1.
+    </summary>
+  </metric>
+</event>
+
 <event name="Media.Autoplay.Muted.UnmuteAction">
   <owner>mlamouri@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config
index ea463c1a..96e14c8 100644
--- a/tools/perf/expectations.config
+++ b/tools/perf/expectations.config
@@ -339,7 +339,6 @@
 crbug.com/803461 [ Nexus_5 ] system_health.common_mobile/browse:chrome:newtab [ Skip ]
 crbug.com/842163 [ Android_One ] system_health.common_mobile/browse:social:facebook_infinite_scroll [ Skip ]
 crbug.com/842163 [ Android_One ] system_health.common_mobile/browse:social:pinterest_infinite_scroll [ Skip ]
-crbug.com/852840 [ Android_Webview ] system_health.common_mobile/browse:media:youtube [ Skip ]
 
 # Benchmark: system_health.memory_desktop
 crbug.com/728576 [ Mac ] system_health.memory_desktop/browse:news:cnn [ Skip ]
@@ -364,8 +363,6 @@
 crbug.com/799734 [ Win ] system_health.memory_desktop/browse:media:tumblr [ Skip ]
 
 # Benchmark: system_health.memory_mobile
-crbug.com/853190 [ Android_Webview ] system_health.memory_mobile/browse:media:youtube [ Skip ]
-crbug.com/853190 [ Android_Webview ] system_health.memory_mobile/browse:news:cnn [ Skip ]
 crbug.com/787001 [ Android_Webview ] system_health.memory_mobile/load:media:soundcloud [ Skip ]
 [ Android_Webview ] system_health.memory_mobile/browse:chrome:newtab [ Skip ]
 crbug.com/847786 [ Android_One ] system_health.memory_mobile/browse:chrome:newtab [ Skip ]
@@ -387,7 +384,6 @@
 crbug.com/834905 [ Nexus_5 ] system_health.memory_mobile/browse:social:pinterest_infinite_scroll [ Skip ]
 crbug.com/842731 [ Android_One ] system_health.memory_mobile/background:news:nytimes [ Skip ]
 crbug.com/843547 [ Android_Go ] system_health.memory_mobile/background:news:nytimes [ Skip ]
-crbug.com/852840 [ Android_Webview ] system_health.memory_mobile/browse:media:youtube [ Skip ]
 crbug.com/852888 [ Nexus_5X ] system_health.memory_mobile/background:news:nytimes [ Skip ]
 
 # Benchmark: tab_switching.typical_25
@@ -477,8 +473,6 @@
 crbug.com/767970 [ Android_One ] v8.browsing_mobile-future/browse:shopping:avito [ Skip ]
 crbug.com/803870 [ Android_One ] v8.browsing_mobile-future/browse:media:youtube [ Skip ]
 crbug.com/767970 [ Android_One ] v8.browsing_mobile-future/browse:news:cnn [ Skip ]
-crbug.com/853763 [ Android_Webview ] v8.browsing_mobile-future/browse:media:youtube [ Skip ]
-crbug.com/853763 [ Android_Webview ] v8.browsing_mobile-future/browse:news:cnn [ Skip ]
 [ Android_Webview ] v8.browsing_mobile-future/browse:chrome:omnibox [ Skip ]
 [ Android_Webview ] v8.browsing_mobile-future/browse:chrome:newtab [ Skip ]
 crbug.com/803465 [ Nexus_5 ] v8.browsing_mobile-future/browse:chrome:newtab [ Skip ]
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index eaca778f..5e2b9a2f 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -2659,6 +2659,11 @@
       result->parray = CreateUIAElementsArrayForRelation(relation_attribute);
       break;
 
+    case UIA_ControlTypePropertyId:
+      result->vt = VT_I4;
+      result->lVal = ComputeUIAControlType();
+      break;
+
     case UIA_CulturePropertyId:
       result->vt = VT_BSTR;
       GetStringAttributeAsBstr(ax::mojom::StringAttribute::kLanguage,
@@ -2749,7 +2754,6 @@
     case UIA_AnnotationObjectsPropertyId:
     case UIA_AnnotationTypesPropertyId:
     case UIA_CenterPointPropertyId:
-    case UIA_ControlTypePropertyId:
     case UIA_CustomControlTypeId:
     case UIA_FillColorPropertyId:
     case UIA_FillTypePropertyId:
@@ -4494,6 +4498,477 @@
   return result;
 }
 
+long AXPlatformNodeWin::ComputeUIAControlType() {
+  // If this is a web area for a presentational iframe, give it a role of
+  // something other than document so that the fact that it's a separate doc
+  // is not exposed to AT.
+  if (IsWebAreaForPresentationalIframe())
+    return UIA_GroupControlTypeId;
+
+  switch (GetData().role) {
+    case ax::mojom::Role::kAlert:
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kAlertDialog:
+      // Our MSAA implementation suggests the use of
+      // |UIA_TextControlTypeId|, not |UIA_PaneControlTypeId| because some
+      // Windows screen readers are not compatible with
+      // |ax::mojom::Role::kAlertDialog| yet.
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kAnchor:
+      return UIA_HyperlinkControlTypeId;
+
+    case ax::mojom::Role::kApplication:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kArticle:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kAudio:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kBanner:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kBlockquote:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kButton:
+      return UIA_ButtonControlTypeId;
+
+    case ax::mojom::Role::kCanvas:
+      return UIA_ImageControlTypeId;
+
+    case ax::mojom::Role::kCaption:
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kCaret:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kCell:
+      return UIA_DataItemControlTypeId;
+
+    case ax::mojom::Role::kCheckBox:
+      return UIA_CheckBoxControlTypeId;
+
+    case ax::mojom::Role::kClient:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kColorWell:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kColumn:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kColumnHeader:
+      return UIA_DataItemControlTypeId;
+
+    case ax::mojom::Role::kComboBoxGrouping:
+    case ax::mojom::Role::kComboBoxMenuButton:
+      return UIA_ComboBoxControlTypeId;
+
+    case ax::mojom::Role::kComplementary:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kContentDeletion:
+    case ax::mojom::Role::kContentInsertion:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kContentInfo:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kDate:
+    case ax::mojom::Role::kDateTime:
+      return UIA_ListControlTypeId;
+
+    case ax::mojom::Role::kDefinition:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kDescriptionListDetail:
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kDescriptionList:
+      return UIA_ListControlTypeId;
+
+    case ax::mojom::Role::kDescriptionListTerm:
+      return UIA_ListItemControlTypeId;
+
+    case ax::mojom::Role::kDesktop:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kDetails:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kDialog:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kDisclosureTriangle:
+      return UIA_ButtonControlTypeId;
+
+    case ax::mojom::Role::kDirectory:
+      return UIA_ListControlTypeId;
+
+    case ax::mojom::Role::kDocCover:
+      return UIA_ImageControlTypeId;
+
+    case ax::mojom::Role::kDocBackLink:
+    case ax::mojom::Role::kDocBiblioRef:
+    case ax::mojom::Role::kDocGlossRef:
+    case ax::mojom::Role::kDocNoteRef:
+      return UIA_HyperlinkControlTypeId;
+
+    case ax::mojom::Role::kDocBiblioEntry:
+    case ax::mojom::Role::kDocEndnote:
+    case ax::mojom::Role::kDocFootnote:
+      return UIA_ListItemControlTypeId;
+
+    case ax::mojom::Role::kDocPageBreak:
+      return UIA_SeparatorControlTypeId;
+
+    case ax::mojom::Role::kDocAbstract:
+    case ax::mojom::Role::kDocAcknowledgments:
+    case ax::mojom::Role::kDocAfterword:
+    case ax::mojom::Role::kDocAppendix:
+    case ax::mojom::Role::kDocBibliography:
+    case ax::mojom::Role::kDocChapter:
+    case ax::mojom::Role::kDocColophon:
+    case ax::mojom::Role::kDocConclusion:
+    case ax::mojom::Role::kDocCredit:
+    case ax::mojom::Role::kDocCredits:
+    case ax::mojom::Role::kDocDedication:
+    case ax::mojom::Role::kDocEndnotes:
+    case ax::mojom::Role::kDocEpigraph:
+    case ax::mojom::Role::kDocEpilogue:
+    case ax::mojom::Role::kDocErrata:
+    case ax::mojom::Role::kDocExample:
+    case ax::mojom::Role::kDocForeword:
+    case ax::mojom::Role::kDocGlossary:
+    case ax::mojom::Role::kDocIndex:
+    case ax::mojom::Role::kDocIntroduction:
+    case ax::mojom::Role::kDocNotice:
+    case ax::mojom::Role::kDocPageList:
+    case ax::mojom::Role::kDocPart:
+    case ax::mojom::Role::kDocPreface:
+    case ax::mojom::Role::kDocPrologue:
+    case ax::mojom::Role::kDocPullquote:
+    case ax::mojom::Role::kDocQna:
+    case ax::mojom::Role::kDocSubtitle:
+    case ax::mojom::Role::kDocTip:
+    case ax::mojom::Role::kDocToc:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kDocument:
+    case ax::mojom::Role::kRootWebArea:
+    case ax::mojom::Role::kWebArea:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kEmbeddedObject:
+      if (delegate_->GetChildCount()) {
+        return UIA_GroupControlTypeId;
+      } else {
+        return UIA_DocumentControlTypeId;
+      }
+
+    case ax::mojom::Role::kFeed:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kFigcaption:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kFigure:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kFooter:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kForm:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kGenericContainer:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kGraphicsDocument:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kGraphicsObject:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kGraphicsSymbol:
+      return UIA_ImageControlTypeId;
+
+    case ax::mojom::Role::kGrid:
+      return UIA_DataGridControlTypeId;
+
+    case ax::mojom::Role::kGroup:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kHeading:
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kIframe:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kIframePresentational:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kImage:
+      return UIA_ImageControlTypeId;
+
+    case ax::mojom::Role::kImageMap:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kInputTime:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kInlineTextBox:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kLabelText:
+    case ax::mojom::Role::kLegend:
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kLayoutTable:
+      return UIA_DataGridControlTypeId;
+
+    case ax::mojom::Role::kLayoutTableCell:
+      return UIA_DataItemControlTypeId;
+
+    case ax::mojom::Role::kLayoutTableColumn:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kLayoutTableRow:
+      return UIA_DataItemControlTypeId;
+
+    case ax::mojom::Role::kLink:
+      return UIA_HyperlinkControlTypeId;
+
+    case ax::mojom::Role::kList:
+      return UIA_ListControlTypeId;
+
+    case ax::mojom::Role::kListItem:
+      return UIA_ListItemControlTypeId;
+
+    case ax::mojom::Role::kListBox:
+      return UIA_ListControlTypeId;
+
+    case ax::mojom::Role::kListBoxOption:
+      return UIA_ListItemControlTypeId;
+
+    case ax::mojom::Role::kLocationBar:  // TODO(accessibility) Remove.
+      NOTREACHED();
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kLog:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kMain:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kMark:
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kMarquee:
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kMath:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kMenu:
+    case ax::mojom::Role::kMenuButton:
+      return UIA_MenuControlTypeId;
+
+    case ax::mojom::Role::kMenuBar:
+      return UIA_MenuBarControlTypeId;
+
+    case ax::mojom::Role::kMenuItem:
+      return UIA_MenuItemControlTypeId;
+
+    case ax::mojom::Role::kMenuItemCheckBox:
+      return UIA_CheckBoxControlTypeId;
+
+    case ax::mojom::Role::kMenuItemRadio:
+      return UIA_RadioButtonControlTypeId;
+
+    case ax::mojom::Role::kMenuListPopup:
+      if (IsAncestorComboBox())
+        return UIA_ListControlTypeId;
+      return UIA_MenuControlTypeId;
+
+    case ax::mojom::Role::kMenuListOption:
+      if (IsAncestorComboBox())
+        return UIA_ListItemControlTypeId;
+      return UIA_MenuItemControlTypeId;
+
+    case ax::mojom::Role::kMeter:
+      return UIA_ProgressBarControlTypeId;
+
+    case ax::mojom::Role::kNavigation:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kNote:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kParagraph:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kPopUpButton: {
+      std::string html_tag =
+          GetData().GetStringAttribute(ax::mojom::StringAttribute::kHtmlTag);
+      if (html_tag == "select")
+        return UIA_ComboBoxControlTypeId;
+      return UIA_MenuControlTypeId;
+    }
+
+    case ax::mojom::Role::kPre:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kProgressIndicator:
+      return UIA_ProgressBarControlTypeId;
+
+    case ax::mojom::Role::kRadioButton:
+      return UIA_RadioButtonControlTypeId;
+
+    case ax::mojom::Role::kRadioGroup:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kRegion: {
+      std::string html_tag =
+          GetData().GetStringAttribute(ax::mojom::StringAttribute::kHtmlTag);
+      if (html_tag == "section" &&
+          GetData()
+              .GetString16Attribute(ax::mojom::StringAttribute::kName)
+              .empty()) {
+        // Do not use ARIA mapping for nameless <section>.
+        return UIA_GroupControlTypeId;
+      }
+      // Use ARIA mapping.
+      return UIA_PaneControlTypeId;
+    }
+
+    case ax::mojom::Role::kRow: {
+      // Role changes depending on whether row is inside a treegrid
+      // https://www.w3.org/TR/core-aam-1.1/#role-map-row
+      return IsInTreeGrid() ? UIA_TreeItemControlTypeId
+                            : UIA_DataItemControlTypeId;
+    }
+
+    case ax::mojom::Role::kRowHeader:
+      return UIA_DataItemControlTypeId;
+
+    case ax::mojom::Role::kRuby:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kScrollBar:
+      return UIA_ScrollBarControlTypeId;
+
+    case ax::mojom::Role::kScrollView:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kSearch:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kSlider:
+      return UIA_SliderControlTypeId;
+
+    case ax::mojom::Role::kSliderThumb:
+      return UIA_SliderControlTypeId;
+
+    case ax::mojom::Role::kSpinButton:
+      return UIA_SpinnerControlTypeId;
+
+    case ax::mojom::Role::kSwitch:
+      return UIA_CheckBoxControlTypeId;
+
+    case ax::mojom::Role::kAnnotation:
+    case ax::mojom::Role::kListMarker:
+    case ax::mojom::Role::kStaticText:
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kStatus:
+      return UIA_StatusBarControlTypeId;
+
+    case ax::mojom::Role::kSplitter:
+      return UIA_SeparatorControlTypeId;
+
+    case ax::mojom::Role::kSvgRoot:
+      return UIA_ImageControlTypeId;
+
+    case ax::mojom::Role::kTab:
+      return UIA_TabItemControlTypeId;
+
+    case ax::mojom::Role::kTable:
+      return UIA_DataGridControlTypeId;
+
+    case ax::mojom::Role::kTableHeaderContainer:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kTabList:
+      return UIA_TabControlTypeId;
+
+    case ax::mojom::Role::kTabPanel:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kTerm:
+      return UIA_ListItemControlTypeId;
+
+    case ax::mojom::Role::kTitleBar:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kToggleButton:
+      return UIA_ButtonControlTypeId;
+
+    case ax::mojom::Role::kTextField:
+    case ax::mojom::Role::kSearchBox:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kTextFieldWithComboBox:
+      return UIA_ComboBoxControlTypeId;
+
+    case ax::mojom::Role::kAbbr:
+    case ax::mojom::Role::kTime:
+      return UIA_TextControlTypeId;
+
+    case ax::mojom::Role::kTimer:
+      return UIA_PaneControlTypeId;
+
+    case ax::mojom::Role::kToolbar:
+      return UIA_ToolBarControlTypeId;
+
+    case ax::mojom::Role::kTooltip:
+      return UIA_ToolTipControlTypeId;
+
+    case ax::mojom::Role::kTree:
+      return UIA_TreeControlTypeId;
+
+    case ax::mojom::Role::kTreeGrid:
+      return UIA_DataGridControlTypeId;
+
+    case ax::mojom::Role::kTreeItem:
+      return UIA_TreeItemControlTypeId;
+
+    case ax::mojom::Role::kLineBreak:
+      return UIA_SeparatorControlTypeId;
+
+    case ax::mojom::Role::kVideo:
+      return UIA_GroupControlTypeId;
+
+    case ax::mojom::Role::kWebView:
+      return UIA_DocumentControlTypeId;
+
+    case ax::mojom::Role::kPane:
+    case ax::mojom::Role::kWindow:
+    case ax::mojom::Role::kIgnored:
+    case ax::mojom::Role::kNone:
+    case ax::mojom::Role::kPresentational:
+    case ax::mojom::Role::kUnknown:
+      return UIA_PaneControlTypeId;
+  }
+
+  NOTREACHED();
+  return UIA_DocumentControlTypeId;
+}
+
 base::string16 AXPlatformNodeWin::GetValue() {
   base::string16 value = AXPlatformNodeBase::GetValue();
 
diff --git a/ui/accessibility/platform/ax_platform_node_win.h b/ui/accessibility/platform/ax_platform_node_win.h
index f1304b7f..3da068156 100644
--- a/ui/accessibility/platform/ax_platform_node_win.h
+++ b/ui/accessibility/platform/ax_platform_node_win.h
@@ -690,6 +690,8 @@
 
   base::string16 ComputeUIAProperties();
 
+  long ComputeUIAControlType();
+
   AXHypertext ComputeHypertext();
 
   // AXPlatformNodeBase overrides.
diff --git a/ui/aura/env.cc b/ui/aura/env.cc
index 2794cce..332719d0 100644
--- a/ui/aura/env.cc
+++ b/ui/aura/env.cc
@@ -65,10 +65,21 @@
 std::unique_ptr<Env> Env::CreateInstance(Mode mode) {
   DCHECK(!lazy_tls_ptr.Pointer()->Get());
   std::unique_ptr<Env> env(new Env(mode));
-  env->Init();
+  env->Init(nullptr);
   return env;
 }
 
+#if defined(USE_OZONE)
+// static
+std::unique_ptr<Env> Env::CreateInstanceToHostViz(
+    service_manager::Connector* connector) {
+  DCHECK(!lazy_tls_ptr.Pointer()->Get());
+  std::unique_ptr<Env> env(new Env(Mode::LOCAL));
+  env->Init(connector);
+  return env;
+}
+#endif
+
 // static
 Env* Env::GetInstance() {
   Env* env = lazy_tls_ptr.Pointer()->Get();
@@ -195,7 +206,7 @@
   lazy_tls_ptr.Pointer()->Set(this);
 }
 
-void Env::Init() {
+void Env::Init(service_manager::Connector* connector) {
   if (mode_ == Mode::MUS) {
     EnableMusOSExchangeDataProvider();
     EnableMusOverrideInputInjector();
@@ -214,6 +225,14 @@
                           command_line->HasSwitch("in-process-gpu");
   params.using_mojo = command_line->HasSwitch(switches::kEnableDrmMojo);
 
+  if (connector) {
+    // Supplying a connector implies this process is hosting Viz.
+    params.connector = connector;
+    // Hosting viz is currently single-process only.
+    params.single_process = true;
+    params.using_mojo = true;
+  }
+
   ui::OzonePlatform::InitializeForUI(params);
 #endif
   if (!ui::PlatformEventSource::GetInstance())
diff --git a/ui/aura/env.h b/ui/aura/env.h
index 840bfeb6..c8056133f 100644
--- a/ui/aura/env.h
+++ b/ui/aura/env.h
@@ -11,6 +11,7 @@
 #include "base/macros.h"
 #include "base/observer_list.h"
 #include "base/supports_user_data.h"
+#include "build/build_config.h"
 #include "mojo/public/cpp/system/buffer.h"
 #include "ui/aura/aura_export.h"
 #include "ui/base/dragdrop/os_exchange_data_provider_factory.h"
@@ -28,6 +29,10 @@
 class InterfacePtr;
 }
 
+namespace service_manager {
+class Connector;
+}
+
 namespace ui {
 class ContextFactory;
 class ContextFactoryPrivate;
@@ -73,6 +78,14 @@
   // NOTE: if you pass in Mode::MUS it is expected that you call
   // SetWindowTreeClient() before any windows are created.
   static std::unique_ptr<Env> CreateInstance(Mode mode = Mode::LOCAL);
+
+#if defined(USE_OZONE)
+  // used to create a new Env that hosts the viz process. |connector| is the
+  // connector used to establish outbound connections.
+  static std::unique_ptr<Env> CreateInstanceToHostViz(
+      service_manager::Connector* connector);
+#endif
+
   static Env* GetInstance();
   static Env* GetInstanceDontCreate();
 
@@ -167,7 +180,7 @@
 
   explicit Env(Mode mode);
 
-  void Init();
+  void Init(service_manager::Connector* connector);
 
   // After calling this method, all OSExchangeDataProvider instances will be
   // Mus instances. We can't do this work in Init(), because our mode may
diff --git a/ui/display/manager/display_util.cc b/ui/display/manager/display_util.cc
index a0e509e0..ca9395880 100644
--- a/ui/display/manager/display_util.cc
+++ b/ui/display/manager/display_util.cc
@@ -6,6 +6,7 @@
 
 #include <stddef.h>
 #include <algorithm>
+#include <array>
 #include <cmath>
 
 #include "base/logging.h"
diff --git a/ui/display/manager/display_utils_unittest.cc b/ui/display/manager/display_utils_unittest.cc
index f82fbda..b0b0c67 100644
--- a/ui/display/manager/display_utils_unittest.cc
+++ b/ui/display/manager/display_utils_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "ui/display/manager/display_util.h"
 
+#include <array>
 #include <vector>
 
 #include "base/macros.h"
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
index 834e5df..5193b221 100644
--- a/ui/gfx/BUILD.gn
+++ b/ui/gfx/BUILD.gn
@@ -61,6 +61,8 @@
     "decorated_text.h",
     "decorated_text_mac.h",
     "decorated_text_mac.mm",
+    "extension_set.cc",
+    "extension_set.h",
     "favicon_size.cc",
     "favicon_size.h",
     "font.cc",
diff --git a/ui/gl/extension_set.cc b/ui/gfx/extension_set.cc
similarity index 92%
rename from ui/gl/extension_set.cc
rename to ui/gfx/extension_set.cc
index 3b28e75..d61e600 100644
--- a/ui/gl/extension_set.cc
+++ b/ui/gfx/extension_set.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ui/gl/extension_set.h"
+#include "ui/gfx/extension_set.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 
-namespace gl {
+namespace gfx {
 
 ExtensionSet MakeExtensionSet(const base::StringPiece& extensions_string) {
   return ExtensionSet(SplitStringPiece(
@@ -24,4 +24,4 @@
   return base::JoinString(extension_list, " ");
 }
 
-}  // namespace gl
+}  // namespace gfx
diff --git a/ui/gfx/extension_set.h b/ui/gfx/extension_set.h
new file mode 100644
index 0000000..3a699f4d
--- /dev/null
+++ b/ui/gfx/extension_set.h
@@ -0,0 +1,32 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GFX_EXTENSION_SET_H_
+#define UI_GFX_EXTENSION_SET_H_
+
+#include "base/containers/flat_set.h"
+#include "base/strings/string_piece.h"
+#include "ui/gfx/gfx_export.h"
+
+namespace gfx {
+
+using ExtensionSet = base::flat_set<base::StringPiece>;
+
+GFX_EXPORT ExtensionSet
+MakeExtensionSet(const base::StringPiece& extensions_string);
+
+GFX_EXPORT bool HasExtension(const ExtensionSet& extension_set,
+                             const base::StringPiece& extension);
+
+template <size_t N>
+inline bool HasExtension(const ExtensionSet& extension_set,
+                         const char (&extension)[N]) {
+  return HasExtension(extension_set, base::StringPiece(extension, N - 1));
+}
+
+GFX_EXPORT std::string MakeExtensionString(const ExtensionSet& extension_set);
+
+}  // namespace gfx
+
+#endif  // UI_GFX_EXTENSION_SET_H_
diff --git a/ui/gfx/mojo/accelerated_widget.typemap b/ui/gfx/mojo/accelerated_widget.typemap
index 9fa3db1..b9c7019 100644
--- a/ui/gfx/mojo/accelerated_widget.typemap
+++ b/ui/gfx/mojo/accelerated_widget.typemap
@@ -8,4 +8,6 @@
 public_deps = [
   "//ui/gfx",
 ]
-type_mappings = [ "gfx.mojom.AcceleratedWidget=gfx::AcceleratedWidget" ]
+type_mappings = [
+  "gfx.mojom.AcceleratedWidget=gfx::AcceleratedWidget[copyable_pass_by_value]",
+]
diff --git a/ui/gfx/mojo/accelerated_widget_struct_traits.h b/ui/gfx/mojo/accelerated_widget_struct_traits.h
index 7b401d6..5fc9569a 100644
--- a/ui/gfx/mojo/accelerated_widget_struct_traits.h
+++ b/ui/gfx/mojo/accelerated_widget_struct_traits.h
@@ -5,6 +5,7 @@
 #ifndef UI_GFX_MOJO_ACCELERATED_WIDGET_STRUCT_TRAITS_H_
 #define UI_GFX_MOJO_ACCELERATED_WIDGET_STRUCT_TRAITS_H_
 
+#include "build/build_config.h"
 #include "ui/gfx/mojo/accelerated_widget.mojom.h"
 #include "ui/gfx/native_widget_types.h"
 
@@ -13,33 +14,29 @@
 template <>
 struct StructTraits<gfx::mojom::AcceleratedWidgetDataView,
                     gfx::AcceleratedWidget> {
-  static uint64_t widget(const gfx::AcceleratedWidget& widget) {
-#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11)
+  static uint64_t widget(gfx::AcceleratedWidget widget) {
 #if defined(OS_WIN)
     return reinterpret_cast<uint64_t>(widget);
-#else
+#elif defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX)
     return static_cast<uint64_t>(widget);
-#endif
 #else
-    NOTIMPLEMENTED();
+    NOTREACHED();
     return 0;
 #endif
   }
 
   static bool Read(gfx::mojom::AcceleratedWidgetDataView data,
                    gfx::AcceleratedWidget* out) {
-#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11)
-    uint64_t w = data.widget();
 #if defined(OS_WIN)
-    *out = reinterpret_cast<gfx::AcceleratedWidget>(w);
-#else
-    *out = static_cast<gfx::AcceleratedWidget>(w);
-#endif
-#else
-    NOTIMPLEMENTED();
-    *out = 0;
-#endif
+    *out = reinterpret_cast<gfx::AcceleratedWidget>(data.widget());
     return true;
+#elif defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX)
+    *out = static_cast<gfx::AcceleratedWidget>(data.widget());
+    return true;
+#else
+    NOTREACHED();
+    return false;
+#endif
   }
 };
 
diff --git a/ui/gfx/mojo/struct_traits_unittest.cc b/ui/gfx/mojo/struct_traits_unittest.cc
index bbb3cab..aee86762 100644
--- a/ui/gfx/mojo/struct_traits_unittest.cc
+++ b/ui/gfx/mojo/struct_traits_unittest.cc
@@ -8,6 +8,7 @@
 #include "build/build_config.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/mojo/accelerated_widget_struct_traits.h"
 #include "ui/gfx/mojo/buffer_types_struct_traits.h"
 #include "ui/gfx/mojo/presentation_feedback.mojom.h"
 #include "ui/gfx/mojo/presentation_feedback_struct_traits.h"
@@ -20,7 +21,7 @@
 
 namespace {
 
-gfx::AcceleratedWidget castToAcceleratedWidget(int i) {
+gfx::AcceleratedWidget CastToAcceleratedWidget(int i) {
 #if defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX)
   return static_cast<gfx::AcceleratedWidget>(i);
 #else
@@ -60,11 +61,6 @@
     std::move(callback).Run(t);
   }
 
-  void EchoAcceleratedWidget(const AcceleratedWidget& t,
-                             EchoAcceleratedWidgetCallback callback) override {
-    std::move(callback).Run(t);
-  }
-
   void EchoGpuMemoryBufferHandle(
       const GpuMemoryBufferHandle& handle,
       EchoGpuMemoryBufferHandleCallback callback) override {
@@ -141,18 +137,18 @@
   EXPECT_EQ(col4row4, output.matrix().get(3, 3));
 }
 
-// AcceleratedWidgets can only be sent between processes on X11, Ozone, Win
-#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11)
+// AcceleratedWidgets can only be sent between processes on some platforms.
+#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11) || \
+    defined(OS_MACOSX)
 #define MAYBE_AcceleratedWidget AcceleratedWidget
 #else
 #define MAYBE_AcceleratedWidget DISABLED_AcceleratedWidget
 #endif
 
 TEST_F(StructTraitsTest, MAYBE_AcceleratedWidget) {
-  gfx::AcceleratedWidget input(castToAcceleratedWidget(1001));
-  mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+  gfx::AcceleratedWidget input(CastToAcceleratedWidget(1001));
   gfx::AcceleratedWidget output;
-  proxy->EchoAcceleratedWidget(input, &output);
+  SerializeAndDeserialize<gfx::mojom::AcceleratedWidget>(input, &output);
   EXPECT_EQ(input, output);
 }
 
diff --git a/ui/gfx/mojo/traits_test_service.mojom b/ui/gfx/mojo/traits_test_service.mojom
index 013125d..6a1cf64 100644
--- a/ui/gfx/mojo/traits_test_service.mojom
+++ b/ui/gfx/mojo/traits_test_service.mojom
@@ -13,9 +13,6 @@
 // serialization and deserialization.
 interface TraitsTestService {
   [Sync]
-  EchoAcceleratedWidget(AcceleratedWidget w) => (AcceleratedWidget pass);
-
-  [Sync]
   EchoSelectionBound(SelectionBound s) => (SelectionBound pass);
 
   [Sync]
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn
index d3945c3..40875f18 100644
--- a/ui/gl/BUILD.gn
+++ b/ui/gl/BUILD.gn
@@ -61,8 +61,6 @@
     "ca_renderer_layer_params.h",
     "dc_renderer_layer_params.cc",
     "dc_renderer_layer_params.h",
-    "extension_set.cc",
-    "extension_set.h",
     "gl_bindings.cc",
     "gl_bindings.h",
     "gl_bindings_autogen_gl.cc",
diff --git a/ui/gl/extension_set.h b/ui/gl/extension_set.h
deleted file mode 100644
index 2380536..0000000
--- a/ui/gl/extension_set.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_GL_EXTENSION_SET_H_
-#define UI_GL_EXTENSION_SET_H_
-
-#include "base/containers/flat_set.h"
-#include "base/strings/string_piece.h"
-#include "ui/gl/gl_export.h"
-
-namespace gl {
-
-using ExtensionSet = base::flat_set<base::StringPiece>;
-
-GL_EXPORT ExtensionSet
-MakeExtensionSet(const base::StringPiece& extensions_string);
-
-GL_EXPORT bool HasExtension(const ExtensionSet& extension_set,
-                            const base::StringPiece& extension);
-
-template <size_t N>
-inline bool HasExtension(const ExtensionSet& extension_set,
-                         const char (&extension)[N]) {
-  return HasExtension(extension_set, base::StringPiece(extension, N - 1));
-}
-
-GL_EXPORT std::string MakeExtensionString(const ExtensionSet& extension_set);
-
-}  // namespace gl
-
-#endif  // UI_GL_EXTENSION_SET_H_
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py
index 7dba46a..d90aab3 100755
--- a/ui/gl/generate_bindings.py
+++ b/ui/gl/generate_bindings.py
@@ -2805,13 +2805,13 @@
   if set_name == 'gl':
     file.write("""\
 void DriverGL::InitializeDynamicBindings(const GLVersionInfo* ver,
-                                         const ExtensionSet& extensions) {
+                                         const gfx::ExtensionSet& extensions) {
 """)
   elif set_name == 'egl':
     file.write("""\
 void DriverEGL::InitializeClientExtensionBindings() {
   std::string client_extensions(GetClientExtensions());
-  ExtensionSet extensions(MakeExtensionSet(client_extensions));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(client_extensions));
   ALLOW_UNUSED_LOCAL(extensions);
 
 """)
@@ -2819,7 +2819,7 @@
     file.write("""\
 void Driver%s::InitializeExtensionBindings() {
   std::string platform_extensions(GetPlatformExtensions());
-  ExtensionSet extensions(MakeExtensionSet(platform_extensions));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(platform_extensions));
   ALLOW_UNUSED_LOCAL(extensions);
 
 """ % (set_name.upper(),))
@@ -2828,7 +2828,7 @@
     # Extra space at the end of the extension name is intentional,
     # it is used as a separator
     for extension in extensions:
-      file.write('  ext.b_%s = HasExtension(%s, "%s");\n' %
+      file.write('  ext.b_%s = gfx::HasExtension(%s, "%s");\n' %
                  (extension, extension_var, extension))
 
     for func in extension_funcs:
@@ -2847,7 +2847,7 @@
 
 void DriverEGL::InitializeExtensionBindings() {
   std::string platform_extensions(GetPlatformExtensions());
-  ExtensionSet extensions(MakeExtensionSet(platform_extensions));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(platform_extensions));
   ALLOW_UNUSED_LOCAL(extensions);
 
 """)
diff --git a/ui/gl/gl_api_unittest.cc b/ui/gl/gl_api_unittest.cc
index b57f54f..b28b76d9 100644
--- a/ui/gl/gl_api_unittest.cc
+++ b/ui/gl/gl_api_unittest.cc
@@ -60,7 +60,7 @@
 
     std::string extensions_string =
         GetGLExtensionsFromCurrentContext(api_.get());
-    ExtensionSet extension_set = MakeExtensionSet(extensions_string);
+    gfx::ExtensionSet extension_set = gfx::MakeExtensionSet(extensions_string);
 
     auto version = std::make_unique<GLVersionInfo>(
         reinterpret_cast<const char*>(api_->glGetStringFn(GL_VERSION)),
diff --git a/ui/gl/gl_bindings.h b/ui/gl/gl_bindings.h
index ff8e35f..ee534c6 100644
--- a/ui/gl/gl_bindings.h
+++ b/ui/gl/gl_bindings.h
@@ -39,7 +39,7 @@
 #include "base/logging.h"
 #include "base/threading/thread_local.h"
 #include "build/build_config.h"
-#include "ui/gl/extension_set.h"
+#include "ui/gfx/extension_set.h"
 #include "ui/gl/gl_export.h"
 
 // The standard OpenGL native extension headers are also included.
@@ -454,7 +454,7 @@
 struct GL_EXPORT DriverGL {
   void InitializeStaticBindings();
   void InitializeDynamicBindings(const GLVersionInfo* ver,
-                                 const ExtensionSet& extensions);
+                                 const gfx::ExtensionSet& extensions);
   void ClearBindings();
 
   ProcsGL fn;
diff --git a/ui/gl/gl_bindings_autogen_egl.cc b/ui/gl/gl_bindings_autogen_egl.cc
index 92801db..0c64bd7 100644
--- a/ui/gl/gl_bindings_autogen_egl.cc
+++ b/ui/gl/gl_bindings_autogen_egl.cc
@@ -112,12 +112,12 @@
 
 void DriverEGL::InitializeClientExtensionBindings() {
   std::string client_extensions(GetClientExtensions());
-  ExtensionSet extensions(MakeExtensionSet(client_extensions));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(client_extensions));
   ALLOW_UNUSED_LOCAL(extensions);
 
   ext.b_EGL_EXT_platform_base =
-      HasExtension(extensions, "EGL_EXT_platform_base");
-  ext.b_EGL_KHR_debug = HasExtension(extensions, "EGL_KHR_debug");
+      gfx::HasExtension(extensions, "EGL_EXT_platform_base");
+  ext.b_EGL_KHR_debug = gfx::HasExtension(extensions, "EGL_KHR_debug");
 
   if (ext.b_EGL_KHR_debug) {
     fn.eglDebugMessageControlKHRFn =
@@ -144,50 +144,52 @@
 
 void DriverEGL::InitializeExtensionBindings() {
   std::string platform_extensions(GetPlatformExtensions());
-  ExtensionSet extensions(MakeExtensionSet(platform_extensions));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(platform_extensions));
   ALLOW_UNUSED_LOCAL(extensions);
 
   ext.b_EGL_ANDROID_get_frame_timestamps =
-      HasExtension(extensions, "EGL_ANDROID_get_frame_timestamps");
+      gfx::HasExtension(extensions, "EGL_ANDROID_get_frame_timestamps");
   ext.b_EGL_ANDROID_get_native_client_buffer =
-      HasExtension(extensions, "EGL_ANDROID_get_native_client_buffer");
+      gfx::HasExtension(extensions, "EGL_ANDROID_get_native_client_buffer");
   ext.b_EGL_ANDROID_native_fence_sync =
-      HasExtension(extensions, "EGL_ANDROID_native_fence_sync");
+      gfx::HasExtension(extensions, "EGL_ANDROID_native_fence_sync");
   ext.b_EGL_ANGLE_d3d_share_handle_client_buffer =
-      HasExtension(extensions, "EGL_ANGLE_d3d_share_handle_client_buffer");
+      gfx::HasExtension(extensions, "EGL_ANGLE_d3d_share_handle_client_buffer");
   ext.b_EGL_ANGLE_program_cache_control =
-      HasExtension(extensions, "EGL_ANGLE_program_cache_control");
+      gfx::HasExtension(extensions, "EGL_ANGLE_program_cache_control");
   ext.b_EGL_ANGLE_query_surface_pointer =
-      HasExtension(extensions, "EGL_ANGLE_query_surface_pointer");
+      gfx::HasExtension(extensions, "EGL_ANGLE_query_surface_pointer");
   ext.b_EGL_ANGLE_stream_producer_d3d_texture =
-      HasExtension(extensions, "EGL_ANGLE_stream_producer_d3d_texture");
-  ext.b_EGL_ANGLE_surface_d3d_texture_2d_share_handle =
-      HasExtension(extensions, "EGL_ANGLE_surface_d3d_texture_2d_share_handle");
+      gfx::HasExtension(extensions, "EGL_ANGLE_stream_producer_d3d_texture");
+  ext.b_EGL_ANGLE_surface_d3d_texture_2d_share_handle = gfx::HasExtension(
+      extensions, "EGL_ANGLE_surface_d3d_texture_2d_share_handle");
   ext.b_EGL_CHROMIUM_sync_control =
-      HasExtension(extensions, "EGL_CHROMIUM_sync_control");
+      gfx::HasExtension(extensions, "EGL_CHROMIUM_sync_control");
   ext.b_EGL_EXT_image_flush_external =
-      HasExtension(extensions, "EGL_EXT_image_flush_external");
-  ext.b_EGL_KHR_fence_sync = HasExtension(extensions, "EGL_KHR_fence_sync");
+      gfx::HasExtension(extensions, "EGL_EXT_image_flush_external");
+  ext.b_EGL_KHR_fence_sync =
+      gfx::HasExtension(extensions, "EGL_KHR_fence_sync");
   ext.b_EGL_KHR_gl_texture_2D_image =
-      HasExtension(extensions, "EGL_KHR_gl_texture_2D_image");
-  ext.b_EGL_KHR_image = HasExtension(extensions, "EGL_KHR_image");
-  ext.b_EGL_KHR_image_base = HasExtension(extensions, "EGL_KHR_image_base");
-  ext.b_EGL_KHR_stream = HasExtension(extensions, "EGL_KHR_stream");
+      gfx::HasExtension(extensions, "EGL_KHR_gl_texture_2D_image");
+  ext.b_EGL_KHR_image = gfx::HasExtension(extensions, "EGL_KHR_image");
+  ext.b_EGL_KHR_image_base =
+      gfx::HasExtension(extensions, "EGL_KHR_image_base");
+  ext.b_EGL_KHR_stream = gfx::HasExtension(extensions, "EGL_KHR_stream");
   ext.b_EGL_KHR_stream_consumer_gltexture =
-      HasExtension(extensions, "EGL_KHR_stream_consumer_gltexture");
+      gfx::HasExtension(extensions, "EGL_KHR_stream_consumer_gltexture");
   ext.b_EGL_KHR_swap_buffers_with_damage =
-      HasExtension(extensions, "EGL_KHR_swap_buffers_with_damage");
-  ext.b_EGL_KHR_wait_sync = HasExtension(extensions, "EGL_KHR_wait_sync");
+      gfx::HasExtension(extensions, "EGL_KHR_swap_buffers_with_damage");
+  ext.b_EGL_KHR_wait_sync = gfx::HasExtension(extensions, "EGL_KHR_wait_sync");
   ext.b_EGL_MESA_image_dma_buf_export =
-      HasExtension(extensions, "EGL_MESA_image_dma_buf_export");
+      gfx::HasExtension(extensions, "EGL_MESA_image_dma_buf_export");
   ext.b_EGL_NV_post_sub_buffer =
-      HasExtension(extensions, "EGL_NV_post_sub_buffer");
+      gfx::HasExtension(extensions, "EGL_NV_post_sub_buffer");
   ext.b_EGL_NV_stream_consumer_gltexture_yuv =
-      HasExtension(extensions, "EGL_NV_stream_consumer_gltexture_yuv");
-  ext.b_GL_CHROMIUM_egl_android_native_fence_sync_hack = HasExtension(
+      gfx::HasExtension(extensions, "EGL_NV_stream_consumer_gltexture_yuv");
+  ext.b_GL_CHROMIUM_egl_android_native_fence_sync_hack = gfx::HasExtension(
       extensions, "GL_CHROMIUM_egl_android_native_fence_sync_hack");
   ext.b_GL_CHROMIUM_egl_khr_fence_sync_hack =
-      HasExtension(extensions, "GL_CHROMIUM_egl_khr_fence_sync_hack");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_egl_khr_fence_sync_hack");
 
   if (ext.b_EGL_KHR_image || ext.b_EGL_KHR_image_base ||
       ext.b_EGL_KHR_gl_texture_2D_image) {
diff --git a/ui/gl/gl_bindings_autogen_gl.cc b/ui/gl/gl_bindings_autogen_gl.cc
index 193c37c..f6447f7 100644
--- a/ui/gl/gl_bindings_autogen_gl.cc
+++ b/ui/gl/gl_bindings_autogen_gl.cc
@@ -278,131 +278,138 @@
 }
 
 void DriverGL::InitializeDynamicBindings(const GLVersionInfo* ver,
-                                         const ExtensionSet& extensions) {
+                                         const gfx::ExtensionSet& extensions) {
   ext.b_GL_ANGLE_framebuffer_blit =
-      HasExtension(extensions, "GL_ANGLE_framebuffer_blit");
+      gfx::HasExtension(extensions, "GL_ANGLE_framebuffer_blit");
   ext.b_GL_ANGLE_framebuffer_multisample =
-      HasExtension(extensions, "GL_ANGLE_framebuffer_multisample");
+      gfx::HasExtension(extensions, "GL_ANGLE_framebuffer_multisample");
   ext.b_GL_ANGLE_instanced_arrays =
-      HasExtension(extensions, "GL_ANGLE_instanced_arrays");
+      gfx::HasExtension(extensions, "GL_ANGLE_instanced_arrays");
   ext.b_GL_ANGLE_request_extension =
-      HasExtension(extensions, "GL_ANGLE_request_extension");
+      gfx::HasExtension(extensions, "GL_ANGLE_request_extension");
   ext.b_GL_ANGLE_robust_client_memory =
-      HasExtension(extensions, "GL_ANGLE_robust_client_memory");
+      gfx::HasExtension(extensions, "GL_ANGLE_robust_client_memory");
   ext.b_GL_ANGLE_translated_shader_source =
-      HasExtension(extensions, "GL_ANGLE_translated_shader_source");
-  ext.b_GL_APPLE_fence = HasExtension(extensions, "GL_APPLE_fence");
+      gfx::HasExtension(extensions, "GL_ANGLE_translated_shader_source");
+  ext.b_GL_APPLE_fence = gfx::HasExtension(extensions, "GL_APPLE_fence");
   ext.b_GL_APPLE_vertex_array_object =
-      HasExtension(extensions, "GL_APPLE_vertex_array_object");
+      gfx::HasExtension(extensions, "GL_APPLE_vertex_array_object");
   ext.b_GL_ARB_blend_func_extended =
-      HasExtension(extensions, "GL_ARB_blend_func_extended");
-  ext.b_GL_ARB_draw_buffers = HasExtension(extensions, "GL_ARB_draw_buffers");
+      gfx::HasExtension(extensions, "GL_ARB_blend_func_extended");
+  ext.b_GL_ARB_draw_buffers =
+      gfx::HasExtension(extensions, "GL_ARB_draw_buffers");
   ext.b_GL_ARB_draw_instanced =
-      HasExtension(extensions, "GL_ARB_draw_instanced");
+      gfx::HasExtension(extensions, "GL_ARB_draw_instanced");
   ext.b_GL_ARB_framebuffer_object =
-      HasExtension(extensions, "GL_ARB_framebuffer_object");
+      gfx::HasExtension(extensions, "GL_ARB_framebuffer_object");
   ext.b_GL_ARB_get_program_binary =
-      HasExtension(extensions, "GL_ARB_get_program_binary");
+      gfx::HasExtension(extensions, "GL_ARB_get_program_binary");
   ext.b_GL_ARB_instanced_arrays =
-      HasExtension(extensions, "GL_ARB_instanced_arrays");
+      gfx::HasExtension(extensions, "GL_ARB_instanced_arrays");
   ext.b_GL_ARB_internalformat_query =
-      HasExtension(extensions, "GL_ARB_internalformat_query");
+      gfx::HasExtension(extensions, "GL_ARB_internalformat_query");
   ext.b_GL_ARB_map_buffer_range =
-      HasExtension(extensions, "GL_ARB_map_buffer_range");
+      gfx::HasExtension(extensions, "GL_ARB_map_buffer_range");
   ext.b_GL_ARB_occlusion_query =
-      HasExtension(extensions, "GL_ARB_occlusion_query");
+      gfx::HasExtension(extensions, "GL_ARB_occlusion_query");
   ext.b_GL_ARB_program_interface_query =
-      HasExtension(extensions, "GL_ARB_program_interface_query");
-  ext.b_GL_ARB_robustness = HasExtension(extensions, "GL_ARB_robustness");
+      gfx::HasExtension(extensions, "GL_ARB_program_interface_query");
+  ext.b_GL_ARB_robustness = gfx::HasExtension(extensions, "GL_ARB_robustness");
   ext.b_GL_ARB_sampler_objects =
-      HasExtension(extensions, "GL_ARB_sampler_objects");
+      gfx::HasExtension(extensions, "GL_ARB_sampler_objects");
   ext.b_GL_ARB_shader_image_load_store =
-      HasExtension(extensions, "GL_ARB_shader_image_load_store");
-  ext.b_GL_ARB_sync = HasExtension(extensions, "GL_ARB_sync");
+      gfx::HasExtension(extensions, "GL_ARB_shader_image_load_store");
+  ext.b_GL_ARB_sync = gfx::HasExtension(extensions, "GL_ARB_sync");
   ext.b_GL_ARB_texture_multisample =
-      HasExtension(extensions, "GL_ARB_texture_multisample");
+      gfx::HasExtension(extensions, "GL_ARB_texture_multisample");
   ext.b_GL_ARB_texture_storage =
-      HasExtension(extensions, "GL_ARB_texture_storage");
-  ext.b_GL_ARB_timer_query = HasExtension(extensions, "GL_ARB_timer_query");
+      gfx::HasExtension(extensions, "GL_ARB_texture_storage");
+  ext.b_GL_ARB_timer_query =
+      gfx::HasExtension(extensions, "GL_ARB_timer_query");
   ext.b_GL_ARB_transform_feedback2 =
-      HasExtension(extensions, "GL_ARB_transform_feedback2");
+      gfx::HasExtension(extensions, "GL_ARB_transform_feedback2");
   ext.b_GL_ARB_vertex_array_object =
-      HasExtension(extensions, "GL_ARB_vertex_array_object");
+      gfx::HasExtension(extensions, "GL_ARB_vertex_array_object");
   ext.b_GL_CHROMIUM_bind_uniform_location =
-      HasExtension(extensions, "GL_CHROMIUM_bind_uniform_location");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_bind_uniform_location");
   ext.b_GL_CHROMIUM_compressed_copy_texture =
-      HasExtension(extensions, "GL_CHROMIUM_compressed_copy_texture");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_compressed_copy_texture");
   ext.b_GL_CHROMIUM_copy_compressed_texture =
-      HasExtension(extensions, "GL_CHROMIUM_copy_compressed_texture");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_copy_compressed_texture");
   ext.b_GL_CHROMIUM_copy_texture =
-      HasExtension(extensions, "GL_CHROMIUM_copy_texture");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_copy_texture");
   ext.b_GL_CHROMIUM_gles_depth_binding_hack =
-      HasExtension(extensions, "GL_CHROMIUM_gles_depth_binding_hack");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_gles_depth_binding_hack");
   ext.b_GL_CHROMIUM_glgetstringi_hack =
-      HasExtension(extensions, "GL_CHROMIUM_glgetstringi_hack");
+      gfx::HasExtension(extensions, "GL_CHROMIUM_glgetstringi_hack");
   ext.b_GL_EXT_blend_func_extended =
-      HasExtension(extensions, "GL_EXT_blend_func_extended");
-  ext.b_GL_EXT_debug_marker = HasExtension(extensions, "GL_EXT_debug_marker");
+      gfx::HasExtension(extensions, "GL_EXT_blend_func_extended");
+  ext.b_GL_EXT_debug_marker =
+      gfx::HasExtension(extensions, "GL_EXT_debug_marker");
   ext.b_GL_EXT_direct_state_access =
-      HasExtension(extensions, "GL_EXT_direct_state_access");
+      gfx::HasExtension(extensions, "GL_EXT_direct_state_access");
   ext.b_GL_EXT_discard_framebuffer =
-      HasExtension(extensions, "GL_EXT_discard_framebuffer");
+      gfx::HasExtension(extensions, "GL_EXT_discard_framebuffer");
   ext.b_GL_EXT_disjoint_timer_query =
-      HasExtension(extensions, "GL_EXT_disjoint_timer_query");
-  ext.b_GL_EXT_draw_buffers = HasExtension(extensions, "GL_EXT_draw_buffers");
+      gfx::HasExtension(extensions, "GL_EXT_disjoint_timer_query");
+  ext.b_GL_EXT_draw_buffers =
+      gfx::HasExtension(extensions, "GL_EXT_draw_buffers");
   ext.b_GL_EXT_framebuffer_blit =
-      HasExtension(extensions, "GL_EXT_framebuffer_blit");
+      gfx::HasExtension(extensions, "GL_EXT_framebuffer_blit");
   ext.b_GL_EXT_framebuffer_multisample =
-      HasExtension(extensions, "GL_EXT_framebuffer_multisample");
+      gfx::HasExtension(extensions, "GL_EXT_framebuffer_multisample");
   ext.b_GL_EXT_framebuffer_object =
-      HasExtension(extensions, "GL_EXT_framebuffer_object");
-  ext.b_GL_EXT_gpu_shader4 = HasExtension(extensions, "GL_EXT_gpu_shader4");
+      gfx::HasExtension(extensions, "GL_EXT_framebuffer_object");
+  ext.b_GL_EXT_gpu_shader4 =
+      gfx::HasExtension(extensions, "GL_EXT_gpu_shader4");
   ext.b_GL_EXT_instanced_arrays =
-      HasExtension(extensions, "GL_EXT_instanced_arrays");
+      gfx::HasExtension(extensions, "GL_EXT_instanced_arrays");
   ext.b_GL_EXT_map_buffer_range =
-      HasExtension(extensions, "GL_EXT_map_buffer_range");
+      gfx::HasExtension(extensions, "GL_EXT_map_buffer_range");
   ext.b_GL_EXT_multisampled_render_to_texture =
-      HasExtension(extensions, "GL_EXT_multisampled_render_to_texture");
+      gfx::HasExtension(extensions, "GL_EXT_multisampled_render_to_texture");
   ext.b_GL_EXT_occlusion_query_boolean =
-      HasExtension(extensions, "GL_EXT_occlusion_query_boolean");
-  ext.b_GL_EXT_robustness = HasExtension(extensions, "GL_EXT_robustness");
+      gfx::HasExtension(extensions, "GL_EXT_occlusion_query_boolean");
+  ext.b_GL_EXT_robustness = gfx::HasExtension(extensions, "GL_EXT_robustness");
   ext.b_GL_EXT_shader_image_load_store =
-      HasExtension(extensions, "GL_EXT_shader_image_load_store");
+      gfx::HasExtension(extensions, "GL_EXT_shader_image_load_store");
   ext.b_GL_EXT_texture_buffer =
-      HasExtension(extensions, "GL_EXT_texture_buffer");
+      gfx::HasExtension(extensions, "GL_EXT_texture_buffer");
   ext.b_GL_EXT_texture_buffer_object =
-      HasExtension(extensions, "GL_EXT_texture_buffer_object");
+      gfx::HasExtension(extensions, "GL_EXT_texture_buffer_object");
   ext.b_GL_EXT_texture_storage =
-      HasExtension(extensions, "GL_EXT_texture_storage");
-  ext.b_GL_EXT_timer_query = HasExtension(extensions, "GL_EXT_timer_query");
+      gfx::HasExtension(extensions, "GL_EXT_texture_storage");
+  ext.b_GL_EXT_timer_query =
+      gfx::HasExtension(extensions, "GL_EXT_timer_query");
   ext.b_GL_EXT_transform_feedback =
-      HasExtension(extensions, "GL_EXT_transform_feedback");
+      gfx::HasExtension(extensions, "GL_EXT_transform_feedback");
   ext.b_GL_EXT_unpack_subimage =
-      HasExtension(extensions, "GL_EXT_unpack_subimage");
+      gfx::HasExtension(extensions, "GL_EXT_unpack_subimage");
   ext.b_GL_EXT_window_rectangles =
-      HasExtension(extensions, "GL_EXT_window_rectangles");
+      gfx::HasExtension(extensions, "GL_EXT_window_rectangles");
   ext.b_GL_IMG_multisampled_render_to_texture =
-      HasExtension(extensions, "GL_IMG_multisampled_render_to_texture");
+      gfx::HasExtension(extensions, "GL_IMG_multisampled_render_to_texture");
   ext.b_GL_INTEL_framebuffer_CMAA =
-      HasExtension(extensions, "GL_INTEL_framebuffer_CMAA");
+      gfx::HasExtension(extensions, "GL_INTEL_framebuffer_CMAA");
   ext.b_GL_KHR_blend_equation_advanced =
-      HasExtension(extensions, "GL_KHR_blend_equation_advanced");
-  ext.b_GL_KHR_debug = HasExtension(extensions, "GL_KHR_debug");
-  ext.b_GL_KHR_robustness = HasExtension(extensions, "GL_KHR_robustness");
+      gfx::HasExtension(extensions, "GL_KHR_blend_equation_advanced");
+  ext.b_GL_KHR_debug = gfx::HasExtension(extensions, "GL_KHR_debug");
+  ext.b_GL_KHR_robustness = gfx::HasExtension(extensions, "GL_KHR_robustness");
   ext.b_GL_NV_blend_equation_advanced =
-      HasExtension(extensions, "GL_NV_blend_equation_advanced");
-  ext.b_GL_NV_fence = HasExtension(extensions, "GL_NV_fence");
+      gfx::HasExtension(extensions, "GL_NV_blend_equation_advanced");
+  ext.b_GL_NV_fence = gfx::HasExtension(extensions, "GL_NV_fence");
   ext.b_GL_NV_framebuffer_mixed_samples =
-      HasExtension(extensions, "GL_NV_framebuffer_mixed_samples");
-  ext.b_GL_NV_path_rendering = HasExtension(extensions, "GL_NV_path_rendering");
-  ext.b_GL_OES_EGL_image = HasExtension(extensions, "GL_OES_EGL_image");
+      gfx::HasExtension(extensions, "GL_NV_framebuffer_mixed_samples");
+  ext.b_GL_NV_path_rendering =
+      gfx::HasExtension(extensions, "GL_NV_path_rendering");
+  ext.b_GL_OES_EGL_image = gfx::HasExtension(extensions, "GL_OES_EGL_image");
   ext.b_GL_OES_get_program_binary =
-      HasExtension(extensions, "GL_OES_get_program_binary");
-  ext.b_GL_OES_mapbuffer = HasExtension(extensions, "GL_OES_mapbuffer");
+      gfx::HasExtension(extensions, "GL_OES_get_program_binary");
+  ext.b_GL_OES_mapbuffer = gfx::HasExtension(extensions, "GL_OES_mapbuffer");
   ext.b_GL_OES_texture_buffer =
-      HasExtension(extensions, "GL_OES_texture_buffer");
+      gfx::HasExtension(extensions, "GL_OES_texture_buffer");
   ext.b_GL_OES_vertex_array_object =
-      HasExtension(extensions, "GL_OES_vertex_array_object");
+      gfx::HasExtension(extensions, "GL_OES_vertex_array_object");
 
   if (ext.b_GL_INTEL_framebuffer_CMAA) {
     fn.glApplyFramebufferAttachmentCMAAINTELFn =
diff --git a/ui/gl/gl_bindings_autogen_glx.cc b/ui/gl/gl_bindings_autogen_glx.cc
index 44d5391..24adbba 100644
--- a/ui/gl/gl_bindings_autogen_glx.cc
+++ b/ui/gl/gl_bindings_autogen_glx.cc
@@ -110,21 +110,24 @@
 
 void DriverGLX::InitializeExtensionBindings() {
   std::string platform_extensions(GetPlatformExtensions());
-  ExtensionSet extensions(MakeExtensionSet(platform_extensions));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(platform_extensions));
   ALLOW_UNUSED_LOCAL(extensions);
 
   ext.b_GLX_ARB_create_context =
-      HasExtension(extensions, "GLX_ARB_create_context");
-  ext.b_GLX_EXT_swap_control = HasExtension(extensions, "GLX_EXT_swap_control");
+      gfx::HasExtension(extensions, "GLX_ARB_create_context");
+  ext.b_GLX_EXT_swap_control =
+      gfx::HasExtension(extensions, "GLX_EXT_swap_control");
   ext.b_GLX_EXT_texture_from_pixmap =
-      HasExtension(extensions, "GLX_EXT_texture_from_pixmap");
+      gfx::HasExtension(extensions, "GLX_EXT_texture_from_pixmap");
   ext.b_GLX_MESA_copy_sub_buffer =
-      HasExtension(extensions, "GLX_MESA_copy_sub_buffer");
+      gfx::HasExtension(extensions, "GLX_MESA_copy_sub_buffer");
   ext.b_GLX_MESA_swap_control =
-      HasExtension(extensions, "GLX_MESA_swap_control");
-  ext.b_GLX_OML_sync_control = HasExtension(extensions, "GLX_OML_sync_control");
-  ext.b_GLX_SGIX_fbconfig = HasExtension(extensions, "GLX_SGIX_fbconfig");
-  ext.b_GLX_SGI_video_sync = HasExtension(extensions, "GLX_SGI_video_sync");
+      gfx::HasExtension(extensions, "GLX_MESA_swap_control");
+  ext.b_GLX_OML_sync_control =
+      gfx::HasExtension(extensions, "GLX_OML_sync_control");
+  ext.b_GLX_SGIX_fbconfig = gfx::HasExtension(extensions, "GLX_SGIX_fbconfig");
+  ext.b_GLX_SGI_video_sync =
+      gfx::HasExtension(extensions, "GLX_SGI_video_sync");
 
   if (ext.b_GLX_EXT_texture_from_pixmap) {
     fn.glXBindTexImageEXTFn = reinterpret_cast<glXBindTexImageEXTProc>(
diff --git a/ui/gl/gl_bindings_autogen_osmesa.cc b/ui/gl/gl_bindings_autogen_osmesa.cc
index a72fbf4..aefcf12 100644
--- a/ui/gl/gl_bindings_autogen_osmesa.cc
+++ b/ui/gl/gl_bindings_autogen_osmesa.cc
@@ -54,7 +54,7 @@
 
 void DriverOSMESA::InitializeExtensionBindings() {
   std::string platform_extensions(GetPlatformExtensions());
-  ExtensionSet extensions(MakeExtensionSet(platform_extensions));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(platform_extensions));
   ALLOW_UNUSED_LOCAL(extensions);
 }
 
diff --git a/ui/gl/gl_bindings_autogen_wgl.cc b/ui/gl/gl_bindings_autogen_wgl.cc
index 547cf73..3ff6ef7 100644
--- a/ui/gl/gl_bindings_autogen_wgl.cc
+++ b/ui/gl/gl_bindings_autogen_wgl.cc
@@ -56,18 +56,20 @@
 
 void DriverWGL::InitializeExtensionBindings() {
   std::string platform_extensions(GetPlatformExtensions());
-  ExtensionSet extensions(MakeExtensionSet(platform_extensions));
+  gfx::ExtensionSet extensions(gfx::MakeExtensionSet(platform_extensions));
   ALLOW_UNUSED_LOCAL(extensions);
 
   ext.b_WGL_ARB_create_context =
-      HasExtension(extensions, "WGL_ARB_create_context");
+      gfx::HasExtension(extensions, "WGL_ARB_create_context");
   ext.b_WGL_ARB_extensions_string =
-      HasExtension(extensions, "WGL_ARB_extensions_string");
-  ext.b_WGL_ARB_pbuffer = HasExtension(extensions, "WGL_ARB_pbuffer");
-  ext.b_WGL_ARB_pixel_format = HasExtension(extensions, "WGL_ARB_pixel_format");
+      gfx::HasExtension(extensions, "WGL_ARB_extensions_string");
+  ext.b_WGL_ARB_pbuffer = gfx::HasExtension(extensions, "WGL_ARB_pbuffer");
+  ext.b_WGL_ARB_pixel_format =
+      gfx::HasExtension(extensions, "WGL_ARB_pixel_format");
   ext.b_WGL_EXT_extensions_string =
-      HasExtension(extensions, "WGL_EXT_extensions_string");
-  ext.b_WGL_EXT_swap_control = HasExtension(extensions, "WGL_EXT_swap_control");
+      gfx::HasExtension(extensions, "WGL_EXT_extensions_string");
+  ext.b_WGL_EXT_swap_control =
+      gfx::HasExtension(extensions, "WGL_EXT_swap_control");
 
   if (ext.b_WGL_ARB_pixel_format) {
     fn.wglChoosePixelFormatARBFn =
diff --git a/ui/gl/gl_context.cc b/ui/gl/gl_context.cc
index fa2ce57..4e4ae136 100644
--- a/ui/gl/gl_context.cc
+++ b/ui/gl/gl_context.cc
@@ -188,7 +188,7 @@
 }
 
 bool GLContext::HasExtension(const char* name) {
-  return gl::HasExtension(GetExtensions(), name);
+  return gfx::HasExtension(GetExtensions(), name);
 }
 
 const GLVersionInfo* GLContext::GetVersionInfo() {
@@ -368,7 +368,7 @@
   return gpu_timing_->CreateGPUTimingClient();
 }
 
-const ExtensionSet& GLContextReal::GetExtensions() {
+const gfx::ExtensionSet& GLContextReal::GetExtensions() {
   DCHECK(IsCurrent(nullptr));
   if (!extensions_initialized_) {
     SetExtensionsFromString(GetGLExtensionsFromCurrentContext(gl_api()));
@@ -396,7 +396,7 @@
 
 void GLContextReal::SetExtensionsFromString(std::string extensions) {
   extensions_string_ = std::move(extensions);
-  extensions_ = MakeExtensionSet(extensions_string_);
+  extensions_ = gfx::MakeExtensionSet(extensions_string_);
   extensions_initialized_ = true;
 }
 
diff --git a/ui/gl/gl_context.h b/ui/gl/gl_context.h
index 6ab2006..1b92811 100644
--- a/ui/gl/gl_context.h
+++ b/ui/gl/gl_context.h
@@ -13,7 +13,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/cancellation_flag.h"
-#include "ui/gl/extension_set.h"
+#include "ui/gfx/extension_set.h"
 #include "ui/gl/gl_export.h"
 #include "ui/gl/gl_share_group.h"
 #include "ui/gl/gl_state_restorer.h"
@@ -129,7 +129,7 @@
   void SetGLStateRestorer(GLStateRestorer* state_restorer);
 
   // Returns set of extensions. The context must be current.
-  virtual const ExtensionSet& GetExtensions() = 0;
+  virtual const gfx::ExtensionSet& GetExtensions() = 0;
 
   // Indicate that it is safe to force this context to switch GPUs, since
   // transitioning can cause corruption and hangs (OS X only).
@@ -269,7 +269,7 @@
  public:
   explicit GLContextReal(GLShareGroup* share_group);
   scoped_refptr<GPUTimingClient> CreateGPUTimingClient() override;
-  const ExtensionSet& GetExtensions() override;
+  const gfx::ExtensionSet& GetExtensions() override;
 
  protected:
   ~GLContextReal() override;
@@ -283,7 +283,7 @@
  private:
   std::unique_ptr<GPUTiming> gpu_timing_;
   std::string extensions_string_;
-  ExtensionSet extensions_;
+  gfx::ExtensionSet extensions_;
   bool extensions_initialized_ = false;
   DISALLOW_COPY_AND_ASSIGN(GLContextReal);
 };
diff --git a/ui/gl/gl_image_native_pixmap_unittest.cc b/ui/gl/gl_image_native_pixmap_unittest.cc
index a8639cb..9cc799c5 100644
--- a/ui/gl/gl_image_native_pixmap_unittest.cc
+++ b/ui/gl/gl_image_native_pixmap_unittest.cc
@@ -24,8 +24,8 @@
   bool SkipTest() const override {
     const std::string dmabuf_import_ext = "EGL_MESA_image_dma_buf_export";
     std::string platform_extensions(DriverEGL::GetPlatformExtensions());
-    ExtensionSet extensions(MakeExtensionSet(platform_extensions));
-    if (!HasExtension(extensions, dmabuf_import_ext)) {
+    gfx::ExtensionSet extensions(gfx::MakeExtensionSet(platform_extensions));
+    if (!gfx::HasExtension(extensions, dmabuf_import_ext)) {
       LOG(WARNING) << "Skip test, missing extension " << dmabuf_import_ext;
       return true;
     }
diff --git a/ui/gl/gl_implementation.cc b/ui/gl/gl_implementation.cc
index 58e7ad29..3e40d451 100644
--- a/ui/gl/gl_implementation.cc
+++ b/ui/gl/gl_implementation.cc
@@ -71,13 +71,14 @@
   }
 }
 
-ExtensionSet GetGLExtensionsFromCurrentContext(GLApi* api,
-                                               GLenum extensions_enum,
-                                               GLenum num_extensions_enum) {
+gfx::ExtensionSet GetGLExtensionsFromCurrentContext(
+    GLApi* api,
+    GLenum extensions_enum,
+    GLenum num_extensions_enum) {
   if (WillUseGLGetStringForExtensions(api)) {
     const char* extensions =
         reinterpret_cast<const char*>(api->glGetStringFn(extensions_enum));
-    return extensions ? MakeExtensionSet(extensions) : ExtensionSet();
+    return extensions ? gfx::MakeExtensionSet(extensions) : gfx::ExtensionSet();
   }
 
   GLint num_extensions = 0;
@@ -90,7 +91,7 @@
     DCHECK(extension != NULL);
     exts[i] = extension;
   }
-  return ExtensionSet(exts);
+  return gfx::ExtensionSet(exts);
 }
 
 }  // namespace
@@ -257,11 +258,11 @@
   return base::JoinString(exts, " ");
 }
 
-ExtensionSet GetRequestableGLExtensionsFromCurrentContext() {
+gfx::ExtensionSet GetRequestableGLExtensionsFromCurrentContext() {
   return GetRequestableGLExtensionsFromCurrentContext(g_current_gl_context);
 }
 
-ExtensionSet GetRequestableGLExtensionsFromCurrentContext(GLApi* api) {
+gfx::ExtensionSet GetRequestableGLExtensionsFromCurrentContext(GLApi* api) {
   return GetGLExtensionsFromCurrentContext(api, GL_REQUESTABLE_EXTENSIONS_ANGLE,
                                            GL_NUM_REQUESTABLE_EXTENSIONS_ANGLE);
 }
@@ -273,7 +274,7 @@
 bool WillUseGLGetStringForExtensions(GLApi* api) {
   const char* version_str =
       reinterpret_cast<const char*>(api->glGetStringFn(GL_VERSION));
-  ExtensionSet extensions;
+  gfx::ExtensionSet extensions;
   GLVersionInfo version_info(version_str, nullptr, extensions);
   return version_info.is_es || version_info.major_version < 3;
 }
diff --git a/ui/gl/gl_implementation.h b/ui/gl/gl_implementation.h
index 9c15e55..0c5a996 100644
--- a/ui/gl/gl_implementation.h
+++ b/ui/gl/gl_implementation.h
@@ -12,7 +12,7 @@
 #include "base/files/file_path.h"
 #include "base/native_library.h"
 #include "build/build_config.h"
-#include "ui/gl/extension_set.h"
+#include "ui/gfx/extension_set.h"
 #include "ui/gl/gl_export.h"
 #include "ui/gl/gl_switches.h"
 
@@ -121,8 +121,9 @@
 GL_EXPORT std::string GetGLExtensionsFromCurrentContext();
 GL_EXPORT std::string GetGLExtensionsFromCurrentContext(GLApi* api);
 
-GL_EXPORT ExtensionSet GetRequestableGLExtensionsFromCurrentContext();
-GL_EXPORT ExtensionSet GetRequestableGLExtensionsFromCurrentContext(GLApi* api);
+GL_EXPORT gfx::ExtensionSet GetRequestableGLExtensionsFromCurrentContext();
+GL_EXPORT gfx::ExtensionSet GetRequestableGLExtensionsFromCurrentContext(
+    GLApi* api);
 
 // Helper for the GL bindings implementation to understand whether
 // glGetString(GL_EXTENSIONS) or glGetStringi(GL_EXTENSIONS, i) will
diff --git a/ui/gl/gl_version_info.cc b/ui/gl/gl_version_info.cc
index 8081b0a..cf545b7 100644
--- a/ui/gl/gl_version_info.cc
+++ b/ui/gl/gl_version_info.cc
@@ -24,7 +24,7 @@
 
 GLVersionInfo::GLVersionInfo(const char* version_str,
                              const char* renderer_str,
-                             const ExtensionSet& extensions)
+                             const gfx::ExtensionSet& extensions)
     : is_es(false),
       is_angle(false),
       is_d3d(false),
@@ -41,7 +41,7 @@
 
 void GLVersionInfo::Initialize(const char* version_str,
                                const char* renderer_str,
-                               const ExtensionSet& extensions) {
+                               const gfx::ExtensionSet& extensions) {
   if (version_str)
     ParseVersionString(version_str);
   if (renderer_str) {
@@ -61,7 +61,7 @@
   }
   is_desktop_core_profile =
       DesktopCoreCommonCheck(is_es, major_version, minor_version) &&
-      !HasExtension(extensions, "GL_ARB_compatibility");
+      !gfx::HasExtension(extensions, "GL_ARB_compatibility");
   is_es3_capable = IsES3Capable(extensions);
 }
 
@@ -164,7 +164,7 @@
   }
 }
 
-bool GLVersionInfo::IsES3Capable(const ExtensionSet& extensions) const {
+bool GLVersionInfo::IsES3Capable(const gfx::ExtensionSet& extensions) const {
   // Version ES3 capable without extensions needed.
   if (IsAtLeastGLES(3, 0) || IsAtLeastGL(4, 2)) {
     return true;
@@ -177,7 +177,7 @@
 
   bool has_transform_feedback =
       (IsAtLeastGL(4, 0) ||
-       HasExtension(extensions, "GL_ARB_transform_feedback2"));
+       gfx::HasExtension(extensions, "GL_ARB_transform_feedback2"));
 
   // This code used to require the GL_ARB_gpu_shader5 extension in order to
   // have support for dynamic indexing of sampler arrays, which was
@@ -186,7 +186,8 @@
   // Mesa/Gallium on AMD GPUs) don't support it, we no longer require it.
 
   // tex storage is available in core spec since GL 4.2.
-  bool has_tex_storage = HasExtension(extensions, "GL_ARB_texture_storage");
+  bool has_tex_storage =
+      gfx::HasExtension(extensions, "GL_ARB_texture_storage");
 
   // TODO(cwallez) check for texture related extensions. See crbug.com/623577
 
diff --git a/ui/gl/gl_version_info.h b/ui/gl/gl_version_info.h
index f82634a..19dce397 100644
--- a/ui/gl/gl_version_info.h
+++ b/ui/gl/gl_version_info.h
@@ -9,7 +9,7 @@
 #include <string>
 #include "base/macros.h"
 #include "build/build_config.h"
-#include "ui/gl/extension_set.h"
+#include "ui/gfx/extension_set.h"
 #include "ui/gl/gl_export.h"
 
 namespace gl {
@@ -17,7 +17,7 @@
 struct GL_EXPORT GLVersionInfo {
   GLVersionInfo(const char* version_str,
                 const char* renderer_str,
-                const ExtensionSet& exts);
+                const gfx::ExtensionSet& exts);
 
   bool IsAtLeastGL(unsigned major, unsigned minor) const {
     return !is_es && (major_version > major ||
@@ -59,9 +59,9 @@
  private:
   void Initialize(const char* version_str,
                   const char* renderer_str,
-                  const ExtensionSet& extensions);
+                  const gfx::ExtensionSet& extensions);
   void ParseVersionString(const char* version_str);
-  bool IsES3Capable(const ExtensionSet& extensions) const;
+  bool IsES3Capable(const gfx::ExtensionSet& extensions) const;
 
   DISALLOW_COPY_AND_ASSIGN(GLVersionInfo);
 };
diff --git a/ui/gl/gl_version_info_unittest.cc b/ui/gl/gl_version_info_unittest.cc
index 2e1139c9..27e8414 100644
--- a/ui/gl/gl_version_info_unittest.cc
+++ b/ui/gl/gl_version_info_unittest.cc
@@ -55,7 +55,7 @@
        false, false, "", "23.20.782.0"},
       // This is a non spec compliant string from Nexus6 on Android N.
       {"OpenGL ES 3.1V@104.0", 3, 1, true, false, true, "", "104.0"}};
-  ExtensionSet extensions;
+  gfx::ExtensionSet extensions;
   for (size_t ii = 0; ii < base::size(kTestData); ++ii) {
     GLVersionInfo version_info(kTestData[ii].gl_version, nullptr, extensions);
     EXPECT_EQ(kTestData[ii].expected_gl_major, version_info.major_version);
diff --git a/ui/ozone/platform/drm/gpu/drm_thread.cc b/ui/ozone/platform/drm/gpu/drm_thread.cc
index b23b01e67..3d2cf2a 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread.cc
+++ b/ui/ozone/platform/drm/gpu/drm_thread.cc
@@ -238,24 +238,24 @@
     window->GetVSyncParameters(callback);
 }
 
-void DrmThread::CreateWindow(const gfx::AcceleratedWidget& widget) {
+void DrmThread::CreateWindow(gfx::AcceleratedWidget widget) {
   std::unique_ptr<DrmWindow> window(
       new DrmWindow(widget, device_manager_.get(), screen_manager_.get()));
   window->Initialize(buffer_generator_.get());
   screen_manager_->AddWindow(widget, std::move(window));
 }
 
-void DrmThread::DestroyWindow(const gfx::AcceleratedWidget& widget) {
+void DrmThread::DestroyWindow(gfx::AcceleratedWidget widget) {
   std::unique_ptr<DrmWindow> window = screen_manager_->RemoveWindow(widget);
   window->Shutdown();
 }
 
-void DrmThread::SetWindowBounds(const gfx::AcceleratedWidget& widget,
+void DrmThread::SetWindowBounds(gfx::AcceleratedWidget widget,
                                 const gfx::Rect& bounds) {
   screen_manager_->GetWindow(widget)->SetBounds(bounds);
 }
 
-void DrmThread::SetCursor(const gfx::AcceleratedWidget& widget,
+void DrmThread::SetCursor(gfx::AcceleratedWidget widget,
                           const std::vector<SkBitmap>& bitmaps,
                           const gfx::Point& location,
                           int32_t frame_delay_ms) {
@@ -263,15 +263,15 @@
       ->SetCursor(bitmaps, location, frame_delay_ms);
 }
 
-void DrmThread::MoveCursor(const gfx::AcceleratedWidget& widget,
+void DrmThread::MoveCursor(gfx::AcceleratedWidget widget,
                            const gfx::Point& location) {
   screen_manager_->GetWindow(widget)->MoveCursor(location);
 }
 
 void DrmThread::CheckOverlayCapabilities(
-    const gfx::AcceleratedWidget& widget,
+    gfx::AcceleratedWidget widget,
     const OverlaySurfaceCandidateList& overlays,
-    base::OnceCallback<void(const gfx::AcceleratedWidget&,
+    base::OnceCallback<void(gfx::AcceleratedWidget,
                             const OverlaySurfaceCandidateList&,
                             const OverlayStatusList&)> callback) {
   TRACE_EVENT0("drm,hwoverlays", "DrmThread::CheckOverlayCapabilities");
diff --git a/ui/ozone/platform/drm/gpu/drm_thread.h b/ui/ozone/platform/drm/gpu/drm_thread.h
index ec86dbc..368209f 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread.h
+++ b/ui/ozone/platform/drm/gpu/drm_thread.h
@@ -92,9 +92,9 @@
 
   // ozone::mojom::DrmDevice
   void StartDrmDevice(StartDrmDeviceCallback callback) override;
-  void CreateWindow(const gfx::AcceleratedWidget& widget) override;
-  void DestroyWindow(const gfx::AcceleratedWidget& widget) override;
-  void SetWindowBounds(const gfx::AcceleratedWidget& widget,
+  void CreateWindow(gfx::AcceleratedWidget widget) override;
+  void DestroyWindow(gfx::AcceleratedWidget widget) override;
+  void SetWindowBounds(gfx::AcceleratedWidget widget,
                        const gfx::Rect& bounds) override;
   void TakeDisplayControl(base::OnceCallback<void(bool)> callback) override;
   void RelinquishDisplayControl(
@@ -124,18 +124,18 @@
       const std::vector<display::GammaRampRGBEntry>& degamma_lut,
       const std::vector<display::GammaRampRGBEntry>& gamma_lut) override;
   void CheckOverlayCapabilities(
-      const gfx::AcceleratedWidget& widget,
+      gfx::AcceleratedWidget widget,
       const OverlaySurfaceCandidateList& overlays,
-      base::OnceCallback<void(const gfx::AcceleratedWidget&,
+      base::OnceCallback<void(gfx::AcceleratedWidget,
                               const OverlaySurfaceCandidateList&,
                               const OverlayStatusList&)> callback) override;
 
   // ozone::mojom::DeviceCursor
-  void SetCursor(const gfx::AcceleratedWidget& widget,
+  void SetCursor(gfx::AcceleratedWidget widget,
                  const std::vector<SkBitmap>& bitmaps,
                  const gfx::Point& location,
                  int32_t frame_delay_ms) override;
-  void MoveCursor(const gfx::AcceleratedWidget& widget,
+  void MoveCursor(gfx::AcceleratedWidget widget,
                   const gfx::Point& location) override;
 
   // base::Thread:
diff --git a/ui/ozone/platform/drm/gpu/drm_thread_message_proxy.cc b/ui/ozone/platform/drm/gpu/drm_thread_message_proxy.cc
index 7217f11..600ac77 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread_message_proxy.cc
+++ b/ui/ozone/platform/drm/gpu/drm_thread_message_proxy.cc
@@ -249,7 +249,7 @@
 }
 
 void DrmThreadMessageProxy::OnCheckOverlayCapabilitiesCallback(
-    const gfx::AcceleratedWidget& widget,
+    gfx::AcceleratedWidget widget,
     const OverlaySurfaceCandidateList& candidates,
     const OverlayStatusList& returns) const {
   auto param_overlays = CreateParamsFromOverlaySurfaceCandidate(candidates);
diff --git a/ui/ozone/platform/drm/gpu/drm_thread_message_proxy.h b/ui/ozone/platform/drm/gpu/drm_thread_message_proxy.h
index ef02797..f21fd24 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread_message_proxy.h
+++ b/ui/ozone/platform/drm/gpu/drm_thread_message_proxy.h
@@ -81,7 +81,7 @@
       const std::vector<display::GammaRampRGBEntry>& gamma_lut);
 
   void OnCheckOverlayCapabilitiesCallback(
-      const gfx::AcceleratedWidget& widget,
+      gfx::AcceleratedWidget widget,
       const OverlaySurfaceCandidateList& overlays,
       const OverlayStatusList& returns) const;
   void OnRefreshNativeDisplaysCallback(MovableDisplaySnapshots displays) const;
diff --git a/ui/ozone/platform/drm/host/drm_overlay_manager.cc b/ui/ozone/platform/drm/host/drm_overlay_manager.cc
index 4087391..3ac13112 100644
--- a/ui/ozone/platform/drm/host/drm_overlay_manager.cc
+++ b/ui/ozone/platform/drm/host/drm_overlay_manager.cc
@@ -136,7 +136,7 @@
 }
 
 void DrmOverlayManager::GpuSentOverlayResult(
-    const gfx::AcceleratedWidget& widget,
+    gfx::AcceleratedWidget widget,
     const OverlaySurfaceCandidateList& candidates,
     const OverlayStatusList& returns) {
   TRACE_EVENT_ASYNC_END0(
diff --git a/ui/ozone/platform/drm/host/drm_overlay_manager.h b/ui/ozone/platform/drm/host/drm_overlay_manager.h
index a8ee300..31578262 100644
--- a/ui/ozone/platform/drm/host/drm_overlay_manager.h
+++ b/ui/ozone/platform/drm/host/drm_overlay_manager.h
@@ -38,7 +38,7 @@
 
   // Communication-free implementations of actions performed in response to
   // messages from the GPU thread.
-  void GpuSentOverlayResult(const gfx::AcceleratedWidget& widget,
+  void GpuSentOverlayResult(gfx::AcceleratedWidget widget,
                             const OverlaySurfaceCandidateList& params,
                             const OverlayStatusList& returns);
 
diff --git a/ui/ozone/platform/drm/host/host_drm_device.cc b/ui/ozone/platform/drm/host/host_drm_device.cc
index 24b5592f..9911cbb2 100644
--- a/ui/ozone/platform/drm/host/host_drm_device.cc
+++ b/ui/ozone/platform/drm/host/host_drm_device.cc
@@ -338,7 +338,7 @@
 }
 
 void HostDrmDevice::GpuCheckOverlayCapabilitiesCallback(
-    const gfx::AcceleratedWidget& widget,
+    gfx::AcceleratedWidget widget,
     const OverlaySurfaceCandidateList& overlays,
     const OverlayStatusList& returns) const {
   DCHECK_CALLED_ON_VALID_THREAD(on_window_server_thread_);
diff --git a/ui/ozone/platform/drm/host/host_drm_device.h b/ui/ozone/platform/drm/host/host_drm_device.h
index 03b08f7..8a3f3578 100644
--- a/ui/ozone/platform/drm/host/host_drm_device.h
+++ b/ui/ozone/platform/drm/host/host_drm_device.h
@@ -121,7 +121,7 @@
   void RunObservers();
 
   void GpuCheckOverlayCapabilitiesCallback(
-      const gfx::AcceleratedWidget& widget,
+      gfx::AcceleratedWidget widget,
       const OverlaySurfaceCandidateList& overlays,
       const OverlayStatusList& returns) const;
 
diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm
index 8996de5..230fd8f2 100644
--- a/ui/views/cocoa/bridged_native_widget.mm
+++ b/ui/views/cocoa/bridged_native_widget.mm
@@ -677,6 +677,9 @@
   // If going into fullscreen, store an answer for GetRestoredBounds().
   if (target_fullscreen_state)
     bounds_before_fullscreen_ = gfx::ScreenRectFromNSRect([window_ frame]);
+
+  // Notify that fullscreen state changed.
+  native_widget_mac_->OnWindowFullscreenStateChange();
 }
 
 void BridgedNativeWidget::OnFullscreenTransitionComplete(
diff --git a/ui/views/widget/native_widget_mac.h b/ui/views/widget/native_widget_mac.h
index c1d97e3..7da60cf0 100644
--- a/ui/views/widget/native_widget_mac.h
+++ b/ui/views/widget/native_widget_mac.h
@@ -51,6 +51,9 @@
   // from the bottom of the window.
   virtual int SheetPositionY();
 
+  // Notifies that the widget starts to enter or exit fullscreen mode.
+  virtual void OnWindowFullscreenStateChange() {}
+
   // internal::NativeWidgetPrivate:
   void InitNativeWidget(const Widget::InitParams& params) override;
   void OnWidgetInitDone() override;